Ejemplo n.º 1
0
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"
    )
Ejemplo n.º 2
0
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
Ejemplo n.º 3
0
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)
Ejemplo n.º 4
0
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()
Ejemplo n.º 5
0
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)
Ejemplo n.º 6
0
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 == []
Ejemplo n.º 7
0
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)
Ejemplo n.º 8
0
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)
Ejemplo n.º 9
0
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
Ejemplo n.º 10
0
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",
    ]
Ejemplo n.º 11
0
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"
Ejemplo n.º 12
0
def test_project_init() -> None:
    project = Project(track="staging")
    assert project
Ejemplo n.º 13
0
def test_dependency_url() -> None:
    project = Project(track="staging")
    assert project.secret_data["ODIN_URL"]
Ejemplo n.º 14
0
def test_dependency_production_like_url() -> None:
    with pytest.raises(ValueError):
        Project(track="staging", url="www.example.com")
Ejemplo n.º 15
0
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"
Ejemplo n.º 16
0
def test_default_empty_dependencies() -> None:
    project = Project(track="staging")
    assert project.dependency_projects == []