예제 #1
0
def configure(mocker: MockerFixture):
    original_environ = dict(os.environ)
    cwd = os.getcwd()

    Config.defaults = {'defaults': {'fail_fast': True}}

    def overrides(config):
        if not 'core' in config:
            config['core'] = {}
        config.get('core')['check_updates'] = False

    Config.overrides = overrides

    try:
        if os.name == 'nt' and 'COMSPEC' not in os.environ:
            os.environ['COMSPEC'] = r'C:\Windows\System32\cmd.exe'
        if os.name != 'nt' and 'SHELL' not in os.environ:
            os.environ['SHELL'] = '/bin/bash'
        if os.name == 'nt':
            os.environ['DDB_OVERRIDE_DOCKER_USER_UID'] = '1000'
            os.environ['DDB_OVERRIDE_DOCKER_USER_GID'] = '1000'
            os.environ['DDB_OVERRIDE_DOCKER_IP'] = '127.0.0.1'

        configure_logging(SPAM)

        mocker.patch('ddb.feature.smartcd.actions.is_smartcd_installed',
                     lambda: False)
        mocker.patch('ddb.feature.version.is_git_repository', lambda: False)

        yield
    finally:
        os.chdir(cwd)
        os.environ.clear()
        os.environ.update(original_environ)
        reset()
    def test_config_output_extra_filenames_some_files_option(
            self, project_loader, capsys: CaptureFixture):
        project_loader("extra-filenames")

        main(["config", "some", "--files"])

        reset()

        output = capsys.readouterr().out

        parts = [part.lstrip() for part in output.split('---') if part.strip()]
        assert len(parts) == 1

        configurations = {}

        for part in parts:
            filename, config = part.split('\n', 1)
            assert filename.startswith('# ')
            filename = filename[2:]
            filename = os.path.relpath(filename, os.getcwd())
            configurations[filename] = Dotty(yaml.safe_load(config))

        assert ('some.custom.yml',) == \
               tuple(configurations.keys())

        assert configurations['some.custom.yml']['some'] is True
        assert 'app.value' not in configurations['some.custom.yml']
    def test_config_env_ddb(self, project_loader):
        project_loader("env-ddb")

        main(["configure"], reset_disabled=True)

        assert not config.data.get('app.test')

        reset()
    def test_config_local_falsy(self, project_loader):
        project_loader("local-falsy")

        main(["configure"], reset_disabled=True)

        assert config.data.get('app.disabled_services') == []

        reset()
    def test_config_extra_filenames(self, project_loader):
        project_loader("extra-filenames")

        main(["configure"], reset_disabled=True)

        assert config.data.get('another') is True
        assert config.data.get('some') is True
        assert config.data.get('app.value') == 'local'

        reset()
    def test_config_override_shell(self, project_loader):
        project_loader("override-shell")

        os.environ['DDB_OVERRIDE_SHELL_SHELL'] = 'fish'

        main(["config"], reset_disabled=True)

        assert config.data.get('shell.shell') == 'fish'

        reset()
    def test_config_merge_insert_strategy3(self, project_loader):
        project_loader("merge-insert-strategy3")

        main(["configure"], reset_disabled=True)

        assert config.data.get('core.env.current') == 'dev'
        assert config.data.get('core.env.available') == [
            'prod', 'prod', 'stage', 'stage', 'ci', 'dev'
        ]

        reset()
    def test_config_merge_default(self, project_loader):
        project_loader("merge-default")

        main(["configure"], reset_disabled=True)

        assert config.data.get('core.env.current') == 'dev-services'
        assert config.data.get('core.env.available') == [
            'prod', 'stage', 'ci', 'dev', 'dev-services'
        ]

        reset()
    def test_config_env_ddb2(self, project_loader):
        project_loader("env-ddb")

        os.rename('ddb.dev.tmp.yml', 'ddb.dev.yml')

        main(["configure"], reset_disabled=True)

        assert config.data.get('app.test')
        assert not os.path.islink("ddb.yml")

        reset()
    def test_config_more_properties_docker_ip_value(self, project_loader,
                                                    capsys: CaptureFixture):
        project_loader("more-properties")

        main(["config", "docker.ip", "--value"], reset_disabled=True)

        out = capsys.readouterr().out

        docker_ip = config.data.get('docker.ip')

        assert out == f"{docker_ip}\n"

        reset()
    def test_config_deep_custom_strategy(self, project_loader):
        project_loader("deep-local-custom-strategy")

        main(["configure"], reset_disabled=True)

        assert config.data.get('app.deep.disabled_services') == [
            'python', 'gunicorn', 'another'
        ]
        assert config.data.get('app.deep.another_strategy') == [
            'another', 'python', 'gunicorn'
        ]

        reset()
    def test_config_more_properties_core_env_available_value(
            self, project_loader, capsys: CaptureFixture):
        project_loader("more-properties")

        main(["config", "core.env.available", "--value"], reset_disabled=True)

        out = capsys.readouterr().out

        available = config.data.get('core.env.available')

        assert out == f"{available}\n"

        reset()
    def test_config_override_ci(self, project_loader):
        project_loader("override-ci")

        os.chdir("sub")

        main(["config"], reset_disabled=True)

        assert config.data.get('core.env.current') == 'ci'
        assert config.data.get('docker.cache_from_image') is True
        assert config.data.get(
            'docker.registry.name') == "gfiorleans.azurecr.io"
        assert config.data.get('docker.registry.repository') == "alm-atout"

        reset()
    def test_config_output_extra_filenames(self, project_loader,
                                           capsys: CaptureFixture):
        project_loader("extra-filenames")

        main(["config"])

        configuration = Dotty(yaml.safe_load(capsys.readouterr().out))

        assert configuration['app.value'] == 'local'
        assert configuration['some'] is True
        assert configuration['another'] is True
        assert configuration['core.configuration.extra'] == [
            'some.custom.yml', 'another.config.file'
        ]

        reset()
    def test_config_more_properties_jsonnet_docker_compose(
            self, project_loader, capsys: CaptureFixture):
        project_loader("more-properties")

        main(["config", "jsonnet.docker.compose"])

        configuration = Dotty(yaml.safe_load(capsys.readouterr().out))

        assert configuration[
            'jsonnet.docker.compose.project_name'] == 'yo-custom'
        assert 'jsonnet.docker.registry.name' not in configuration
        assert 'jsonnet.docker.registry.repository' not in configuration
        assert 'jsonnet.docker.virtualhost.redirect_to_https' not in configuration
        assert 'docker' not in configuration
        assert 'core' not in configuration

        reset()
    def test_config_more_properties_docker_user_variables(
            self, project_loader, capsys: CaptureFixture):
        project_loader("more-properties")

        main(["config", "docker.user", "--variables"], reset_disabled=True)

        out = capsys.readouterr().out

        docker_user_gid = config.data.get('docker.user.gid')
        docker_user_uid = config.data.get('docker.user.uid')

        assert out == f"""docker.user.gid: {docker_user_gid}
docker.user.group: None
docker.user.name: None
docker.user.uid: {docker_user_uid}
"""

        reset()
예제 #17
0
    def test_docker_binaries_condition(self, relative_cwd, expected,
                                       project_loader, capsys: CaptureFixture):
        project_loader("docker_condition")

        cwd = os.getcwd()
        if relative_cwd:
            cwd = os.path.join(cwd, relative_cwd)
            os.chdir(cwd)
            assert os.getcwd() == cwd

        try:
            main(["--clear-cache", "configure"], reset_disabled=True)
            assert config.cwd == cwd
        finally:
            reset()

        exceptions = main(["run", "node", "--version"])
        assert not exceptions

        outerr = capsys.readouterr()
        assert expected in outerr.out