def test_should_assemble_environment(self): file = os.path.join(os.path.dirname(__file__), '../resources', 'model_environment.json') json_data = open(file).read() data = json.loads(json_data) environment = Environment(**data) environment_expected = Environment( type="dokku", name="integrated-dev", deploy_host="integrated-dev.nexxera.com", app_deployment_file_url=get_valid_deployment_file_url()) self.assertEqual(environment.__dict__, environment_expected.__dict__)
def _add_qa_environment(self): self._add_environment( Environment( type="openshift", name="qa", deploy_host="qa.nexxera.com", app_deployment_file_url=get_valid_deployment_file_url()))
def test_deploy_app(self): os.environ['BLA'] = 'teste' file = os.path.join(os.path.dirname(__file__), '../resources', 'app.json') json_data = open(file).read() data = json.loads(json_data) app = App(**data) mock_paas = MockProvider() mock_paas.set_shell_exec(MagicMock()) mock_paas.deploy( app, Environment(name='dev', deploy_host='localhost', type='mock')) env_vars = dict( APP_ENV="Development", TESTE="Oi teste", APP_NOTIFICATION_URL="http://notification.com", DATABASE_URL="postgres://*****:*****@localhost:5432/teste", URL_OPEN_ID="http://www.teste.com", SCHEDULER="{\"hour\": \"*/10\"}") self.assertEqual(app.env_vars, env_vars)
def _add_integrated_dev_environment(self): self._add_environment( Environment( type="dokku", name="integrated-dev", deploy_host="integrated-dev.nexxera.com", app_deployment_file_url=get_valid_deployment_file_url()))
def test_update_environment_should_call_environment_repository(self): self.core.update_environment("dummy", "dokku", "i.com", get_valid_deployment_file_url()) self.assertEqual(1, self.env_repo.update_environment.call_count) env_called = self.env_repo.update_environment.call_args[0][0] self.assertEqual( env_called.__dict__, Environment("dokku", "dummy", "i.com", get_valid_deployment_file_url()).__dict__)
def setUp(self): self.dokku = DokkuProvider() self.shell_exec = MagicMock() self.dokku.set_shell_exec(self.shell_exec) self.git_exec = MagicMock() self.dokku.set_git_exec(self.git_exec) self._configure_dokku_exec() self.env = Environment("dokku", "dev", "dev.com") self.app = None
def test_add_environments_should_call_environment_repository(self): self.core.add_environment("dokku", "dummy", "integrated-dev.nexxera.com", get_valid_deployment_file_url()) self.assertEqual(1, self.env_repo.add_environment.call_count) env_called = self.env_repo.add_environment.call_args[0][0] self.assertEqual( env_called.__dict__, Environment("dummy", "dokku", "integrated-dev.nexxera.com", get_valid_deployment_file_url()).__dict__)
def test_update_environment(self): self._add_integrated_dev_environment() self.env_repo.update_environment( Environment( name="integrated-dev", type="openshift", deploy_host="integrated-dev2.nexxera.com", app_deployment_file_url=get_valid_deployment_file_url())) updated_env = self.env_repo.load_environment("integrated-dev") self.assertEqual("openshift", updated_env.type) self.assertEqual("integrated-dev2.nexxera.com", updated_env.deploy_host) self.assertEqual(get_valid_deployment_file_url(), updated_env.app_deployment_file_url)
def update_environment(self, name, type, deploy_host, app_deployment_file_url): """ Updates the environment identified by `name` Args: name (str): the name of the environment to update type (str): the new environment type deploy_host (str): the new deploy_host app_deployment_file_url (str): the new app_deployment_file_url type """ environment = Environment(name=name, type=type, deploy_host=deploy_host, app_deployment_file_url=app_deployment_file_url) self.environment_repository.update_environment(environment)
def _load_environments_dict(self): """ Loads the environments persisted in the environments.json file Returns: list of dict containing the environments data """ env_list = [] if os.path.isfile(self.get_environments_file()): with open(self.get_environments_file()) as file: json_data = file.read() data = json.loads(json_data, object_hook=lambda j: Environment(**j)) env_list = data return env_list
def add_environment(self, name, type, deploy_host, app_deployment_file_url): """ Adiciona e salva um novo Environment. Args: type: Tipo de ambiente, relacionado a ferramenta Paas a qual os dados do ambiente se refere, ex.: dokku, openshift, heroku, etc. name: Nome do Environment, ex.: dev, qa, stage, production, etc. deploy_host: Host de acesso a ferramenta Paas onde é realizado o deploy. app_deployment_file_url: Template usado para baixar arquivo de configuração da aplicação a ser deployada. Returns: """ environment = Environment(name=name, type=type, deploy_host=deploy_host, app_deployment_file_url=app_deployment_file_url) self.environment_repository.add_environment(environment)
def _resolve_environment(self, app_data, environment): """ Resolves the environment deploy configuration and returns an instance of Environment class. Args: app_data (dict): the app data environment (str): environment name Returns: ndeploy.model.Environment object """ if environment and self.env_repository.has_environment(environment): return self.env_repository.load_environment(environment) if app_data and "environment" in app_data: env = app_data["environment"] return Environment(env["type"], env["name"], env["deploy_host"]) raise InvalidArgumentError( "cant resolve any environment. " "Either pass an environment in app " "config file or explicitly in 'ndeploy deploy' command")
def test_wrong_app_deployment_file_url(self): with self.assertRaises(BadFormedRemoteConfigUrlError): Environment(type="dokku", name="qa", deploy_host="qa.nexxera.com", app_deployment_file_url="*****@*****.**")
def _deploy(self, app): env = Environment("openshift", "dev", "dev.com") self.openshift.deploy(app, env)
def _configure_env(self, name, host, _type, url): self.env_repo.has_environment.side_effect = \ lambda n: n == name self.env_repo.load_environment.side_effect = \ lambda n: Environment(_type, name, host, url) if n == name else None
def test_updates_nonexistent_environment_raises_error(self): with self.assertRaises(EnvironmentDoesNotExistError): self.env_repo.update_environment( Environment(name="invalid-env", type="openshift", deploy_host=""))
def _undeploy(self): self.openshift.undeploy(App("myapp", "mygroup"), Environment("openshift", "dev", "dev.com"))