def assert_compose_calls(compose, expected_args, env=mock.ANY): base_command = ['docker-compose', '--file', str(compose.config_path)] expected_commands = [] for args in expected_args: if isinstance(args, str): args = re.split(r"\s", args) expected_commands.append(base_command + args) return assert_subprocess_calls(expected_commands, check=True, env=env)
def assert_docker_calls(compose, expected_args): base_command = ['docker'] expected_commands = [] for args in expected_args: if isinstance(args, str): args = re.split(r"\s", args) expected_commands.append(base_command + args) return assert_subprocess_calls(expected_commands, check=True)
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)
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='******')
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='******')