def test_dependency_project() -> None: project = Project(track="staging") assert len(project.dependency_projects) == 1 assert ( project.dependency_projects[0].image == "docker-registry:5000/test/odin:2a7958c61a31a38a365aa347147aba2aaaaaaa-finalstage" )
def test_create_deployment() -> None: results = settings.plugin_manager.hook.project_deployment_complete( project=Project(track="testing", url="test.example.com"), track="testing", namespace="testing", ) assert len(results) and results[0] is True
def test_create_deployment() -> None: results: Any = settings.plugin_manager.hook.project_deployment_begin( project=Project(track="testing", url="test.example.com"), track="testing", namespace="testing", ) results = cast(List[Optional[bool]], results) assert len(results) == 0 results: Any = settings.plugin_manager.hook.project_deployment_complete( # type: ignore[no-redef] exception=None, namespace="testing", project=Project(track="testing", url="test.example.com"), track="testing", ) results = cast(List[Optional[bool]], results) assert len(results) and all(results)
def test_project_deployment_complete(mock_post_message: Any) -> None: results = settings.plugin_manager.hook.project_deployment_complete( project=Project(track="review", url="test.example.com"), track="review", namespace="review", ) assert len(results) == 1 and results[0] is True mock_post_message.assert_called_once()
def test_create_secret_qa(kubernetes: Kubernetes, test_namespace: str) -> None: track = "qa" project = Project(track=track) kubernetes.create_secret( data={"test_secret": "1234"}, namespace=K8S_NAMESPACE, track=track, project=project, secret_name=project.secret_name, ) kubernetes.get(resource="secret", namespace=K8S_NAMESPACE, name=project.secret_name)
def test_project_defaults() -> None: project = Project(track="staging") assert project.track == "staging" assert ( project.image == "docker-registry:5000/test/testing:2a7958c61a31a38a365aa347147aba2aaaaaaa" ) assert project.secret_name == "testing-staging-testing-secret" assert project.secret_data == {} assert project.basic_auth_secret_name == "" assert project.urls == "" assert not project.is_dependent_project assert project.dependency_projects == [] assert project.additional_urls == []
def test_create_secret_stable(kubernetes: Kubernetes, test_namespace: str) -> None: track = DEFAULT_TRACK data = {"test_secret": "1234"} project = Project(track=track) kubernetes.create_secret( data=data, namespace=K8S_NAMESPACE, track=track, project=project, secret_name=project.secret_name, ) kubernetes.get(resource="secret", namespace=K8S_NAMESPACE, name=project.secret_name)
def test_delete_all(kubernetes: Kubernetes, test_namespace: str) -> None: track = DEFAULT_TRACK deploy_name = get_deploy_name(track=track) project = Project(track=track) kubernetes.create_secret( data={"test": "test"}, namespace=test_namespace, track=track, project=project, secret_name=project.secret_name, ) kubernetes.delete_all(namespace=test_namespace, labels={"release": deploy_name}) with pytest.raises(Exception): kubernetes.get(resource="secret", name=test_namespace)
def test_project_prefixed_artifact(mockenv: MockEnv) -> None: safe_name = env_var_safe_key(settings.PROJECT_NAME) project_scoped_secret_prefix = f"{safe_name}_{settings.K8S_SECRET_PREFIX}" test_key, test_value = "DATABASE_NAME", "test-project-database" with TemporaryDirectory() as service_artifact_folder: with open(Path(service_artifact_folder) / "postgres.env", "w") as f: f.write(f"{project_scoped_secret_prefix}{test_key}={test_value}\n") with mockenv({"SERVICE_ARTIFACT_FOLDER": service_artifact_folder}): # ``Settings.__init__()`` has the side-effect of populating the environment # with the values from artifact dotenv files. Those values are then read from # ``os.environ`` by ``Project.__init__()`` while creating the ``secret_data``. _ = Settings() project = Project(track="staging") assert project.secret_data[test_key] == test_value
def test_lifecycle_hooks_deployment(_: mock.MagicMock) -> None: ns = track = "testing" project = Project(track=track, url="example.com") service = mock.MagicMock() k = Kubernetes(track=track) k.helm = mock.MagicMock(**{"upgrade_chart.return_value.return_code": 0}) mock.patch("kolga.libs.kubernetes.KubeLoggerThread") Plugin, hook_calls = call_tracking_plugin_factory() with load_plugin(Plugin): k.deploy_service(namespace=ns, service=service, track=track) k.create_application_deployment(namespace=ns, project=project, track=track) assert [*hook_calls.keys()] == [ "service_deployment_begin", "service_deployment_complete", "project_deployment_begin", "project_deployment_complete", ]
def test_project_prefixed_variable() -> None: project = Project(track="staging") assert project.secret_data["TESTVAR_2"] == "testing_test" assert project.dependency_projects[0].secret_data["TESTVAR_1"] == "odin_test"
def test_project_init() -> None: project = Project(track="staging") assert project
def test_dependency_url() -> None: project = Project(track="staging") assert project.secret_data["ODIN_URL"]
def test_dependency_production_like_url() -> None: with pytest.raises(ValueError): Project(track="staging", url="www.example.com")
def test_dependency_project_no_host_port() -> None: project = Project(track="staging") assert len(project.dependency_projects) == 1 assert project.dependency_projects[0].name == "odin"
def test_default_empty_dependencies() -> None: project = Project(track="staging") assert project.dependency_projects == []