From: Jelte Jansen Date: Mon, 26 Mar 2012 10:00:37 +0000 (+0200) Subject: [1443] append .X if backup config file exists X-Git-Tag: trac2351_base~226^2~116^2~95^2~7 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d98c6ee0863c784e79204242a3d868d4aedc3d5a;p=thirdparty%2Fkea.git [1443] append .X if backup config file exists where X is 1, and increases until a nonexistant file is found --- diff --git a/src/lib/python/isc/config/cfgmgr.py b/src/lib/python/isc/config/cfgmgr.py index df7d30a753..9bb7544039 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 4385543e2a..bda2ffd119 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