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()
Beispiel #2
0
  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)
Beispiel #4
0
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))
Beispiel #5
0

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")