예제 #1
0
 def test_replacements(self):
     config = self.load()
     self.assertEqual(
         config.replacements,
         [
             GitOpsConfig.Replacement(
                 path="a.b",
                 variable=GitOpsConfig.Replacement.Variable.ROUTE_HOST),
             GitOpsConfig.Replacement(
                 path="c.d",
                 variable=GitOpsConfig.Replacement.Variable.GIT_COMMIT),
         ],
     )
예제 #2
0
    def setUp(self):
        self.init_mock_manager(CreatePreviewCommand)

        self.os_mock = self.monkey_patch(os)
        self.os_mock.path.isdir.return_value = True

        self.shutil_mock = self.monkey_patch(shutil)
        self.shutil_mock.copytree.return_value = None

        self.logging_mock = self.monkey_patch(logging)
        self.logging_mock.info.return_value = None

        self.update_yaml_file_mock = self.monkey_patch(update_yaml_file)
        self.update_yaml_file_mock.return_value = True

        self.yaml_file_dump_mock = self.monkey_patch(yaml_file_dump)
        self.yaml_file_dump_mock.return_value = None

        self.load_gitops_config_mock = self.monkey_patch(load_gitops_config)
        self.load_gitops_config_mock.return_value = GitOpsConfig(
            team_config_org="TEAM_CONFIG_ORG",
            team_config_repo="TEAM_CONFIG_REPO",
            application_name="my-app",
            route_host_template="app.xy-{SHA256_8CHAR_BRANCH_HASH}.example.tld",
            replacements=[
                GitOpsConfig.Replacement(
                    path="image.tag",
                    variable=GitOpsConfig.Replacement.Variable.GIT_COMMIT),
                GitOpsConfig.Replacement(
                    path="route.host",
                    variable=GitOpsConfig.Replacement.Variable.ROUTE_HOST),
            ],
        )

        self.git_repo_api_mock = self.create_mock(GitRepoApi)

        self.git_repo_api_factory_mock = self.monkey_patch(GitRepoApiFactory)
        self.git_repo_api_factory_mock.create.return_value = self.git_repo_api_mock

        self.git_repo_mock = self.monkey_patch(GitRepo)
        self.git_repo_mock.return_value = self.git_repo_mock
        self.git_repo_mock.__enter__.return_value = self.git_repo_mock
        self.git_repo_mock.__exit__.return_value = False
        self.git_repo_mock.get_full_file_path.side_effect = lambda x: f"/tmp/created-tmp-dir/{x}"
        self.git_repo_mock.clone.return_value = None
        self.git_repo_mock.commit.return_value = None
        self.git_repo_mock.push.return_value = None

        self.seal_mocks()
예제 #3
0
    def setUp(self):
        self.init_mock_manager(CreatePreviewCommand)

        self.os_mock = self.monkey_patch(os)
        self.os_mock.path.isdir.return_value = True

        self.shutil_mock = self.monkey_patch(shutil)
        self.shutil_mock.copytree.return_value = None

        self.logging_mock = self.monkey_patch(logging)
        self.logging_mock.info.return_value = None

        self.update_yaml_file_mock = self.monkey_patch(update_yaml_file)
        self.update_yaml_file_mock.return_value = True

        self.yaml_file_dump_mock = self.monkey_patch(yaml_file_dump)
        self.yaml_file_dump_mock.return_value = None

        self.load_gitops_config_mock = self.monkey_patch(load_gitops_config)
        self.load_gitops_config_mock.return_value = GitOpsConfig(
            api_version=2,
            application_name="my-app",
            preview_host_template="app.xy-${PREVIEW_ID_HASH}.example.tld",
            preview_template_organisation="PREVIEW_TEMPLATE_ORG",
            preview_template_repository="PREVIEW_TEMPLATE_REPO",
            preview_template_path_template=".preview-templates/my-app",
            preview_template_branch="template-branch",
            preview_target_organisation="PREVIEW_TARGET_ORG",
            preview_target_repository="PREVIEW_TARGET_REPO",
            preview_target_branch=None,
            preview_target_namespace_template=
            "my-app-${PREVIEW_ID_HASH}-preview",
            preview_target_max_namespace_length=50,
            replacements={
                "Chart.yaml": [
                    GitOpsConfig.Replacement(
                        path="name", value_template="${PREVIEW_NAMESPACE}"),
                ],
                "values.yaml": [
                    GitOpsConfig.Replacement(path="image.tag",
                                             value_template="${GIT_HASH}"),
                    GitOpsConfig.Replacement(path="route.host",
                                             value_template="${PREVIEW_HOST}"),
                ],
            },
        )

        self.template_git_repo_api_mock = self.create_mock(GitRepoApi)
        self.target_git_repo_api_mock = self.create_mock(GitRepoApi)

        self.git_repo_api_factory_mock = self.monkey_patch(GitRepoApiFactory)

        def git_repo_api_factory_create_mock(
                _: GitApiConfig, organisation: str,
                repository_name: str) -> GitRepoApi:
            if "TEMPLATE" in organisation and "TEMPLATE" in repository_name:
                return self.template_git_repo_api_mock
            if "TARGET" in organisation and "TARGET" in repository_name:
                return self.target_git_repo_api_mock
            raise Exception(f"no mock for {organisation}/{repository_name}")

        self.git_repo_api_factory_mock.create.side_effect = git_repo_api_factory_create_mock

        self.template_git_repo_mock = self.create_mock(GitRepo)
        self.template_git_repo_mock.__enter__.return_value = self.template_git_repo_mock
        self.template_git_repo_mock.__exit__.return_value = False
        self.template_git_repo_mock.get_full_file_path.side_effect = lambda x: f"/tmp/template-repo/{x}"
        self.template_git_repo_mock.clone.return_value = None
        self.template_git_repo_mock.commit.return_value = None
        self.template_git_repo_mock.push.return_value = None

        self.target_git_repo_mock = self.create_mock(GitRepo)
        self.target_git_repo_mock.__enter__.return_value = self.target_git_repo_mock
        self.target_git_repo_mock.__exit__.return_value = False
        self.target_git_repo_mock.get_full_file_path.side_effect = lambda x: f"/tmp/target-repo/{x}"
        self.target_git_repo_mock.clone.return_value = None

        def git_repo_constructor_mock(git_repo_api: GitRepoApi) -> GitRepo:
            if git_repo_api == self.template_git_repo_api_mock:
                return self.template_git_repo_mock
            if git_repo_api == self.target_git_repo_api_mock:
                return self.target_git_repo_mock
            raise Exception(f"no mock for {git_repo_api}")

        self.monkey_patch(GitRepo).side_effect = git_repo_constructor_mock

        self.seal_mocks()