Changeset 40962
- Timestamp:
- Oct 22, 2019, 2:30:49 PM (7 years ago)
- Location:
- branches/ipp-259_genericise_backups/tools/backups
- Files:
-
- 22 edited
-
backup.py (modified) (5 diffs)
-
backup_test.py (modified) (2 diffs)
-
confluence_backup.py (modified) (3 diffs)
-
confluence_backup_test.py (modified) (7 diffs)
-
ippops_homedir_backup.py (modified) (2 diffs)
-
ippops_homedir_backup_test.py (modified) (2 diffs)
-
jira_backup.py (modified) (2 diffs)
-
jira_backup_test.py (modified) (3 diffs)
-
mailman_backup.py (modified) (2 diffs)
-
mailman_backup_test.py (modified) (3 diffs)
-
svn_backup.py (modified) (4 diffs)
-
svn_backup_test.py (modified) (5 diffs)
-
testing/confluence_test.config (modified) (1 diff)
-
testing/svn_test.config (modified) (1 diff)
-
utils/config_parse_helper.py (modified) (3 diffs)
-
utils/config_parse_helper_test.py (modified) (1 diff)
-
utils/generic_utils.py (modified) (2 diffs)
-
utils/generic_utils_test.py (modified) (10 diffs)
-
utils/subprocess_utils.py (modified) (1 diff)
-
utils/subprocess_utils_test.py (modified) (1 diff)
-
website_backup.py (modified) (2 diffs)
-
website_backup_test.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/ipp-259_genericise_backups/tools/backups/backup.py
r40952 r40962 7 7 from configparser import ConfigParser 8 8 9 import backups.utils.config_parse_helper as cfg_help 10 import backups.utils.errors as errs 11 import backups.utils.subprocess_utils as sub_utils 12 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine, ParsedConfig 9 import utils.errors as errs 10 import utils.subprocess_utils as sub_utils 11 from utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine, ParsedConfig, SpecialSchemaProcessing 13 12 14 13 DEFAULT_SCHEMA_SECTION = ConfigSchemaSection('DEFAULT', 15 [ ConfigSchemaLine('backup_paths', True, list, cfg_help.SpecialSchemaProcessing.commma_separated)14 [ ConfigSchemaLine('backup_paths', True, list, SpecialSchemaProcessing.commma_separated) 16 15 , ConfigSchemaLine('source_machine', True, str) 17 16 , ConfigSchemaLine('verbose', False, bool) … … 20 19 ) 21 20 COPY_SCHEMA_SECTION = ConfigSchemaSection('COPY', 22 [ ConfigSchemaLine('sources', True, list, cfg_help.SpecialSchemaProcessing.commma_separated)23 , ConfigSchemaLine('additional_args', False, list, cfg_help.SpecialSchemaProcessing.space_separated)21 [ ConfigSchemaLine('sources', True, list, SpecialSchemaProcessing.commma_separated) 22 , ConfigSchemaLine('additional_args', False, list, SpecialSchemaProcessing.space_separated) 24 23 ] 25 24 ) 26 25 TAR_SCHEMA_SECTION = ConfigSchemaSection('TAR', 27 [ ConfigSchemaLine('sources', True, list, cfg_help.SpecialSchemaProcessing.commma_separated)28 , ConfigSchemaLine('additional_args', False, list, cfg_help.SpecialSchemaProcessing.space_separated)26 [ ConfigSchemaLine('sources', True, list, SpecialSchemaProcessing.commma_separated) 27 , ConfigSchemaLine('additional_args', False, list, SpecialSchemaProcessing.space_separated) 29 28 , ConfigSchemaLine('target_filename', True, str) 30 29 , ConfigSchemaLine('prefix_date', True, bool) … … 32 31 ) 33 32 RSYNC_SCHEMA_SECTION = ConfigSchemaSection('RSYNC', 34 [ ConfigSchemaLine('sources', True, list, cfg_help.SpecialSchemaProcessing.commma_separated)35 , ConfigSchemaLine('additional_args', False, list, cfg_help.SpecialSchemaProcessing.space_separated)33 [ ConfigSchemaLine('sources', True, list, SpecialSchemaProcessing.commma_separated) 34 , ConfigSchemaLine('additional_args', False, list, SpecialSchemaProcessing.space_separated) 36 35 ] 37 36 ) … … 41 40 , ConfigSchemaLine('password', True, str) 42 41 , ConfigSchemaLine('db_name', True, str) 43 , ConfigSchemaLine('additional_args', False, list, cfg_help.SpecialSchemaProcessing.space_separated)42 , ConfigSchemaLine('additional_args', False, list, SpecialSchemaProcessing.space_separated) 44 43 , ConfigSchemaLine('target_filename', True, str) 45 44 , ConfigSchemaLine('prefix_date', True, bool) … … 148 147 if not os.path.exists(backup_path): 149 148 os.makedirs(backup_path) 149 sub_utils.chmod_wrapper(['777', backup_path]) 150 150 151 151 def _run_copy(self): -
branches/ipp-259_genericise_backups/tools/backups/backup_test.py
r40951 r40962 1 1 import os 2 2 import pytest 3 import stat 3 4 import socket 4 5 from configparser import ConfigParser 5 6 from pathlib import Path 6 7 7 import backup s.backupas bckup8 import backups.utils.errors as errs9 from backup s.backupimport Backup10 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine8 import backup as bckup 9 import utils.errors as errs 10 from backup import Backup 11 from utils.config_parse_helper import ConfigSchema 11 12 12 13 TEST_DEFAULT_CONFIG_FILE = os.path.join(os.path.dirname(__file__), 'testing/backup_test.config') … … 207 208 assert os.path.exists(bck2_path) 208 209 210 # Check permissions are 777 too 211 new_stats = os.stat(bck2_path) 212 assert bool(new_stats.st_mode & stat.S_IRUSR) is True 213 assert bool(new_stats.st_mode & stat.S_IWUSR) is True 214 assert bool(new_stats.st_mode & stat.S_IXUSR) is True 215 assert bool(new_stats.st_mode & stat.S_IRGRP) is True 216 assert bool(new_stats.st_mode & stat.S_IWGRP) is True 217 assert bool(new_stats.st_mode & stat.S_IXGRP) is True 218 assert bool(new_stats.st_mode & stat.S_IROTH) is True 219 assert bool(new_stats.st_mode & stat.S_IWOTH) is True 220 assert bool(new_stats.st_mode & stat.S_IXOTH) is True 221 209 222 210 223 class TestRunningCopy(): -
branches/ipp-259_genericise_backups/tools/backups/confluence_backup.py
r40951 r40962 1 import argparse2 1 import datetime 3 2 import glob 4 3 import os.path as path 5 4 6 import backups.utils.config_parse_helper as cfg_help7 import backups.utils.errors as errs8 import backups.utils.subprocess_utils as sub_utils9 from backup s.backupimport Backup10 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine5 import utils.config_parse_helper as cfg_help 6 import utils.errors as errs 7 import utils.subprocess_utils as sub_utils 8 from backup import Backup 9 from utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine 11 10 12 11 EXPECTED_CONFIG_FILE = path.join(path.dirname(__file__), './confluence_backup.config') … … 71 70 source = self.copy_dict['sources'][0] 72 71 73 confluence_wildcard_search = f"{source}/ {ConfluenceBackup.get_confluence_backup_date_format()}*"72 confluence_wildcard_search = f"{source}/*{ConfluenceBackup.get_confluence_backup_date_format()}*" 74 73 confluence_xml_filepaths = glob.glob(confluence_wildcard_search) 75 74 if len(confluence_xml_filepaths) == 0: … … 92 91 93 92 94 def main(): 95 cb = ConfluenceBackup() 96 cb.run_backup() 97 98 99 def parse_args(args): 100 101 parser = argparse.ArgumentParser( 102 description='Performs backup of confluence.') 103 104 parser.add_argument('--config_file', 105 nargs='?', 106 help='specify the location of a config that matches the ConfigSchema', 107 default=EXPECTED_CONFIG_FILE) 108 109 return parser.parse_args() 93 def main(config=EXPECTED_CONFIG_FILE, schema=CONFLUENCE_SCHEMA): 94 cb = ConfluenceBackup(config, schema) 95 cb.run_backup_processes() 110 96 111 97 -
branches/ipp-259_genericise_backups/tools/backups/confluence_backup_test.py
r40952 r40962 6 6 from pathlib import Path 7 7 8 import backup s.backupas bckup9 import backups.confluence_backup as jbck_mod10 import backups.utils.errors as errs 11 from backups.confluence_backup import ConfluenceBackup12 from backups.utils.errors import ValidationError13 from backups.utils.config_parse_helper import ConfigSchema8 import backup as bckup 9 import confluence_backup as cbck_mod 10 11 from confluence_backup import ConfluenceBackup 12 from utils.errors import ValidationError 13 from utils.config_parse_helper import ConfigSchema 14 14 15 15 CONF_TEST_CONFIG = os.path.join(os.path.dirname(__file__), './testing/confluence_test.config') … … 67 67 68 68 # Create backup files that will be copied 69 confluence_backup_name = ConfluenceBackup.get_confluence_backup_date_format() + "_confluence_test_file.zip"69 confluence_backup_name = f"confluence-xml-backup-{ConfluenceBackup.get_confluence_backup_date_format()}.zip" 70 70 confluence_backup_filepath = os.path.join(confluence_backup_path, confluence_backup_name) 71 71 Path(confluence_backup_filepath).touch() … … 96 96 } 97 97 assert jb.copy_dict == \ 98 { 'sources' : ['/var/atlassian/application-data/confluence/ export']98 { 'sources' : ['/var/atlassian/application-data/confluence/backups'] 99 99 , 'additional_args' : ['-v'] 100 100 } 101 101 assert jb.tar_dict == \ 102 { 'sources' : ['/var/atlassian/application-data/confluence/ data']102 { 'sources' : ['/var/atlassian/application-data/confluence/attachments'] 103 103 , 'additional_args' : ['--verbose', '-z', '-p', '-cf'] 104 104 , 'target_filename' : 'confluence.tar.gz' … … 118 118 119 119 def test_default_config_fails_to_load_if_the_file_does_not_exist(self): 120 default_config = jbck_mod.EXPECTED_CONFIG_FILE120 default_config = cbck_mod.EXPECTED_CONFIG_FILE 121 121 assert not os.path.exists(default_config) 122 122 123 with pytest.raises( errs.ValidationError) as e:123 with pytest.raises(ValidationError) as e: 124 124 ConfluenceBackup() 125 125 assert "ValidationError: Config filepath does not exist" in str(e) … … 174 174 175 175 def test_nonexistant_config_file_raises_error(self): 176 with pytest.raises( errs.ValidationError) as e:176 with pytest.raises(ValidationError) as e: 177 177 ConfluenceBackup("not a real file path") 178 178 assert "ValidationError: Config filepath does not exist" in str(e) 179 179 180 180 def test_main_loads_default_and_fails_due_to_missing_paths(self): 181 with pytest.raises( errs.ValidationError) as e:182 jbck_mod.main()181 with pytest.raises(ValidationError) as e: 182 cbck_mod.main() 183 183 assert "ValidationError: Config filepath does not exist" in str(e) 184 184 185 185 186 class TestFullRunFromMain(object): 187 188 def test_main_loads_and_runs_fine_when_given_config(self, tmpdir): 189 config = configparser.ConfigParser() 190 bpath1 = os.path.join(tmpdir, "path/1") 191 bpath2 = os.path.join(tmpdir, "path/2") 192 config['DEFAULT'] = \ 193 { 'backup_paths' : f"{bpath1}, {bpath2}" 194 , 'source_machine' : 'rocket' 195 , 'verbose' : 'True' 196 } 197 copy_source = os.path.join(tmpdir, "copy/source") 198 conf_backup_name = ConfluenceBackup.get_confluence_backup_date_format() + "_conf_test_file.zip" 199 config['COPY'] = \ 200 { 'sources' : f'{copy_source}' 201 } 202 tar_source = os.path.join(tmpdir, "tar/source") 203 config['TAR'] = \ 204 { 'sources' : f"{tar_source}" 205 , 'additional_args' : "--verbose -z -p -cf" 206 , 'target_filename' : 'conf.tar.gz' 207 , 'prefix_date' : 'False' 208 } 209 os.makedirs(bpath1) 210 os.makedirs(bpath2) 211 os.makedirs(copy_source) 212 os.makedirs(tar_source) 213 Path(os.path.join(copy_source, conf_backup_name)).touch() 214 215 schema = ConfigSchema(None) 216 schema.add_section(bckup.DEFAULT_SCHEMA_SECTION) 217 schema.add_section(bckup.COPY_SCHEMA_SECTION) 218 schema.add_section(bckup.TAR_SCHEMA_SECTION) 219 220 cbck_mod.main(config, schema) 221 assert True is True 222 223 186 224 class TestCopyingBackups(object): 187 225 … … 189 227 190 228 def test_get_confluence_backup_date_format(self): 191 jb = ConfluenceBackup(config_file=CONF_TEST_CONFIG)229 cb = ConfluenceBackup(config_file=CONF_TEST_CONFIG) 192 230 today = datetime.date.today() 193 231 expected_format = today.strftime("%Y_%m_%d") 194 assert jb.get_confluence_backup_date_format() == expected_format232 assert cb.get_confluence_backup_date_format() == expected_format 195 233 196 234 another_date = datetime.date(1988, 11, 23) 197 235 expected_format = another_date.strftime("%Y_%m_%d") 198 assert jb.get_confluence_backup_date_format(another_date) == expected_format236 assert cb.get_confluence_backup_date_format(another_date) == expected_format 199 237 200 238 def test_copying_fails_if_paths_not_present(self): 201 jb = ConfluenceBackup(config_file=CONF_TEST_CONFIG)202 # return_value = jb._copy_confluence_backup()203 with pytest.raises(ValidationError) as e: 204 jb._run_copy()239 cb = ConfluenceBackup(config_file=CONF_TEST_CONFIG) 240 # return_value = cb._copy_confluence_backup() 241 with pytest.raises(ValidationError) as e: 242 cb._run_copy() 205 243 assert "ValidationError: target path does not exist:" in str(e) 206 244 … … 208 246 create_items_for_full_confluence_backup_test(tmpdir) 209 247 config = make_config(tmpdir) 210 jb = ConfluenceBackup(config_file=config)248 cb = ConfluenceBackup(config_file=config) 211 249 212 250 today = ConfluenceBackup.get_confluence_backup_date_format() 213 expected_host_backup_copy = os.path.join(tmpdir, "host_backup_path", f" {today}_confluence_test_file.zip" )214 expected_backup_1_copy = os.path.join(tmpdir, "backup_1_path", f" {today}_confluence_test_file.zip" )215 expected_backup_2_copy = os.path.join(tmpdir, "backup_2_path", f" {today}_confluence_test_file.zip" )251 expected_host_backup_copy = os.path.join(tmpdir, "host_backup_path", f"confluence-xml-backup-{today}.zip" ) 252 expected_backup_1_copy = os.path.join(tmpdir, "backup_1_path", f"confluence-xml-backup-{today}.zip" ) 253 expected_backup_2_copy = os.path.join(tmpdir, "backup_2_path", f"confluence-xml-backup-{today}.zip" ) 216 254 assert not os.path.exists(expected_host_backup_copy) 217 255 assert not os.path.exists(expected_backup_1_copy) 218 256 assert not os.path.exists(expected_backup_2_copy) 219 257 220 return_value = jb._run_copy()258 return_value = cb._run_copy() 221 259 assert return_value == 0 222 260 -
branches/ipp-259_genericise_backups/tools/backups/ippops_homedir_backup.py
r40958 r40962 1 import argparse2 1 import os.path as path 3 2 4 import backups.utils.config_parse_helper as cfg_help5 from backup s.backupimport Backup6 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine3 import utils.config_parse_helper as cfg_help 4 from backup import Backup 5 from utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine 7 6 8 7 EXPECTED_CONFIG_FILE = path.join(path.dirname(__file__), './ippops_homedir_backup.config') … … 32 31 33 32 34 def main(): 35 ohdb = IPPOpsHomedirBackup() 36 ohdb.run_backup() 37 38 39 def parse_args(args): 40 41 parser = argparse.ArgumentParser( 42 description='Performs backup of the ippops homedirs.') 43 44 parser.add_argument('--config_file', 45 nargs='?', 46 help='specify the location of a config that matches the ConfigSchema', 47 default=EXPECTED_CONFIG_FILE) 48 49 return parser.parse_args() 33 def main(config=EXPECTED_CONFIG_FILE, schema=IPPOPS_HOMEDIR_SCHEMA): 34 ohdb = IPPOpsHomedirBackup(config, schema) 35 ohdb.run_backup_processes() 50 36 51 37 -
branches/ipp-259_genericise_backups/tools/backups/ippops_homedir_backup_test.py
r40958 r40962 3 3 from pathlib import Path 4 4 5 import backups.backup as bckup 6 from backups.ippops_homedir_backup import IPPOpsHomedirBackup 7 from backups.utils.config_parse_helper import ConfigSchema 5 import backup as bckup 6 import ippops_homedir_backup as ihbck_mod 7 from ippops_homedir_backup import IPPOpsHomedirBackup 8 from utils.config_parse_helper import ConfigSchema 8 9 9 10 IPPOPS_HOMEDIR_TEST_CONFIG = os.path.join(os.path.dirname(__file__), … … 31 32 ihb = IPPOpsHomedirBackup(config_file=IPPOPS_HOMEDIR_TEST_CONFIG) 32 33 self.assert_defaults(ihb) 34 35 36 class TestFullRunFromMain(object): 37 38 def test_main_loads_and_runs_fine_when_given_config(self, tmpdir): 39 config = configparser.ConfigParser() 40 bpath1 = os.path.join(tmpdir, "path/1") 41 bpath2 = os.path.join(tmpdir, "path/2") 42 config['DEFAULT'] = \ 43 { 'backup_paths' : f"{bpath1}, {bpath2}" 44 , 'source_machine' : 'rocket' 45 , 'verbose' : 'True' 46 } 47 tar_source = os.path.join(tmpdir, "tar/source") 48 config['TAR'] = \ 49 { 'sources' : f"{tar_source}" 50 , 'additional_args' : "--verbose -z -p -cf" 51 , 'target_filename' : 'svnroot.tar.gz' 52 , 'prefix_date' : 'False' 53 } 54 os.makedirs(bpath1) 55 os.makedirs(bpath2) 56 os.makedirs(tar_source) 57 58 schema = ConfigSchema(None) 59 schema.add_section(bckup.DEFAULT_SCHEMA_SECTION) 60 schema.add_section(bckup.TAR_SCHEMA_SECTION) 61 62 ihbck_mod.main(config, schema) 63 assert True is True 33 64 34 65 -
branches/ipp-259_genericise_backups/tools/backups/jira_backup.py
r40950 r40962 1 import argparse2 1 import datetime 3 2 import glob 4 3 import os.path as path 5 4 6 import backups.utils.config_parse_helper as cfg_help7 import backups.utils.errors as errs8 import backups.utils.subprocess_utils as sub_utils9 from backup s.backupimport Backup10 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine5 import utils.config_parse_helper as cfg_help 6 import utils.errors as errs 7 import utils.subprocess_utils as sub_utils 8 from backup import Backup 9 from utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine 11 10 12 11 EXPECTED_CONFIG_FILE = path.join(path.dirname(__file__), './jira_backup.config') … … 92 91 93 92 94 def main(): 95 jb = JiraBackup() 96 jb.run_backup() 97 98 99 def parse_args(args): 100 101 parser = argparse.ArgumentParser( 102 description='Performs backup of jira.') 103 104 parser.add_argument('--config_file', 105 nargs='?', 106 help='specify the location of a config that matches the ConfigSchema', 107 default=EXPECTED_CONFIG_FILE) 108 109 return parser.parse_args() 93 def main(config=EXPECTED_CONFIG_FILE, schema=JIRA_SCHEMA): 94 jb = JiraBackup(config, schema) 95 jb.run_backup_processes() 110 96 111 97 -
branches/ipp-259_genericise_backups/tools/backups/jira_backup_test.py
r40952 r40962 7 7 8 8 import backups.backup as bckup 9 import backups.jira_backup as jbck_mod 10 import backups.utils.errors as errs 11 from backups.jira_backup import JiraBackup 12 from backups.utils.errors import ValidationError 13 from backups.utils.config_parse_helper import ConfigSchema 9 import jira_backup as jbck_mod 10 from jira_backup import JiraBackup 11 from utils.errors import ValidationError 12 from utils.config_parse_helper import ConfigSchema 14 13 15 14 JIRA_TEST_CONFIG = os.path.join(os.path.dirname(__file__), './testing/jira_test.config') … … 121 120 assert not os.path.exists(default_config) 122 121 123 with pytest.raises( errs.ValidationError) as e:122 with pytest.raises(ValidationError) as e: 124 123 JiraBackup() 125 124 assert "ValidationError: Config filepath does not exist" in str(e) … … 174 173 175 174 def test_nonexistant_config_file_raises_error(self): 176 with pytest.raises( errs.ValidationError) as e:175 with pytest.raises(ValidationError) as e: 177 176 JiraBackup("not a real file path") 178 177 assert "ValidationError: Config filepath does not exist" in str(e) 179 178 180 179 def test_main_loads_default_and_fails_due_to_missing_paths(self): 181 with pytest.raises( errs.ValidationError) as e:180 with pytest.raises(ValidationError) as e: 182 181 jbck_mod.main() 183 182 assert "ValidationError: Config filepath does not exist" in str(e) 183 184 185 class TestFullRunFromMain(object): 186 187 def test_main_loads_and_runs_fine_when_given_config(self, tmpdir): 188 config = configparser.ConfigParser() 189 config.add_section("atlassian_backups") 190 bpath1 = os.path.join(tmpdir, "path/1") 191 bpath2 = os.path.join(tmpdir, "path/2") 192 config['DEFAULT'] = \ 193 { 'backup_paths' : f"{bpath1}, {bpath2}" 194 , 'source_machine' : 'rocket' 195 , 'verbose' : 'True' 196 } 197 copy_source = os.path.join(tmpdir, "copy/source") 198 jira_backup_name = JiraBackup.get_jira_backup_date_format() + "_jira_test_file.zip" 199 config['COPY'] = \ 200 { 'sources' : f'{copy_source}' 201 } 202 tar_source = os.path.join(tmpdir, "tar/source") 203 config['TAR'] = \ 204 { 'sources' : f"{tar_source}" 205 , 'additional_args' : "--verbose -z -p -cf" 206 , 'target_filename' : 'jira.tar.gz' 207 , 'prefix_date' : 'False' 208 } 209 os.makedirs(bpath1) 210 os.makedirs(bpath2) 211 os.makedirs(copy_source) 212 os.makedirs(tar_source) 213 Path(os.path.join(copy_source, jira_backup_name)).touch() 214 215 schema = ConfigSchema(None) 216 schema.add_section(bckup.DEFAULT_SCHEMA_SECTION) 217 schema.add_section(bckup.COPY_SCHEMA_SECTION) 218 schema.add_section(bckup.TAR_SCHEMA_SECTION) 219 220 jbck_mod.main(config, schema) 221 assert True is True 184 222 185 223 -
branches/ipp-259_genericise_backups/tools/backups/mailman_backup.py
r40958 r40962 1 import argparse2 1 import os.path as path 3 2 4 import backups.utils.config_parse_helper as cfg_help5 from backup s.backupimport Backup6 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine3 import utils.config_parse_helper as cfg_help 4 from backup import Backup 5 from utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine 7 6 8 7 EXPECTED_CONFIG_FILE = path.join(path.dirname(__file__), './mailman_backup.config') … … 32 31 33 32 34 def main(): 35 mb = MailmanBackup() 36 mb.run_backup() 37 38 39 def parse_args(args): 40 41 parser = argparse.ArgumentParser( 42 description='Performs backup of mailman.') 43 44 parser.add_argument('--config_file', 45 nargs='?', 46 help='specify the location of a config that matches the ConfigSchema', 47 default=EXPECTED_CONFIG_FILE) 48 49 return parser.parse_args() 33 def main(config=EXPECTED_CONFIG_FILE, schema=MAILMAN_SCHEMA): 34 mb = MailmanBackup(config, schema) 35 mb.run_backup_processes() 50 36 51 37 -
branches/ipp-259_genericise_backups/tools/backups/mailman_backup_test.py
r40958 r40962 3 3 from pathlib import Path 4 4 5 import backups.backup as bckup 6 from backups.mailman_backup import MailmanBackup 7 from backups.utils.config_parse_helper import ConfigSchema 5 import mailman_backup as mailbck_mod 6 import backup as bckup 7 from backup import DEFAULT_SCHEMA_SECTION, RSYNC_SCHEMA_SECTION 8 from mailman_backup import MailmanBackup 9 from utils.config_parse_helper import ConfigSchema 10 8 11 9 12 MAILMAN_TEST_CONFIG = os.path.join(os.path.dirname(__file__), … … 31 34 mb = MailmanBackup(config_file=MAILMAN_TEST_CONFIG) 32 35 self.assert_defaults(mb) 36 37 38 class TestFullRunFromMain(object): 39 40 def test_main_loads_and_runs_fine_when_given_config(self, tmpdir): 41 config = configparser.ConfigParser() 42 bpath1 = os.path.join(tmpdir, "path/1") 43 bpath2 = os.path.join(tmpdir, "path/2") 44 config['DEFAULT'] = \ 45 { 'backup_paths' : f"{bpath1}, {bpath2}" 46 , 'source_machine' : 'rocket' 47 , 'verbose' : 'True' 48 } 49 tar_source = os.path.join(tmpdir, "tar/source") 50 config['TAR'] = \ 51 { 'sources' : f"{tar_source}" 52 , 'additional_args' : "--verbose -z -p -cf" 53 , 'target_filename' : 'svnroot.tar.gz' 54 , 'prefix_date' : 'False' 55 } 56 os.makedirs(bpath1) 57 os.makedirs(bpath2) 58 os.makedirs(tar_source) 59 60 schema = ConfigSchema(None) 61 schema.add_section(bckup.DEFAULT_SCHEMA_SECTION) 62 schema.add_section(bckup.TAR_SCHEMA_SECTION) 63 64 mailbck_mod.main(config, schema) 65 assert True is True 33 66 34 67 … … 66 99 # Setup Schema 67 100 schema = ConfigSchema(None) 68 schema.add_section( bckup.DEFAULT_SCHEMA_SECTION)69 schema.add_section( bckup.RSYNC_SCHEMA_SECTION)101 schema.add_section(DEFAULT_SCHEMA_SECTION) 102 schema.add_section(RSYNC_SCHEMA_SECTION) 70 103 71 104 # check that the rsync is successful (with options) -
branches/ipp-259_genericise_backups/tools/backups/svn_backup.py
r40952 r40962 1 import argparse2 1 import os.path as path 3 2 4 import backups.utils.config_parse_helper as cfg_help 5 from backup s.backupimport Backup6 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine3 from utils.config_parse_helper import SpecialSchemaProcessing 4 from backup import Backup 5 from utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine 7 6 8 7 EXPECTED_CONFIG_FILE = path.join(path.dirname(__file__), './svn_backup.config') … … 11 10 [ ConfigSchemaSection('DEFAULT', 12 11 [ ConfigSchemaLine('backup_paths', True, list, 13 cfg_help.SpecialSchemaProcessing.commma_separated)12 SpecialSchemaProcessing.commma_separated) 14 13 , ConfigSchemaLine('source_machine', True, str) 15 14 , ConfigSchemaLine('verbose', False, bool) … … 18 17 , ConfigSchemaSection('COPY', 19 18 [ ConfigSchemaLine('sources', True, list, 20 cfg_help.SpecialSchemaProcessing.commma_separated)19 SpecialSchemaProcessing.commma_separated) 21 20 , ConfigSchemaLine('additional_args', False, list, 22 cfg_help.SpecialSchemaProcessing.space_separated)21 SpecialSchemaProcessing.space_separated) 23 22 ]) 24 23 , ConfigSchemaSection('RSYNC', 25 24 [ ConfigSchemaLine('sources', True, list, 26 cfg_help.SpecialSchemaProcessing.commma_separated)25 SpecialSchemaProcessing.commma_separated) 27 26 , ConfigSchemaLine('additional_args', False, list, 28 cfg_help.SpecialSchemaProcessing.space_separated)27 SpecialSchemaProcessing.space_separated) 29 28 ]) 30 29 ] … … 38 37 39 38 40 def main(): 41 sb = SvnBackup() 42 sb.run_backup() 43 44 45 def parse_args(args): 46 47 parser = argparse.ArgumentParser( 48 description='Performs backup of svn.') 49 50 parser.add_argument('--config_file', 51 nargs='?', 52 help='specify the location of a config that matches the ConfigSchema', 53 default=EXPECTED_CONFIG_FILE) 54 55 return parser.parse_args() 39 def main(config=EXPECTED_CONFIG_FILE, schema=SVN_SCHEMA): 40 sb = SvnBackup(config, schema) 41 sb.run_backup_processes() 56 42 57 43 -
branches/ipp-259_genericise_backups/tools/backups/svn_backup_test.py
r40958 r40962 3 3 from pathlib import Path 4 4 5 import backups.backup as bckup 6 from backups.svn_backup import SvnBackup 7 from backups.utils.config_parse_helper import ConfigSchema 5 import svn_backup as svnbck_mod 6 import backup as bckup 7 from backup import DEFAULT_SCHEMA_SECTION, COPY_SCHEMA_SECTION, RSYNC_SCHEMA_SECTION 8 from svn_backup import SvnBackup 9 from utils.config_parse_helper import ConfigSchema 8 10 9 11 SVN_TEST_CONFIG = os.path.join(os.path.dirname(__file__), './testing/svn_test.config') … … 27 29 } 28 30 assert sb.rsync_dict == \ 29 { 'sources' : ['/ svnroot']31 { 'sources' : ['/export/ippops4.0/svnroot'] 30 32 , 'additional_args' : ['-a', '--delete-after'] 31 33 } … … 68 70 # Setup Schema 69 71 schema = ConfigSchema(None) 70 schema.add_section( bckup.DEFAULT_SCHEMA_SECTION)71 schema.add_section( bckup.COPY_SCHEMA_SECTION)72 schema.add_section(DEFAULT_SCHEMA_SECTION) 73 schema.add_section(COPY_SCHEMA_SECTION) 72 74 73 75 # check that the rsync is successful (with options) … … 81 83 assert os.path.exists(expected_file_bck1) 82 84 assert os.path.exists(expected_file_bck2) 85 86 87 class TestFullRunFromMain(object): 88 89 def test_main_loads_and_runs_fine_when_given_config(self, tmpdir): 90 config = configparser.ConfigParser() 91 bpath1 = os.path.join(tmpdir, "path/1") 92 bpath2 = os.path.join(tmpdir, "path/2") 93 config['DEFAULT'] = \ 94 { 'backup_paths' : f"{bpath1}, {bpath2}" 95 , 'source_machine' : 'rocket' 96 , 'verbose' : 'True' 97 } 98 copy_source = os.path.join(tmpdir, "copy/source") 99 svn_conf_file = "dav_svn.conf" 100 config['COPY'] = \ 101 { 'sources' : f'{copy_source}/{svn_conf_file}' 102 } 103 tar_source = os.path.join(tmpdir, "tar/source") 104 config['TAR'] = \ 105 { 'sources' : f"{tar_source}" 106 , 'additional_args' : "--verbose -z -p -cf" 107 , 'target_filename' : 'svnroot.tar.gz' 108 , 'prefix_date' : 'False' 109 } 110 os.makedirs(bpath1) 111 os.makedirs(bpath2) 112 os.makedirs(copy_source) 113 os.makedirs(tar_source) 114 Path(os.path.join(copy_source, svn_conf_file)).touch() 115 116 schema = ConfigSchema(None) 117 schema.add_section(bckup.DEFAULT_SCHEMA_SECTION) 118 schema.add_section(bckup.COPY_SCHEMA_SECTION) 119 schema.add_section(bckup.TAR_SCHEMA_SECTION) 120 121 svnbck_mod.main(config, schema) 122 assert True is True 83 123 84 124 … … 124 164 # Setup Schema 125 165 schema = ConfigSchema(None) 126 schema.add_section( bckup.DEFAULT_SCHEMA_SECTION)127 schema.add_section( bckup.RSYNC_SCHEMA_SECTION)166 schema.add_section(DEFAULT_SCHEMA_SECTION) 167 schema.add_section(RSYNC_SCHEMA_SECTION) 128 168 129 169 # check that the rsync is successful (with options) -
branches/ipp-259_genericise_backups/tools/backups/testing/confluence_test.config
r40952 r40962 7 7 8 8 [COPY] 9 sources = /var/atlassian/application-data/confluence/ export9 sources = /var/atlassian/application-data/confluence/backups 10 10 additional_args = -v 11 conf_prefix = confluence-xml-backup- 11 12 12 13 [TAR] 13 sources = /var/atlassian/application-data/confluence/ data14 sources = /var/atlassian/application-data/confluence/attachments 14 15 additional_args = --verbose -z -p -cf 15 16 target_filename = confluence.tar.gz -
branches/ipp-259_genericise_backups/tools/backups/testing/svn_test.config
r40952 r40962 11 11 12 12 [RSYNC] 13 sources = / svnroot13 sources = /export/ippops4.0/svnroot 14 14 additional_args = -a --delete-after -
branches/ipp-259_genericise_backups/tools/backups/utils/config_parse_helper.py
r40949 r40962 1 1 from enum import Enum 2 2 from configparser import ConfigParser 3 from backups.utils.errors import ConfigError, ValidationError 3 4 from utils.errors import ConfigError, ValidationError 4 5 5 6 … … 139 140 parsed_items[csl.key] = splitup 140 141 else: 142 141 143 raise ConfigError(config, f"ConfigError: Don't know how to process special schema {csl.special_processing}") 142 144 else: … … 150 152 151 153 152 # def parse_config(config: ConfigParser(), schema: ConfigSchemaSection) -> dict:153 # return _parse_config_section(config, schema)154 155 154 def _parse_config(config: ConfigParser(), schema: ConfigSchema) -> dict: 156 155 parsed_items = {} 157 print(config)158 for c in config:159 print(c)160 156 161 157 for css_name in schema.sections: 162 print(css_name)163 158 css = schema.get_schema_section(css_name) 164 print(css)165 159 166 160 # if config.has_section(css_name): -
branches/ipp-259_genericise_backups/tools/backups/utils/config_parse_helper_test.py
r40949 r40962 1 1 import pytest 2 2 3 import backups.utils.config_parse_helper as helper4 from backups.utils.errors import ConfigError, ValidationError3 import utils.config_parse_helper as helper 4 from utils.errors import ConfigError, ValidationError 5 5 6 6 -
branches/ipp-259_genericise_backups/tools/backups/utils/generic_utils.py
r40912 r40962 2 2 import os.path as path 3 3 import shutil 4 5 4 from distutils.dir_util import copy_tree 6 5 7 import backups.utils.subprocess_utils as sub_utils 8 from backups.utils.errors import ValidationError6 from .subprocess_utils import simple_unix_wrapper 7 from .errors import ValidationError 9 8 10 9 … … 118 117 command_and_args = ["mv", fp, destination_dirs[i]] 119 118 # shutil.move(fp, destination_dirs[i]) 120 s ub_utils.simple_unix_wrapper(command_and_args)119 simple_unix_wrapper(command_and_args) 121 120 except IOError as e: 122 121 print("IOError copying: ", e.filename, e.filename2) -
branches/ipp-259_genericise_backups/tools/backups/utils/generic_utils_test.py
r40898 r40962 1 import backups.utils.generic_utils as utils2 1 import os 3 2 import pytest 4 3 5 from backups.utils.errors import ValidationError 4 from .generic_utils import * 5 from .errors import ValidationError 6 6 from pathlib import Path 7 7 … … 19 19 def test_copy_fails_with_none_args(self, tmpdir): 20 20 with pytest.raises(ValidationError): 21 utils.copy_to_dir(None, tmpdir)21 copy_to_dir(None, tmpdir) 22 22 23 23 with pytest.raises(ValidationError): 24 24 real_file = make_a_real_file(tmpdir, "file.txt") 25 utils.copy_to_dir(real_file, None)25 copy_to_dir(real_file, None) 26 26 27 27 def test_copy_fails_if_source_does_not_exist(self, tmpdir): 28 28 with pytest.raises(ValidationError): 29 utils.copy_to_dir("not a real file", tmpdir)29 copy_to_dir("not a real file", tmpdir) 30 30 31 31 def test_copy_fails_if_destination_is_not_real(self, tmpdir): 32 32 with pytest.raises(ValidationError): 33 33 real_file = make_a_real_file(tmpdir, "real_file.txt") 34 utils.copy_to_dir(real_file, "not a real directory")34 copy_to_dir(real_file, "not a real directory") 35 35 36 36 def test_copy_fails_if_destination_is_not_a_directory(self, tmpdir): … … 42 42 43 43 with pytest.raises(ValidationError): 44 utils.copy_to_dir(real_file, not_a_directory)44 copy_to_dir(real_file, not_a_directory) 45 45 46 46 def test_copy_to_dir(self, tmpdir): … … 60 60 61 61 # run copy function and confirm copy exists (and original) 62 result = utils.copy_to_dir(file_to_copy, destination_dir)62 result = copy_to_dir(file_to_copy, destination_dir) 63 63 assert result == 0 64 64 assert os.path.exists(file_to_copy) … … 98 98 99 99 # Provide only the original tmpdir to the copying function 100 utils.copy_to_dir(subdir, destination_dir, True)100 copy_to_dir(subdir, destination_dir, True) 101 101 102 102 # assert that the subdirs and files all exist … … 110 110 111 111 with pytest.raises(ValidationError): 112 utils.copy_multiple_items_to_multiple_dirs(None, None)113 114 with pytest.raises(ValidationError): 115 utils.copy_multiple_items_to_multiple_dirs(tmpdir, None)116 117 with pytest.raises(ValidationError): 118 utils.copy_multiple_items_to_multiple_dirs(None, tmpdir)112 copy_multiple_items_to_multiple_dirs(None, None) 113 114 with pytest.raises(ValidationError): 115 copy_multiple_items_to_multiple_dirs(tmpdir, None) 116 117 with pytest.raises(ValidationError): 118 copy_multiple_items_to_multiple_dirs(None, tmpdir) 119 119 120 120 def test_copy_requires_args_to_be_in_list_format(self, tmpdir): … … 122 122 not_a_list = "not a list" 123 123 with pytest.raises(ValidationError): 124 utils.copy_multiple_items_to_multiple_dirs(not_a_list, tmpdir)124 copy_multiple_items_to_multiple_dirs(not_a_list, tmpdir) 125 125 126 126 tmpfile = make_a_real_file(tmpdir, "a_file.txt") 127 127 with pytest.raises(ValidationError): 128 utils.copy_multiple_items_to_multiple_dirs(tmpfile, not_a_list)128 copy_multiple_items_to_multiple_dirs(tmpfile, not_a_list) 129 129 130 130 def test_copy_is_fine_with_single_items(self, tmpdir): … … 136 136 assert not os.path.exists(expected_file) 137 137 138 result = utils.copy_multiple_items_to_multiple_dirs([tmpfile], [destination])138 result = copy_multiple_items_to_multiple_dirs([tmpfile], [destination]) 139 139 assert result == 0 140 140 assert os.path.exists(expected_file) … … 168 168 assert len(expected_files) == 9 169 169 170 result = utils.copy_multiple_items_to_multiple_dirs(source_files, dest_paths)170 result = copy_multiple_items_to_multiple_dirs(source_files, dest_paths) 171 171 assert result == 0 172 172 for ef in expected_files: … … 212 212 213 213 # Provide only the original tmpdir to the copying function 214 utils.copy_multiple_items_to_multiple_dirs([tmpdir], [destination_dir], True)214 copy_multiple_items_to_multiple_dirs([tmpdir], [destination_dir], True) 215 215 216 216 # assert that the subdirs and files all exist -
branches/ipp-259_genericise_backups/tools/backups/utils/subprocess_utils.py
r40932 r40962 2 2 3 3 # Plans are to flesh this out a bit more to make some smarter copying etc 4 from backups.utils.errors import ValidationError, SubprocessError4 from .errors import ValidationError, SubprocessError 5 5 6 6 -
branches/ipp-259_genericise_backups/tools/backups/utils/subprocess_utils_test.py
r40932 r40962 5 5 6 6 from pathlib import Path 7 from backups.utils.errors import SubprocessError, ValidationError7 from .errors import SubprocessError, ValidationError 8 8 9 9 -
branches/ipp-259_genericise_backups/tools/backups/website_backup.py
r40958 r40962 1 import argparse2 1 import os.path as path 3 2 4 import backups.utils.config_parse_helper as cfg_help5 from backup s.backupimport Backup6 from backups.utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine3 import utils.config_parse_helper as cfg_help 4 from backup import Backup 5 from utils.config_parse_helper import ConfigSchema, ConfigSchemaSection, ConfigSchemaLine 7 6 8 7 EXPECTED_CONFIG_FILE = path.join(path.dirname(__file__), './website_backup.config') … … 32 31 33 32 34 def main(): 35 wb = WebsiteBackup() 36 wb.run_backup() 37 38 39 def parse_args(args): 40 41 parser = argparse.ArgumentParser( 42 description='Performs backup of the panstarrs website.') 43 44 parser.add_argument('--config_file', 45 nargs='?', 46 help='specify the location of a config that matches the ConfigSchema', 47 default=EXPECTED_CONFIG_FILE) 48 49 return parser.parse_args() 33 def main(config=EXPECTED_CONFIG_FILE, schema=WEBSITE_SCHEMA): 34 wb = WebsiteBackup(config, schema) 35 wb.run_backup_processes() 50 36 51 37 -
branches/ipp-259_genericise_backups/tools/backups/website_backup_test.py
r40958 r40962 3 3 from pathlib import Path 4 4 5 import backups.backup as bckup 6 from backups.website_backup import WebsiteBackup 7 from backups.utils.config_parse_helper import ConfigSchema 5 import backup as bckup 6 import website_backup as webbck_mod 7 from website_backup import WebsiteBackup 8 from utils.config_parse_helper import ConfigSchema 8 9 9 10 WEBSITE_TEST_CONFIG = os.path.join(os.path.dirname(__file__), … … 31 32 wb = WebsiteBackup(config_file=WEBSITE_TEST_CONFIG) 32 33 self.assert_defaults(wb) 34 35 36 class TestFullRunFromMain(object): 37 38 def test_main_loads_and_runs_fine_when_given_config(self, tmpdir): 39 config = configparser.ConfigParser() 40 bpath1 = os.path.join(tmpdir, "path/1") 41 bpath2 = os.path.join(tmpdir, "path/2") 42 config['DEFAULT'] = \ 43 { 'backup_paths' : f"{bpath1}, {bpath2}" 44 , 'source_machine' : 'rocket' 45 , 'verbose' : 'True' 46 } 47 tar_source = os.path.join(tmpdir, "tar/source") 48 config['TAR'] = \ 49 { 'sources' : f"{tar_source}" 50 , 'additional_args' : "--verbose -z -p -cf" 51 , 'target_filename' : 'svnroot.tar.gz' 52 , 'prefix_date' : 'False' 53 } 54 os.makedirs(bpath1) 55 os.makedirs(bpath2) 56 os.makedirs(tar_source) 57 58 schema = ConfigSchema(None) 59 schema.add_section(bckup.DEFAULT_SCHEMA_SECTION) 60 schema.add_section(bckup.TAR_SCHEMA_SECTION) 61 62 webbck_mod.main(config, schema) 63 assert True is True 33 64 34 65
Note:
See TracChangeset
for help on using the changeset viewer.
