Пример #1
0
def test_compose_run(arrow_compose_path):
    expected_calls = [
        "run --rm conda-cpp",
    ]
    compose = DockerCompose(arrow_compose_path)
    with assert_compose_calls(compose, expected_calls):
        compose.run('conda-cpp')

    expected_calls = ["run --rm conda-python"]
    expected_env = PartialEnv(PYTHON='3.6')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.run('conda-python')

    compose = DockerCompose(arrow_compose_path, params=dict(PYTHON='3.8'))
    expected_env = PartialEnv(PYTHON='3.8')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.run('conda-python')

    compose = DockerCompose(arrow_compose_path, params=dict(PYTHON='3.8'))
    for command in ["bash", "echo 1"]:
        expected_calls = [["run", "--rm", "conda-python", command]]
        expected_env = PartialEnv(PYTHON='3.8')
        with assert_compose_calls(compose, expected_calls, env=expected_env):
            compose.run('conda-python', command)

    expected_calls = [
        ("run --rm -e CONTAINER_ENV_VAR_A=a -e CONTAINER_ENV_VAR_B=b "
         "conda-python")
    ]
    compose = DockerCompose(arrow_compose_path)
    expected_env = PartialEnv(PYTHON='3.6')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        env = collections.OrderedDict([("CONTAINER_ENV_VAR_A", "a"),
                                       ("CONTAINER_ENV_VAR_B", "b")])
        compose.run('conda-python', env=env)
Пример #2
0
def test_compose_run(arrow_compose_path):
    expected_calls = [
        format_run("conda-cpp"),
    ]
    compose = DockerCompose(arrow_compose_path)
    with assert_compose_calls(compose, expected_calls):
        compose.run('conda-cpp')

    expected_calls = [
        format_run("conda-python")
    ]
    expected_env = PartialEnv(PYTHON='3.6')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.run('conda-python')

    compose = DockerCompose(arrow_compose_path, params=dict(PYTHON='3.8'))
    expected_env = PartialEnv(PYTHON='3.8')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.run('conda-python')

    compose = DockerCompose(arrow_compose_path, params=dict(PYTHON='3.8'))
    for command in ["bash", "echo 1"]:
        expected_calls = [
            format_run(["conda-python", command]),
        ]
        expected_env = PartialEnv(PYTHON='3.8')
        with assert_compose_calls(compose, expected_calls, env=expected_env):
            compose.run('conda-python', command)

    expected_calls = [
        (
            format_run("-e CONTAINER_ENV_VAR_A=a -e CONTAINER_ENV_VAR_B=b "
                       "conda-python")
        )
    ]
    compose = DockerCompose(arrow_compose_path)
    expected_env = PartialEnv(PYTHON='3.6')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        env = collections.OrderedDict([
            ("CONTAINER_ENV_VAR_A", "a"),
            ("CONTAINER_ENV_VAR_B", "b")
        ])
        compose.run('conda-python', env=env)

    expected_calls = [
        (
            format_run("--volume /host/build:/build --volume "
                       "/host/ccache:/ccache:delegated conda-python")
        )
    ]
    compose = DockerCompose(arrow_compose_path)
    with assert_compose_calls(compose, expected_calls):
        volumes = ("/host/build:/build", "/host/ccache:/ccache:delegated")
        compose.run('conda-python', volumes=volumes)
Пример #3
0
def test_compose_pull_params(arrow_compose_path):
    expected_calls = [
        "pull --ignore-pull-failures conda-cpp",
        "pull --ignore-pull-failures conda-python",
    ]
    compose = DockerCompose(arrow_compose_path, params=dict(UBUNTU='18.04'))
    expected_env = PartialEnv(PYTHON='3.6', PANDAS='latest')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.pull('conda-python-pandas', pull_leaf=False)
Пример #4
0
def test_compose_push(arrow_compose_path):
    compose = DockerCompose(arrow_compose_path, params=dict(PYTHON='3.8'))
    expected_env = PartialEnv(PYTHON="3.8")
    expected_calls = [
        mock.call(["docker", "login", "-u", "user", "-p", "pass"], check=True),
        mock.call(["docker-compose", "--file", str(compose.config_path),
                   "push", "conda-python"], check=True, env=expected_env)
    ]
    with assert_subprocess_calls(expected_calls):
        compose.push('conda-python', user='******', password='******')
