Esempio n. 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)
Esempio n. 2
0
def test_image_with_gpu(arrow_compose_path):
    compose = DockerCompose(arrow_compose_path)

    expected_calls = [[
        "run", "--rm", "--gpus", "all", "-e", "CUDA_ENV=1", "-e",
        "OTHER_ENV=2", "-v", "/host:/container:rw", "org/ubuntu-cuda",
        '/bin/bash -c "echo 1 > /tmp/dummy && cat /tmp/dummy"'
    ]]
    with assert_docker_calls(compose, expected_calls):
        compose.run('ubuntu-cuda')
Esempio n. 3
0
def test_image_with_gpu(arrow_compose_path):
    compose = DockerCompose(arrow_compose_path)

    expected_calls = [[
        "run", "--rm", "-it", "--gpus", "all", "-e", "CUDA_ENV=1", "-e",
        "OTHER_ENV=2", "-v", "/host:/container:rw", "dummy-cuda", "/bin/bash",
        "-c", "echo 1 > /tmp/dummy && cat /tmp/dummy"
    ]]
    with assert_docker_calls(compose, expected_calls):
        compose.run('ubuntu-cuda', force_pull=False, force_build=False)
Esempio n. 4
0
def test_compose_run_with_resource_limits(arrow_compose_path):
    expected_calls = [
        format_run([
            "--cpuset-cpus=0,1", "--memory=7g", "--memory-swap=7g",
            "org/conda-cpp"
        ]),
    ]
    compose = DockerCompose(arrow_compose_path)
    with assert_docker_calls(compose, expected_calls):
        compose.run('conda-cpp', resource_limit="github")
Esempio n. 5
0
def test_compose_error(arrow_compose_path):
    compose = DockerCompose(arrow_compose_path,
                            params=dict(PYTHON='3.8', PANDAS='master'))

    error = subprocess.CalledProcessError(99, [])
    with mock.patch('subprocess.run', side_effect=error):
        with pytest.raises(RuntimeError) as exc:
            compose.run('conda-cpp')

    exception_message = str(exc.value)
    assert "exited with a non-zero exit code 99" in exception_message
    assert "PANDAS: latest" in exception_message
    assert "export PANDAS=master" in exception_message
Esempio n. 6
0
def test_compose_run_force_pull_and_build(arrow_compose_path):
    compose = DockerCompose(arrow_compose_path)

    expected_calls = [
        "pull --ignore-pull-failures conda-cpp",
        format_run("conda-cpp")
    ]
    with assert_compose_calls(compose, expected_calls):
        compose.run('conda-cpp', force_pull=True)

    expected_calls = [
        "build conda-cpp",
        format_run("conda-cpp")
    ]
    with assert_compose_calls(compose, expected_calls):
        compose.run('conda-cpp', force_build=True)

    expected_calls = [
        "pull --ignore-pull-failures conda-cpp",
        "build conda-cpp",
        format_run("conda-cpp")
    ]
    with assert_compose_calls(compose, expected_calls):
        compose.run('conda-cpp', force_pull=True, force_build=True)

    expected_calls = [
        "pull --ignore-pull-failures conda-cpp",
        "pull --ignore-pull-failures conda-python",
        "pull --ignore-pull-failures conda-python-pandas",
        "build conda-cpp",
        "build conda-python",
        "build conda-python-pandas",
        format_run("conda-python-pandas bash")
    ]
    with assert_compose_calls(compose, expected_calls):
        compose.run('conda-python-pandas', command='bash', force_build=True,
                    force_pull=True)

    expected_calls = [
        "pull --ignore-pull-failures conda-cpp",
        "pull --ignore-pull-failures conda-python",
        "build conda-cpp",
        "build conda-python",
        "build --no-cache conda-python-pandas",
        format_run("conda-python-pandas bash")
    ]
    with assert_compose_calls(compose, expected_calls):
        compose.run('conda-python-pandas', command='bash', force_build=True,
                    force_pull=True, use_leaf_cache=False)
Esempio n. 7
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)