repo2docker/tests/unit/test_docker.py

65 wiersze
1.7 KiB
Python

"""Tests for docker bits"""
import os
from subprocess import check_output
from unittest.mock import Mock, patch
from repo2docker.docker import DockerEngine
repo_root = os.path.abspath(
os.path.join(os.path.dirname(__file__), os.pardir, os.pardir)
)
def test_git_credential_env():
credential_env = "username=abc\npassword=def"
out = (
check_output(
os.path.join(repo_root, "docker", "git-credential-env"),
env={"GIT_CREDENTIAL_ENV": credential_env},
)
.decode()
.strip()
)
assert out == credential_env
class MockDockerEngine(DockerEngine):
def __init__(self, *args, **kwargs):
self._apiclient = Mock()
def test_docker_push_no_credentials():
engine = MockDockerEngine()
engine.push("image")
assert len(engine._apiclient.method_calls) == 1
engine._apiclient.push.assert_called_once_with("image", stream=True)
def test_docker_push_dict_credentials():
engine = MockDockerEngine()
engine.registry_credentials = {"username": "abc", "password": "def"}
engine.push("image")
assert len(engine._apiclient.method_calls) == 2
engine._apiclient.login.assert_called_once_with(username="abc", password="def")
engine._apiclient.push.assert_called_once_with("image", stream=True)
def test_docker_push_env_credentials():
engine = MockDockerEngine()
with patch.dict(
"os.environ",
{
"CONTAINER_ENGINE_REGISTRY_CREDENTIALS": '{"username": "abc", "password": "def"}'
},
):
engine.push("image")
assert len(engine._apiclient.method_calls) == 2
engine._apiclient.login.assert_called_once_with(username="abc", password="def")
engine._apiclient.push.assert_called_once_with("image", stream=True)