summaryrefslogtreecommitdiff
path: root/tests/unit/fake_api_client.py
blob: 1663ef1273ebfa227cc954f0774c7c3cc2d697fa (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import copy

import docker
from docker.constants import DEFAULT_DOCKER_API_VERSION
from . import fake_api

try:
    from unittest import mock
except ImportError:
    from unittest import mock


class CopyReturnMagicMock(mock.MagicMock):
    """
    A MagicMock which deep copies every return value.
    """
    def _mock_call(self, *args, **kwargs):
        ret = super()._mock_call(*args, **kwargs)
        if isinstance(ret, (dict, list)):
            ret = copy.deepcopy(ret)
        return ret


def make_fake_api_client(overrides=None):
    """
    Returns non-complete fake APIClient.

    This returns most of the default cases correctly, but most arguments that
    change behaviour will not work.
    """

    if overrides is None:
        overrides = {}
    api_client = docker.APIClient(version=DEFAULT_DOCKER_API_VERSION)
    mock_attrs = {
        'build.return_value': fake_api.FAKE_IMAGE_ID,
        'commit.return_value': fake_api.post_fake_commit()[1],
        'containers.return_value': fake_api.get_fake_containers()[1],
        'create_container.return_value':
            fake_api.post_fake_create_container()[1],
        'create_host_config.side_effect': api_client.create_host_config,
        'create_network.return_value': fake_api.post_fake_network()[1],
        'create_secret.return_value': fake_api.post_fake_secret()[1],
        'exec_create.return_value': fake_api.post_fake_exec_create()[1],
        'exec_start.return_value': fake_api.post_fake_exec_start()[1],
        'images.return_value': fake_api.get_fake_images()[1],
        'inspect_container.return_value':
            fake_api.get_fake_inspect_container()[1],
        'inspect_image.return_value': fake_api.get_fake_inspect_image()[1],
        'inspect_network.return_value': fake_api.get_fake_network()[1],
        'logs.return_value': [b'hello world\n'],
        'networks.return_value': fake_api.get_fake_network_list()[1],
        'start.return_value': None,
        'wait.return_value': {'StatusCode': 0},
        'version.return_value': fake_api.get_fake_version()
    }
    mock_attrs.update(overrides)
    mock_client = CopyReturnMagicMock(**mock_attrs)

    mock_client._version = docker.constants.DEFAULT_DOCKER_API_VERSION
    return mock_client


def make_fake_client(overrides=None):
    """
    Returns a Client with a fake APIClient.
    """
    client = docker.DockerClient(version=DEFAULT_DOCKER_API_VERSION)
    client.api = make_fake_api_client(overrides)
    return client