[cedar-backup-svn] SF.net SVN: cedar-backup:[923] cedar-backup2/trunk
Brought to you by:
pronovic
|
From: <pro...@us...> - 2008-10-06 02:11:24
|
Revision: 923
http://cedar-backup.svn.sourceforge.net/cedar-backup/?rev=923&view=rev
Author: pronovic
Date: 2008-10-06 02:11:17 +0000 (Mon, 06 Oct 2008)
Log Message:
-----------
Add <ignore_failures> option to peer configuration.
Modified Paths:
--------------
cedar-backup2/trunk/CedarBackup2/actions/stage.py
cedar-backup2/trunk/CedarBackup2/config.py
cedar-backup2/trunk/Changelog
cedar-backup2/trunk/manual/src/config.xml
cedar-backup2/trunk/test/configtests.py
cedar-backup2/trunk/test/data/cback.conf.10
cedar-backup2/trunk/test/data/cback.conf.15
cedar-backup2/trunk/test/data/cback.conf.20
cedar-backup2/trunk/test/data/cback.conf.21
cedar-backup2/trunk/test/data/cback.conf.23
Modified: cedar-backup2/trunk/CedarBackup2/actions/stage.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/actions/stage.py 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/CedarBackup2/actions/stage.py 2008-10-06 02:11:17 UTC (rev 923)
@@ -111,8 +111,12 @@
stagingDirs = _createStagingDirs(config, dailyDir, allPeers)
for peer in allPeers:
logger.info("Staging peer [%s]." % peer.name)
+ ignoreFailures = _getIgnoreFailuresFlag(options, peer)
if not peer.checkCollectIndicator():
- logger.error("Peer [%s] was not ready to be staged." % peer.name)
+ if not ignoreFailures:
+ logger.error("Peer [%s] was not ready to be staged." % peer.name)
+ else:
+ logger.info("Peer [%s] was not ready to be staged." % peer.name)
continue
logger.debug("Found collect indicator.")
targetDir = stagingDirs[peer.name]
@@ -186,6 +190,28 @@
# Private attribute "getter" functions
########################################################################
+####################################
+# _getIgnoreFailuresFlag() function
+####################################
+
+def _getIgnoreFailuresFlag(options, peer):
+ """
+ Gets the ignore failures flag based on options and peer configuration.
+ @param options: Options object
+ @param peer: Peer configuration to check
+ @return: Whether to ignore stage failures for this peer
+ """
+ if peer.ignoreFailureMode is None or peer.ignoreFailureMode == "none":
+ return False
+ elif peer.ignoreFailureMode == "all":
+ return True
+ else:
+ if options.full or isStartOfWeek(config.options.startingDay):
+ return peer.ignoreFailureMode == "weekly"
+ else:
+ return peer.ignoreFailureMode == "daily"
+
+
##########################
# _getDailyDir() function
##########################
Modified: cedar-backup2/trunk/CedarBackup2/config.py
===================================================================
--- cedar-backup2/trunk/CedarBackup2/config.py 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/CedarBackup2/config.py 2008-10-06 02:11:17 UTC (rev 923)
@@ -272,6 +272,7 @@
VALID_ORDER_MODES = [ "index", "dependency", ]
VALID_BLANK_MODES = [ "daily", "weekly", ]
VALID_BYTE_UNITS = [ UNIT_BYTES, UNIT_KBYTES, UNIT_MBYTES, UNIT_GBYTES, ]
+VALID_FAILURE_MODES = [ "none", "all", "daily", "weekly", ]
REWRITABLE_MEDIA_TYPES = [ "cdrw-74", "cdrw-80", "dvd+rw", ]
@@ -1794,29 +1795,33 @@
- The peer name must be a non-empty string.
- The collect directory must be an absolute path.
+ - The ignore failure mode must be one of the values in L{VALID_FAILURE_MODES}.
@sort: __init__, __repr__, __str__, __cmp__, name, collectDir
"""
- def __init__(self, name=None, collectDir=None):
+ def __init__(self, name=None, collectDir=None, ignoreFailureMode=None):
"""
Constructor for the C{LocalPeer} class.
@param name: Name of the peer, typically a valid hostname.
@param collectDir: Collect directory to stage files from on peer.
+ @param ignoreFailureMode: Ignore failure mode for peer.
@raise ValueError: If one of the values is invalid.
"""
self._name = None
self._collectDir = None
+ self._ignoreFailureMode = None
self.name = name
self.collectDir = collectDir
+ self.ignoreFailureMode = ignoreFailureMode
def __repr__(self):
"""
Official string representation for class instance.
"""
- return "LocalPeer(%s, %s)" % (self.name, self.collectDir)
+ return "LocalPeer(%s, %s, %s)" % (self.name, self.collectDir, self.ignoreFailureMode)
def __str__(self):
"""
@@ -1842,6 +1847,11 @@
return -1
else:
return 1
+ if self._ignoreFailureMode != other._ignoreFailureMode:
+ if self._ignoreFailureMode < other._ignoreFailureMode:
+ return -1
+ else:
+ return 1
return 0
def _setName(self, value):
@@ -1880,8 +1890,26 @@
"""
return self._collectDir
+ def _setIgnoreFailureMode(self, value):
+ """
+ Property target used to set the ignoreFailure mode.
+ If not C{None}, the mode must be one of the values in L{VALID_FAILURE_MODES}.
+ @raise ValueError: If the value is not valid.
+ """
+ if value is not None:
+ if value not in VALID_FAILURE_MODES:
+ raise ValueError("Ignore failure mode must be one of %s." % VALID_FAILURE_MODES)
+ self._ignoreFailureMode = value
+
+ def _getIgnoreFailureMode(self):
+ """
+ Property target used to get the ignoreFailure mode.
+ """
+ return self._ignoreFailureMode
+
name = property(_getName, _setName, None, "Name of the peer, typically a valid hostname.")
collectDir = property(_getCollectDir, _setCollectDir, None, "Collect directory to stage files from on peer.")
+ ignoreFailureMode = property(_getIgnoreFailureMode, _setIgnoreFailureMode, None, "Ignore failure mode for peer.")
########################################################################
@@ -1908,13 +1936,14 @@
- The rsh command must be a non-empty string.
- The cback command must be a non-empty string.
- Any managed action name must be a non-empty string matching C{ACTION_NAME_REGEX}
+ - The ignore failure mode must be one of the values in L{VALID_FAILURE_MODES}.
@sort: __init__, __repr__, __str__, __cmp__, name, collectDir, remoteUser, rcpCommand
"""
def __init__(self, name=None, collectDir=None, remoteUser=None,
rcpCommand=None, rshCommand=None, cbackCommand=None,
- managed=False, managedActions=None):
+ managed=False, managedActions=None, ignoreFailureMode=None):
"""
Constructor for the C{RemotePeer} class.
@@ -1926,6 +1955,7 @@
@param cbackCommand: Overridden cback-compatible command to use on remote peer.
@param managed: Indicates whether this is a managed peer.
@param managedActions: Overridden set of actions that are managed on the peer.
+ @param ignoreFailureMode: Ignore failure mode for peer.
@raise ValueError: If one of the values is invalid.
"""
@@ -1937,6 +1967,7 @@
self._cbackCommand = None
self._managed = None
self._managedActions = None
+ self._ignoreFailureMode = None
self.name = name
self.collectDir = collectDir
self.remoteUser = remoteUser
@@ -1945,14 +1976,15 @@
self.cbackCommand = cbackCommand
self.managed = managed
self.managedActions = managedActions
+ self.ignoreFailureMode = ignoreFailureMode
def __repr__(self):
"""
Official string representation for class instance.
"""
- return "RemotePeer(%s, %s, %s, %s, %s, %s, %s, %s)" % (self.name, self.collectDir, self.remoteUser,
- self.rcpCommand, self.rshCommand, self.cbackCommand,
- self.managed, self.managedActions)
+ return "RemotePeer(%s, %s, %s, %s, %s, %s, %s, %s, %s)" % (self.name, self.collectDir, self.remoteUser,
+ self.rcpCommand, self.rshCommand, self.cbackCommand,
+ self.managed, self.managedActions, self.ignoreFailureMode)
def __str__(self):
"""
@@ -2008,6 +2040,11 @@
return -1
else:
return 1
+ if self._ignoreFailureMode != other._ignoreFailureMode:
+ if self._ignoreFailureMode < other._ignoreFailureMode:
+ return -1
+ else:
+ return 1
return 0
def _setName(self, value):
@@ -2152,6 +2189,23 @@
"""
return self._managedActions
+ def _setIgnoreFailureMode(self, value):
+ """
+ Property target used to set the ignoreFailure mode.
+ If not C{None}, the mode must be one of the values in L{VALID_FAILURE_MODES}.
+ @raise ValueError: If the value is not valid.
+ """
+ if value is not None:
+ if value not in VALID_FAILURE_MODES:
+ raise ValueError("Ignore failure mode must be one of %s." % VALID_FAILURE_MODES)
+ self._ignoreFailureMode = value
+
+ def _getIgnoreFailureMode(self):
+ """
+ Property target used to get the ignoreFailure mode.
+ """
+ return self._ignoreFailureMode
+
name = property(_getName, _setName, None, "Name of the peer, must be a valid hostname.")
collectDir = property(_getCollectDir, _setCollectDir, None, "Collect directory to stage files from on peer.")
remoteUser = property(_getRemoteUser, _setRemoteUser, None, "Name of backup user on remote peer.")
@@ -2160,6 +2214,7 @@
cbackCommand = property(_getCbackCommand, _setCbackCommand, None, "Overridden cback-compatible command to use on remote peer.")
managed = property(_getManaged, _setManaged, None, "Indicates whether this is a managed peer.")
managedActions = property(_getManagedActions, _setManagedActions, None, "Overridden set of actions that are managed on the peer.")
+ ignoreFailureMode = property(_getIgnoreFailureMode, _setIgnoreFailureMode, None, "Ignore failure mode for peer.")
########################################################################
@@ -4846,6 +4901,7 @@
localPeer = LocalPeer()
localPeer.name = readString(entry, "name")
localPeer.collectDir = readString(entry, "collect_dir")
+ localPeer.ignoreFailureMode = readString(entry, "ignore_failures")
localPeers.append(localPeer)
elif peerType == "remote":
remotePeer = RemotePeer()
@@ -4855,6 +4911,7 @@
remotePeer.rcpCommand = readString(entry, "rcp_command")
remotePeer.rshCommand = readString(entry, "rsh_command")
remotePeer.cbackCommand = readString(entry, "cback_command")
+ remotePeer.ignoreFailureMode = readString(entry, "ignore_failures")
remotePeer.managed = readBoolean(entry, "managed")
managedActions = readString(entry, "managed_actions")
remotePeer.managedActions = Config._parseCommaSeparatedString(managedActions)
@@ -5443,8 +5500,9 @@
We add the following fields to the document::
- name peer/name
- collectDir peer/collect_dir
+ name peer/name
+ collectDir peer/collect_dir
+ ignoreFailureMode peer/ignore_failures
Additionally, C{peer/type} is filled in with C{"local"}, since this is a
local peer.
@@ -5464,6 +5522,7 @@
addStringNode(xmlDom, sectionNode, "name", localPeer.name)
addStringNode(xmlDom, sectionNode, "type", "local")
addStringNode(xmlDom, sectionNode, "collect_dir", localPeer.collectDir)
+ addStringNode(xmlDom, sectionNode, "ignore_failures", localPeer.ignoreFailureMode)
_addLocalPeer = staticmethod(_addLocalPeer)
def _addRemotePeer(xmlDom, parentNode, remotePeer):
@@ -5472,15 +5531,16 @@
We add the following fields to the document::
- name peer/name
- collectDir peer/collect_dir
- remoteUser peer/backup_user
- rcpCommand peer/rcp_command
- rcpCommand peer/rcp_command
- rshCommand peer/rsh_command
- cbackCommand peer/cback_command
- managed peer/managed
- managedActions peer/managed_actions
+ name peer/name
+ collectDir peer/collect_dir
+ remoteUser peer/backup_user
+ rcpCommand peer/rcp_command
+ rcpCommand peer/rcp_command
+ rshCommand peer/rsh_command
+ cbackCommand peer/cback_command
+ ignoreFailureMode peer/ignore_failures
+ managed peer/managed
+ managedActions peer/managed_actions
Additionally, C{peer/type} is filled in with C{"remote"}, since this is a
remote peer.
@@ -5504,6 +5564,7 @@
addStringNode(xmlDom, sectionNode, "rcp_command", remotePeer.rcpCommand)
addStringNode(xmlDom, sectionNode, "rsh_command", remotePeer.rshCommand)
addStringNode(xmlDom, sectionNode, "cback_command", remotePeer.cbackCommand)
+ addStringNode(xmlDom, sectionNode, "ignore_failures", remotePeer.ignoreFailureMode)
addBooleanNode(xmlDom, sectionNode, "managed", remotePeer.managed)
managedActions = Config._buildCommaSeparatedString(remotePeer.managedActions)
addStringNode(xmlDom, sectionNode, "managed_actions", managedActions)
Modified: cedar-backup2/trunk/Changelog
===================================================================
--- cedar-backup2/trunk/Changelog 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/Changelog 2008-10-06 02:11:17 UTC (rev 923)
@@ -2,6 +2,7 @@
* Fix a few typos in the CREDITS file.
* Update README to properly reference SourceForge site.
+ * Add <ignore_failures> option to peer configuration.
Version 2.18.0 05 May 2008
Modified: cedar-backup2/trunk/manual/src/config.xml
===================================================================
--- cedar-backup2/trunk/manual/src/config.xml 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/manual/src/config.xml 2008-10-06 02:11:17 UTC (rev 923)
@@ -775,6 +775,7 @@
<type>remote</type>
<backup_user>backup</backup_user>
<collect_dir>/opt/backup/collect</collect_dir>
+ <ignore_failures>all</ignore_failures>
</peer>
<peer>
<name>machine3</name>
@@ -846,7 +847,6 @@
</listitem>
</varlistentry>
-
<varlistentry>
<term><literal>collect_dir</literal></term>
<listitem>
@@ -864,6 +864,36 @@
</listitem>
</varlistentry>
+ <varlistentry>
+ <term><literal>ignore_failures</literal></term>
+ <listitem>
+ <para>Ignore failure mode for this peer</para>
+ <para>
+ The ignore failure mode indicates whether
+ <quote>not ready to be staged</quote> errors
+ should be ignored for this peer. This option is
+ intended to be used for peers that are up only
+ intermittently, to cut down on the number of
+ error emails received by the Cedar Backup
+ administrator.
+ </para>
+ <para>
+ The "none" mode means that all errors will be
+ reported. This is the default behavior. The
+ "all" mode means to ignore all failures. The
+ "weekly" mode means to ignore failures for a
+ start-of-week or full backup. The "daily" mode
+ means to ignore failures for any backup that is
+ not either a full backup or a start-of-week
+ backup.
+ </para>
+ <para>
+ <emphasis>Restrictions:</emphasis> If set, must
+ be one of "none", "all", "daily", or "weekly".
+ </para>
+ </listitem>
+ </varlistentry>
+
</variablelist>
</listitem>
@@ -958,6 +988,36 @@
</varlistentry>
<varlistentry>
+ <term><literal>ignore_failures</literal></term>
+ <listitem>
+ <para>Ignore failure mode for this peer</para>
+ <para>
+ The ignore failure mode indicates whether
+ <quote>not ready to be staged</quote> errors
+ should be ignored for this peer. This option is
+ intended to be used for peers that are up only
+ intermittently, to cut down on the number of
+ error emails received by the Cedar Backup
+ administrator.
+ </para>
+ <para>
+ The "none" mode means that all errors will be
+ reported. This is the default behavior. The
+ "all" mode means to ignore all failures. The
+ "weekly" mode means to ignore failures for a
+ start-of-week or full backup. The "daily" mode
+ means to ignore failures for any backup that is
+ not either a full backup or a start-of-week
+ backup.
+ </para>
+ <para>
+ <emphasis>Restrictions:</emphasis> If set, must
+ be one of "none", "all", "daily", or "weekly".
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><literal>backup_user</literal></term>
<listitem>
<para>Name of backup user on the remote peer.</para>
Modified: cedar-backup2/trunk/test/configtests.py
===================================================================
--- cedar-backup2/trunk/test/configtests.py 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/test/configtests.py 2008-10-06 02:11:17 UTC (rev 923)
@@ -3512,14 +3512,16 @@
localPeer = LocalPeer()
self.failUnlessEqual(None, localPeer.name)
self.failUnlessEqual(None, localPeer.collectDir)
+ self.failUnlessEqual(None, localPeer.ignoreFailureMode)
def testConstructor_002(self):
"""
Test constructor with all values filled in, with valid values.
"""
- localPeer = LocalPeer("myname", "/whatever")
+ localPeer = LocalPeer("myname", "/whatever", "all")
self.failUnlessEqual("myname", localPeer.name)
self.failUnlessEqual("/whatever", localPeer.collectDir)
+ self.failUnlessEqual("all", localPeer.ignoreFailureMode)
def testConstructor_003(self):
"""
@@ -3584,7 +3586,39 @@
self.failUnlessAssignRaises(ValueError, localPeer, "collectDir", "bogus")
self.failUnlessEqual(None, localPeer.collectDir)
+ def testConstructor_010(self):
+ """
+ Test assignment of ignoreFailureMode attribute, valid values.
+ """
+ localPeer = LocalPeer()
+ self.failUnlessEqual(None, localPeer.ignoreFailureMode)
+ localPeer.ignoreFailureMode = "none"
+ self.failUnlessEqual("none", localPeer.ignoreFailureMode)
+ localPeer.ignoreFailureMode = "all"
+ self.failUnlessEqual("all", localPeer.ignoreFailureMode)
+ localPeer.ignoreFailureMode = "daily"
+ self.failUnlessEqual("daily", localPeer.ignoreFailureMode)
+ localPeer.ignoreFailureMode = "weekly"
+ self.failUnlessEqual("weekly", localPeer.ignoreFailureMode)
+ def testConstructor_011(self):
+ """
+ Test assignment of ignoreFailureMode attribute, invalid value.
+ """
+ localPeer = LocalPeer()
+ self.failUnlessEqual(None, localPeer.ignoreFailureMode)
+ self.failUnlessAssignRaises(ValueError, localPeer, "ignoreFailureMode", "bogus")
+
+ def testConstructor_012(self):
+ """
+ Test assignment of ignoreFailureMode attribute, None value.
+ """
+ localPeer = LocalPeer()
+ self.failUnlessEqual(None, localPeer.ignoreFailureMode)
+ localPeer.ignoreFailureMode = None;
+ self.failUnlessEqual(None, localPeer.ignoreFailureMode)
+
+
############################
# Test comparison operators
############################
@@ -3607,8 +3641,8 @@
"""
Test comparison of two identical objects, all attributes non-None.
"""
- localPeer1 = LocalPeer("myname", "/etc/stuff")
- localPeer2 = LocalPeer("myname", "/etc/stuff")
+ localPeer1 = LocalPeer("myname", "/etc/stuff", "all")
+ localPeer2 = LocalPeer("myname", "/etc/stuff", "all")
self.failUnless(localPeer1 == localPeer2)
self.failUnless(not localPeer1 < localPeer2)
self.failUnless(localPeer1 <= localPeer2)
@@ -3634,8 +3668,8 @@
"""
Test comparison of two differing objects, name differs.
"""
- localPeer1 = LocalPeer("name", "/etc/stuff")
- localPeer2 = LocalPeer("name", "/etc/whatever")
+ localPeer1 = LocalPeer("name", "/etc/stuff", "all")
+ localPeer2 = LocalPeer("name", "/etc/whatever", "all")
self.failIfEqual(localPeer1, localPeer2)
self.failUnless(not localPeer1 == localPeer2)
self.failUnless(localPeer1 < localPeer2)
@@ -3662,8 +3696,8 @@
"""
Test comparison of two differing objects, collectDir differs.
"""
- localPeer1 = LocalPeer("name2", "/etc/stuff")
- localPeer2 = LocalPeer("name1", "/etc/stuff")
+ localPeer1 = LocalPeer("name2", "/etc/stuff", "all")
+ localPeer2 = LocalPeer("name1", "/etc/stuff", "all")
self.failIfEqual(localPeer1, localPeer2)
self.failUnless(not localPeer1 == localPeer2)
self.failUnless(not localPeer1 < localPeer2)
@@ -3672,7 +3706,35 @@
self.failUnless(localPeer1 >= localPeer2)
self.failUnless(localPeer1 != localPeer2)
+ def testComparison_008(self):
+ """
+ Test comparison of two differing objects, ignoreFailureMode differs (one None).
+ """
+ localPeer1 = LocalPeer()
+ localPeer2 = LocalPeer(ignoreFailureMode="all")
+ self.failIfEqual(localPeer1, localPeer2)
+ self.failUnless(not localPeer1 == localPeer2)
+ self.failUnless(localPeer1 < localPeer2)
+ self.failUnless(localPeer1 <= localPeer2)
+ self.failUnless(not localPeer1 > localPeer2)
+ self.failUnless(not localPeer1 >= localPeer2)
+ self.failUnless(localPeer1 != localPeer2)
+ def testComparison_009(self):
+ """
+ Test comparison of two differing objects, collectDir differs.
+ """
+ localPeer1 = LocalPeer("name1", "/etc/stuff", "none")
+ localPeer2 = LocalPeer("name1", "/etc/stuff", "all")
+ self.failIfEqual(localPeer1, localPeer2)
+ self.failUnless(not localPeer1 == localPeer2)
+ self.failUnless(not localPeer1 < localPeer2)
+ self.failUnless(not localPeer1 <= localPeer2)
+ self.failUnless(localPeer1 > localPeer2)
+ self.failUnless(localPeer1 >= localPeer2)
+ self.failUnless(localPeer1 != localPeer2)
+
+
#######################
# TestRemotePeer class
#######################
@@ -3720,12 +3782,13 @@
self.failUnlessEqual(None, remotePeer.cbackCommand)
self.failUnlessEqual(False, remotePeer.managed)
self.failUnlessEqual(None, remotePeer.managedActions)
+ self.failUnlessEqual(None, remotePeer.ignoreFailureMode)
def testConstructor_002(self):
"""
Test constructor with all values filled in, with valid values.
"""
- remotePeer = RemotePeer("myname", "/stuff", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer = RemotePeer("myname", "/stuff", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failUnlessEqual("myname", remotePeer.name)
self.failUnlessEqual("/stuff", remotePeer.collectDir)
self.failUnlessEqual("backup", remotePeer.remoteUser)
@@ -3734,6 +3797,7 @@
self.failUnlessEqual("cback", remotePeer.cbackCommand)
self.failUnlessEqual(True, remotePeer.managed)
self.failUnlessEqual(["collect", ], remotePeer.managedActions)
+ self.failUnlessEqual("all", remotePeer.ignoreFailureMode)
def testConstructor_003(self):
"""
@@ -3977,7 +4041,39 @@
self.failUnlessEqual(None, remotePeer.managedActions)
self.failUnlessAssignRaises(ValueError, remotePeer, "managedActions", ["ken", "dash-word", ])
+ def testConstructor_029(self):
+ """
+ Test assignment of ignoreFailureMode attribute, valid values.
+ """
+ remotePeer = RemotePeer()
+ self.failUnlessEqual(None, remotePeer.ignoreFailureMode)
+ remotePeer.ignoreFailureMode = "none"
+ self.failUnlessEqual("none", remotePeer.ignoreFailureMode)
+ remotePeer.ignoreFailureMode = "all"
+ self.failUnlessEqual("all", remotePeer.ignoreFailureMode)
+ remotePeer.ignoreFailureMode = "daily"
+ self.failUnlessEqual("daily", remotePeer.ignoreFailureMode)
+ remotePeer.ignoreFailureMode = "weekly"
+ self.failUnlessEqual("weekly", remotePeer.ignoreFailureMode)
+ def testConstructor_030(self):
+ """
+ Test assignment of ignoreFailureMode attribute, invalid value.
+ """
+ remotePeer = RemotePeer()
+ self.failUnlessEqual(None, remotePeer.ignoreFailureMode)
+ self.failUnlessAssignRaises(ValueError, remotePeer, "ignoreFailureMode", "bogus")
+
+ def testConstructor_031(self):
+ """
+ Test assignment of ignoreFailureMode attribute, None value.
+ """
+ remotePeer = RemotePeer()
+ self.failUnlessEqual(None, remotePeer.ignoreFailureMode)
+ remotePeer.ignoreFailureMode = None;
+ self.failUnlessEqual(None, remotePeer.ignoreFailureMode)
+
+
############################
# Test comparison operators
############################
@@ -4000,8 +4096,8 @@
"""
Test comparison of two identical objects, all attributes non-None.
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failUnless(remotePeer1 == remotePeer2)
self.failUnless(not remotePeer1 < remotePeer2)
self.failUnless(remotePeer1 <= remotePeer2)
@@ -4027,8 +4123,8 @@
"""
Test comparison of two differing objects, name differs.
"""
- remotePeer1 = RemotePeer("name1", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
- remotePeer2 = RemotePeer("name2", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name1", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name2", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(remotePeer1 < remotePeer2)
@@ -4055,8 +4151,8 @@
"""
Test comparison of two differing objects, collectDir differs.
"""
- remotePeer1 = RemotePeer("name", "/etc", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(remotePeer1 < remotePeer2)
@@ -4083,8 +4179,8 @@
"""
Test comparison of two differing objects, remoteUser differs.
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "spot", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "spot", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(not remotePeer1 < remotePeer2)
@@ -4111,8 +4207,8 @@
"""
Test comparison of two differing objects, rcpCommand differs.
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -2 -B", "ssh", "cback", True, [ "collect", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -2 -B", "ssh", "cback", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(not remotePeer1 < remotePeer2)
@@ -4139,8 +4235,8 @@
"""
Test comparison of two differing objects, rshCommand differs.
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh2", "cback", True, [ "collect", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh1", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh2", "cback", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh1", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(not remotePeer1 < remotePeer2)
@@ -4167,8 +4263,8 @@
"""
Test comparison of two differing objects, cbackCommand differs.
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback2", True, [ "collect", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback1", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback2", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback1", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(not remotePeer1 < remotePeer2)
@@ -4195,8 +4291,8 @@
"""
Test comparison of two differing objects, managed differs.
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", False, [ "collect", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", False, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(remotePeer1 < remotePeer2)
@@ -4210,8 +4306,8 @@
Test comparison of two differing objects, managedActions differs (one
None, one empty).
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, None)
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, None, "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(remotePeer1 < remotePeer2)
@@ -4225,8 +4321,8 @@
Test comparison of two differing objects, managedActions differs (one
None, one not empty).
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, None)
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, None, "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(remotePeer1 < remotePeer2)
@@ -4240,8 +4336,8 @@
Test comparison of two differing objects, managedActions differs (one
empty, one not empty).
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [] )
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [], "all" )
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(remotePeer1 < remotePeer2)
@@ -4255,8 +4351,8 @@
Test comparison of two differing objects, managedActions differs (both
not empty).
"""
- remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "purge", ])
- remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ])
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "purge", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
self.failIfEqual(remotePeer1, remotePeer2)
self.failUnless(not remotePeer1 == remotePeer2)
self.failUnless(not remotePeer1 < remotePeer2)
@@ -4265,7 +4361,35 @@
self.failUnless(remotePeer1 >= remotePeer2)
self.failUnless(remotePeer1 != remotePeer2)
+ def testComparison_021(self):
+ """
+ Test comparison of two differing objects, ignoreFailureMode differs (one None).
+ """
+ remotePeer1 = RemotePeer()
+ remotePeer2 = RemotePeer(ignoreFailureMode="all")
+ self.failIfEqual(remotePeer1, remotePeer2)
+ self.failUnless(not remotePeer1 == remotePeer2)
+ self.failUnless(remotePeer1 < remotePeer2)
+ self.failUnless(remotePeer1 <= remotePeer2)
+ self.failUnless(not remotePeer1 > remotePeer2)
+ self.failUnless(not remotePeer1 >= remotePeer2)
+ self.failUnless(remotePeer1 != remotePeer2)
+ def testComparison_022(self):
+ """
+ Test comparison of two differing objects, ignoreFailureMode differs.
+ """
+ remotePeer1 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "all")
+ remotePeer2 = RemotePeer("name", "/etc/stuff/tmp/X11", "backup", "scp -1 -B", "ssh", "cback", True, [ "collect", ], "none")
+ self.failIfEqual(remotePeer1, remotePeer2)
+ self.failUnless(not remotePeer1 == remotePeer2)
+ self.failUnless(remotePeer1 < remotePeer2)
+ self.failUnless(remotePeer1 <= remotePeer2)
+ self.failUnless(not remotePeer1 > remotePeer2)
+ self.failUnless(not remotePeer1 >= remotePeer2)
+ self.failUnless(remotePeer1 != remotePeer2)
+
+
############################
# TestReferenceConfig class
############################
@@ -11120,7 +11244,7 @@
expected.stage.remotePeers = []
expected.stage.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.stage.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.stage.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
self.failUnlessEqual(expected, config)
@@ -11268,7 +11392,7 @@
expected.stage.remotePeers = []
expected.stage.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.stage.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.stage.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
expected.store = StoreConfig()
expected.store.sourceDir = "/opt/backup/staging"
@@ -11336,7 +11460,7 @@
expected.stage.remotePeers = []
expected.stage.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.stage.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.stage.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
expected.store = StoreConfig()
expected.store.sourceDir = "/opt/backup/staging"
@@ -11401,7 +11525,7 @@
expected.stage.remotePeers = []
expected.stage.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.stage.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.stage.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
expected.store = StoreConfig()
expected.store.sourceDir = "/opt/backup/staging"
@@ -11469,7 +11593,7 @@
expected.stage.remotePeers = []
expected.stage.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.stage.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.stage.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.stage.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
expected.store = StoreConfig()
expected.store.sourceDir = "/opt/backup/staging"
@@ -11597,7 +11721,7 @@
expected.peers.remotePeers = []
expected.peers.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.peers.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.peers.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.peers.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.peers.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
expected.peers.remotePeers.append(RemotePeer("machine4", "/aa", remoteUser="someone", rcpCommand="scp -B", rshCommand="ssh", cbackCommand="cback", managed=True, managedActions=None))
expected.peers.remotePeers.append(RemotePeer("machine5", "/bb", managed=False, managedActions=["collect", "purge",]))
@@ -11669,7 +11793,7 @@
expected.peers.remotePeers = []
expected.peers.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.peers.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.peers.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.peers.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.peers.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
expected.peers.remotePeers.append(RemotePeer("machine4", "/aa", remoteUser="someone", rcpCommand="scp -B", rshCommand="ssh", cbackCommand="cback", managed=True, managedActions=None))
expected.peers.remotePeers.append(RemotePeer("machine5", "/bb", managed=False, managedActions=["collect", "purge",]))
@@ -11750,7 +11874,7 @@
expected.peers.remotePeers = []
expected.peers.localPeers.append(LocalPeer("machine1-1", "/opt/backup/collect"))
expected.peers.localPeers.append(LocalPeer("machine1-2", "/var/backup"))
- expected.peers.remotePeers.append(RemotePeer("machine2", "/backup/collect"))
+ expected.peers.remotePeers.append(RemotePeer("machine2", "/backup/collect", ignoreFailureMode="all"))
expected.peers.remotePeers.append(RemotePeer("machine3", "/home/whatever/tmp", remoteUser="someone", rcpCommand="scp -B"))
expected.peers.remotePeers.append(RemotePeer("machine4", "/aa", remoteUser="someone", rcpCommand="scp -B", rshCommand="ssh", cbackCommand="cback", managed=True, managedActions=None))
expected.peers.remotePeers.append(RemotePeer("machine5", "/bb", managed=False, managedActions=["collect", "purge",]))
Modified: cedar-backup2/trunk/test/data/cback.conf.10
===================================================================
--- cedar-backup2/trunk/test/data/cback.conf.10 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/test/data/cback.conf.10 2008-10-06 02:11:17 UTC (rev 923)
@@ -17,6 +17,7 @@
<name>machine2</name>
<type>remote</type>
<collect_dir>/backup/collect</collect_dir>
+ <ignore_failures>all</ignore_failures>
</peer>
<peer>
<name>machine3</name>
Modified: cedar-backup2/trunk/test/data/cback.conf.15
===================================================================
--- cedar-backup2/trunk/test/data/cback.conf.15 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/test/data/cback.conf.15 2008-10-06 02:11:17 UTC (rev 923)
@@ -125,6 +125,7 @@
<name>machine2</name>
<type>remote</type>
<collect_dir>/backup/collect</collect_dir>
+ <ignore_failures>all</ignore_failures>
</peer>
<peer>
<name>machine3</name>
Modified: cedar-backup2/trunk/test/data/cback.conf.20
===================================================================
--- cedar-backup2/trunk/test/data/cback.conf.20 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/test/data/cback.conf.20 2008-10-06 02:11:17 UTC (rev 923)
@@ -128,6 +128,7 @@
<name>machine2</name>
<type>remote</type>
<collect_dir>/backup/collect</collect_dir>
+ <ignore_failures>all</ignore_failures>
</peer>
<peer>
<name>machine3</name>
Modified: cedar-backup2/trunk/test/data/cback.conf.21
===================================================================
--- cedar-backup2/trunk/test/data/cback.conf.21 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/test/data/cback.conf.21 2008-10-06 02:11:17 UTC (rev 923)
@@ -70,6 +70,7 @@
<name>machine2</name>
<type>remote</type>
<collect_dir>/backup/collect</collect_dir>
+ <ignore_failures>all</ignore_failures>
</peer>
<peer>
<name>machine3</name>
Modified: cedar-backup2/trunk/test/data/cback.conf.23
===================================================================
--- cedar-backup2/trunk/test/data/cback.conf.23 2008-05-06 15:32:44 UTC (rev 922)
+++ cedar-backup2/trunk/test/data/cback.conf.23 2008-10-06 02:11:17 UTC (rev 923)
@@ -16,6 +16,7 @@
<name>machine2</name>
<type>remote</type>
<collect_dir>/backup/collect</collect_dir>
+ <ignore_failures>all</ignore_failures>
</peer>
<peer>
<name>machine3</name>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|