def __init__(self, environment, project, build, grab_envs, work_dir=None, sanity_test_timeout_sec=120, version=None): """ @param work_dir - needed if you'd like to override a default work dir where all files reside, see ScriptSettings for more details """ self.script_settings = ScriptSettings(build=build, project=project, env=environment, grab_envs=grab_envs, work_dir=work_dir, sanity_test_timeout_sec=sanity_test_timeout_sec, package_version=version) self.script_settings.create_work_dir_if_absent() self.script_settings.log_settings()
def test_paths(self): tomcat = Tomcat(Backuper("/", None, None), ScriptSettings(build=None, project='project1', env='unit-test')) self.assertEquals('project1.xml', tomcat.get_config_name()) self.assertEquals('project1.ehcache.xml', tomcat.get_ehcache_config_name()) self.assertEquals('location overriden by project config/conf/Catalina/localhost', tomcat.get_config_folder_location()) self.assertEquals('location overriden by project config/webapps', tomcat.get_web_apps_location()) self.assertTrue(tomcat.get_config_file_location().endswith('.jtalks/environments/unit-test/project1.xml'))
class ScriptSettingsTest(unittest.TestCase): sut = ScriptSettings(100500, "project1", "unit-test") def test_prop_is_overriden_by_project_configs(self): self.assertEquals('location overriden by project config', self.sut.get_tomcat_location()) def test_prop_is_overriden_by_env_configs(self): self.assertEquals('final_name overriden by env config', self.sut.get_app_final_name()) def test_tomcat_port_is_taken_from_server_xml(self): self.assertRaises(RuntimeError, self.sut.get_tomcat_port)
class EnvListTest(unittest.TestCase): def test_all_envs_are_listed(self): #can't use assertIn() because in CentOS we have old mock lib self.assertTrue("dev" in self.sut.get_list_of_envs()) self.assertTrue("uat" in self.sut.get_list_of_envs()) self.assertTrue("prod" in self.sut.get_list_of_envs()) self.assertTrue("preprod" in self.sut.get_list_of_envs()) self.assertTrue("unit-test" in self.sut.get_list_of_envs()) def test_list_projects_for_env(self): projects = self.sut.list_projects("unit-test") self.assertEqual(len(projects), 2) self.assertTrue("project1" in projects, "Actually contained:" + repr(projects)) sut = EnvList(ScriptSettings(None, None, None))
class BackuperTest(unittest.TestCase): def test_constructor_throws_if_folder_not_finished_with_slash(self): self.assertRaises(ValueError, Backuper, "folder", None, db_operations) @patch('os.makedirs') def test_backup_creates_folder_to_keep_backups(self, makedirs_method): sut.backup() now = datetime.now().strftime("%Y_%m_%dT%H_%M_%S") folder_to_create = "/tmp/unit-test/project1/{0}".format( now) #Couldn't find a way to mock date makedirs_method.assert_called_with(folder_to_create) def test_get_project_backup_folder(self): self.assertEqual("/tmp/unit-test/project1", sut.get_project_backup_folder()) @patch('os.listdir') def test_get_list_of_backups(self, list_dir_method): list_dir_method.return_value = ["1", "2"] self.assertEqual(["1", "2"], sut.get_list_of_backups()) db_operations = MagicMock() sut = Backuper("/tmp/", ScriptSettings(None, "project1", "unit-test"), db_operations) if __name__ == '__main__': unittest.main()
class ApplicationContext: """ Carries similar ideas to Spring's AppContext - it builds all the objects. This IoC is manual though, the objects are all constructed manually in Python code. """ def __init__(self, environment, project, build, grab_envs, work_dir=None, sanity_test_timeout_sec=120, version=None): """ @param work_dir - needed if you'd like to override a default work dir where all files reside, see ScriptSettings for more details """ self.script_settings = ScriptSettings(build=build, project=project, env=environment, grab_envs=grab_envs, work_dir=work_dir, sanity_test_timeout_sec=sanity_test_timeout_sec, package_version=version) self.script_settings.create_work_dir_if_absent() self.script_settings.log_settings() def nexus(self): return Nexus(build_number=self.script_settings.build) def tomcat(self): return Tomcat(backuper=self.backuper(), script_settings=self.script_settings) def backuper(self): return Backuper(self.script_settings.get_backup_folder(), self.script_settings, self.db_operations()) def db_operations(self): return DbOperations(self.script_settings.env, self.db_settings()) def db_settings(self): config_file_location = self.__project_config_file_location__(self.script_settings.env, self.script_settings.project) db_settings = DbSettings(project=self.script_settings.project, config_file_location=config_file_location) return db_settings def deploy_to_tomcat_facade(self): return DeployToTomcatFacade(self) def environment_config_grabber(self): return EnvironmentConfigGrabber(self.script_settings.get_env_configs_dir(), self.script_settings.get_temp_dir()) def sanity_test(self): http_port = self.tomcat_server_xml().http_port() return SanityTest(tomcat_port=http_port, app_name=self.script_settings.get_app_final_name(), sanity_test_timeout_sec=self.script_settings.get_sanity_test_timeout_sec()) def tomcat_server_xml(self): return TomcatServerXml.fromfile(self.script_settings.get_tomcat_location() + "/conf/server.xml") def load_db_from_backup(self): return LoadDbFromBackup(self.db(), self.ssh()) def ssh(self): return SSH(self.script_settings) def db(self): return DB(self.script_settings) def script_settings(self): return self.script_settings def env_list(self): return EnvList(script_settings=self.script_settings) def __project_config_file_location__(self, env, project): return os.path.join(self.script_settings.get_env_configs_dir(), env, project + ".xml")