BIND 10 trac1443, updated. d98c6ee0863c784e79204242a3d868d4aedc3d5a [1443] append .X if backup config file exists

BIND 10 source code commits bind10-changes at lists.isc.org
Mon Mar 26 10:01:21 UTC 2012


The branch, trac1443 has been updated
       via  d98c6ee0863c784e79204242a3d868d4aedc3d5a (commit)
      from  04e0ef7fe56b4c9c65b71bba010147af4506675d (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit d98c6ee0863c784e79204242a3d868d4aedc3d5a
Author: Jelte Jansen <jelte at isc.org>
Date:   Mon Mar 26 12:00:37 2012 +0200

    [1443] append .X if backup config file exists
    
    where X is 1, and increases until a nonexistant file is found

-----------------------------------------------------------------------

Summary of changes:
 src/lib/python/isc/config/cfgmgr.py            |    5 ++
 src/lib/python/isc/config/tests/cfgmgr_test.py |   58 +++++++++++++++---------
 2 files changed, 42 insertions(+), 21 deletions(-)

-----------------------------------------------------------------------
diff --git a/src/lib/python/isc/config/cfgmgr.py b/src/lib/python/isc/config/cfgmgr.py
index df7d30a..9bb7544 100644
--- a/src/lib/python/isc/config/cfgmgr.py
+++ b/src/lib/python/isc/config/cfgmgr.py
@@ -159,6 +159,11 @@ class ConfigManagerData:
             old_file_name = self.db_filename
         if new_file_name is None:
             new_file_name = old_file_name + ".bak"
+        if os.path.exists(new_file_name):
+            i = 1
+            while os.path.exists(new_file_name + "." + str(i)):
+                i += 1
+            new_file_name = new_file_name + "." + str(i)
         if os.path.exists(old_file_name):
             logger.info(CFGMGR_RENAMED_CONFIG_FILE, old_file_name, new_file_name)
             os.rename(old_file_name, new_file_name)
diff --git a/src/lib/python/isc/config/tests/cfgmgr_test.py b/src/lib/python/isc/config/tests/cfgmgr_test.py
index 4385543..bda2ffd 100644
--- a/src/lib/python/isc/config/tests/cfgmgr_test.py
+++ b/src/lib/python/isc/config/tests/cfgmgr_test.py
@@ -74,36 +74,52 @@ class TestConfigManagerData(unittest.TestCase):
         self.assertEqual(self.config_manager_data, new_config)
         os.remove(output_file_name)
 
+    def check_existance(self, files, should_exist=[], should_not_exist=[]):
+        for n in should_exist:
+            self.assertTrue(os.path.exists(files[n]))
+        for n in should_not_exist:
+            self.assertFalse(os.path.exists(files[n]))
+
     def test_rename_config_file(self):
-        output_file_name = "b10-config-rename-test"
-        renamed_file_name = "b10-config-rename-test.bak"
-        if os.path.exists(output_file_name):
-            os.remove(output_file_name)
-        if os.path.exists(renamed_file_name):
-            os.remove(renamed_file_name)
+        # test file names, put in array for easy cleanup
+        filenames = [ "b10-config-rename-test",
+                      "b10-config-rename-test.bak",
+                      "b10-config-rename-test.bak.1",
+                      "b10-config-rename-test.bak.2" ]
+
+        for filename in filenames:
+            if os.path.exists(filename):
+                os.remove(filename)
 
         # The original does not exist, so the new one should not be created
-        self.config_manager_data.rename_config_file(output_file_name)
-        self.assertFalse(os.path.exists(output_file_name))
-        self.assertFalse(os.path.exists(renamed_file_name))
+        self.config_manager_data.rename_config_file(filenames[0])
+        self.check_existance(filenames, [], [0, 1, 2, 3])
 
         # now create a file to rename, and call rename again
-        self.config_manager_data.write_to_file(output_file_name)
-        self.config_manager_data.rename_config_file(output_file_name)
-        self.assertFalse(os.path.exists(output_file_name))
-        self.assertTrue(os.path.exists(renamed_file_name))
+        self.config_manager_data.write_to_file(filenames[0])
+        self.config_manager_data.rename_config_file(filenames[0])
+        self.check_existance(filenames, [1], [0, 2, 3])
+
+        # If backup already exists, give it a new name automatically
+        self.config_manager_data.write_to_file(filenames[0])
+        self.config_manager_data.rename_config_file(filenames[0])
+        self.check_existance(filenames, [1, 2], [0, 3])
+
+        # If backup already exists, give it a new name automatically with
+        # increasing postfix
+        self.config_manager_data.write_to_file(filenames[0])
+        self.config_manager_data.rename_config_file(filenames[0])
+        self.check_existance(filenames, [1, 2, 3], [0])
 
         # Test with explicit renamed file argument
-        self.config_manager_data.rename_config_file(renamed_file_name,
-                                                    output_file_name)
-        self.assertTrue(os.path.exists(output_file_name))
-        self.assertFalse(os.path.exists(renamed_file_name))
+        self.config_manager_data.rename_config_file(filenames[1],
+                                                    filenames[0])
+        self.check_existance(filenames, [0, 2, 3], [1])
 
         # clean up again to be nice
-        if os.path.exists(output_file_name):
-            os.remove(output_file_name)
-        if os.path.exists(renamed_file_name):
-            os.remove(renamed_file_name)
+        for filename in filenames:
+            if os.path.exists(filename):
+                os.remove(filename)
 
     def test_equality(self):
         # tests the __eq__ function. Equality is only defined



More information about the bind10-changes mailing list