Пример #5
0
def test_forwarding_env_variables(arrow_compose_path):
    expected_calls = [
        "pull --ignore-pull-failures conda-cpp",
        "build conda-cpp",
    ]
    expected_env = PartialEnv(MY_CUSTOM_VAR_A='a', MY_CUSTOM_VAR_B='b')
    with override_env({'MY_CUSTOM_VAR_A': 'a', 'MY_CUSTOM_VAR_B': 'b'}):
        compose = DockerCompose(arrow_compose_path)
        with assert_compose_calls(compose, expected_calls, env=expected_env):
            assert os.environ['MY_CUSTOM_VAR_A'] == 'a'
            assert os.environ['MY_CUSTOM_VAR_B'] == 'b'
            compose.build('conda-cpp')
Пример #6
0
def test_compose_build_params(arrow_compose_path):
    expected_calls = [
        "build ubuntu-cpp",
    ]

    compose = DockerCompose(arrow_compose_path, params=dict(UBUNTU='18.04'))
    expected_env = PartialEnv(UBUNTU="18.04")
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.build('ubuntu-cpp')

    compose = DockerCompose(arrow_compose_path, params=dict(UBUNTU='16.04'))
    expected_env = PartialEnv(UBUNTU="16.04")
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.build('ubuntu-cpp')

    expected_calls = [
        "build --no-cache conda-cpp",
        "build --no-cache conda-python",
        "build --no-cache conda-python-pandas",
    ]
    compose = DockerCompose(arrow_compose_path, params=dict(UBUNTU='18.04'))
    expected_env = PartialEnv(PYTHON='3.6', PANDAS='latest')
    with assert_compose_calls(compose, expected_calls, env=expected_env):
        compose.build('conda-python-pandas', use_cache=False)
Пример #7
0
def test_compose_push(arrow_compose_path):
    compose = DockerCompose(arrow_compose_path, params=dict(PYTHON='3.9'))
    expected_env = PartialEnv(PYTHON="3.9")
    expected_calls = [
        mock.call(["docker", "login", "-u", "user", "-p", "pass"], check=True),
    ]
    for image in ["conda-cpp", "conda-python", "conda-python-pandas"]:
        expected_calls.append(
            mock.call([
                "docker-compose", "--file",
                str(compose.config.path), "push", image
            ],
                      check=True,
                      env=expected_env))
    with assert_subprocess_calls(expected_calls):
        compose.push('conda-python-pandas', user='******', password='******')
Пример #8
0
def test_assert_subprocess_calls():
    expected_calls = ["echo Hello", ["echo", "World"]]
    with assert_subprocess_calls(expected_calls):
        subprocess.run(['echo', 'Hello'])
        subprocess.run(['echo', 'World'])

    expected_env = PartialEnv(CUSTOM_ENV_A='a', CUSTOM_ENV_C='c')
    with assert_subprocess_calls(expected_calls, env=expected_env):
        env = {'CUSTOM_ENV_A': 'a', 'CUSTOM_ENV_B': 'b', 'CUSTOM_ENV_C': 'c'}
        subprocess.run(['echo', 'Hello'], env=env)
        subprocess.run(['echo', 'World'], env=env)

    with pytest.raises(AssertionError):
        with assert_subprocess_calls(expected_calls, env=expected_env):
            env = {'CUSTOM_ENV_B': 'b', 'CUSTOM_ENV_C': 'c'}
            subprocess.run(['echo', 'Hello'], env=env)
            subprocess.run(['echo', 'World'], env=env)
Пример #9
0
def test_partial_env():
    assert PartialEnv(a=1, b=2) == {'a': 1, 'b': 2, 'c': 3}
    assert PartialEnv(a=1) == {'a': 1, 'b': 2, 'c': 3}
    assert PartialEnv(a=1, b=2) == {'a': 1, 'b': 2}
    assert PartialEnv(a=1, b=2) != {'b': 2, 'c': 3}
    assert PartialEnv(a=1, b=2) != {'a': 1, 'c': 3}