示例#1
0
 def test_run_container_error(self, docker_client: DockerClient):
     container_name = _random_container_name()
     try:
         with pytest.raises(ContainerException) as ex:
             docker_client.run_container(
                 "alpine",
                 name=container_name,
                 command=["./doesnotexist"],
             )
         assert ex.match("doesnotexist: no such file or directory")
     finally:
         docker_client.remove_container(container_name)
示例#2
0
 def test_run_container(self, docker_client: DockerClient):
     container_name = _random_container_name()
     try:
         output, _ = docker_client.run_container(
             "alpine",
             name=container_name,
             command=["echo", "foobared"],
         )
         output = output.decode(config.DEFAULT_ENCODING)
         assert "foobared" in output
     finally:
         docker_client.remove_container(container_name)
示例#3
0
    def test_run_container_with_stdin(self, docker_client: DockerClient):
        container_name = _random_container_name()
        message = "test_message_stdin"
        try:
            output, _ = docker_client.run_container(
                "alpine",
                name=container_name,
                interactive=True,
                stdin=message.encode(config.DEFAULT_ENCODING),
                command=["cat"],
            )

            assert message == output.decode(config.DEFAULT_ENCODING).strip()
        finally:
            docker_client.remove_container(container_name)
示例#4
0
    def test_run_detached_with_logs(self, docker_client: DockerClient):
        container_name = _random_container_name()
        message = "test_message"
        try:
            output, _ = docker_client.run_container(
                "alpine",
                name=container_name,
                detach=True,
                command=["echo", message],
            )
            container_id = output.decode(config.DEFAULT_ENCODING).strip()
            logs = docker_client.get_container_logs(container_id)

            assert message == logs.strip()
        finally:
            docker_client.remove_container(container_name)
示例#5
0
    def test_container_lifecycle_commands(self, docker_client: DockerClient):
        container_name = _random_container_name()
        output = docker_client.create_container(
            "alpine",
            name=container_name,
            command=["sh", "-c", "for i in `seq 30`; do sleep 1; echo $i; done"],
        )
        container_id = output.strip()
        assert container_id

        try:
            docker_client.start_container(container_id)
            assert DockerContainerStatus.UP == docker_client.get_container_status(container_name)
            docker_client.stop_container(container_id)
            assert DockerContainerStatus.DOWN == docker_client.get_container_status(container_name)
        finally:
            docker_client.remove_container(container_id)

        assert DockerContainerStatus.NON_EXISTENT == docker_client.get_container_status(
            container_name
        )
示例#6
0
def create_container(docker_client: DockerClient):
    """
    Uses the factory as fixture pattern to wrap DockerClient.create_container as a factory that
    removes the containers after the fixture is cleaned up.
    """
    containers = list()

    def _create_container(image_name: str, **kwargs):
        kwargs["name"] = kwargs.get("name", _random_container_name())
        cid = docker_client.create_container(image_name, **kwargs)
        cid = cid.strip()
        containers.append(cid)
        return ContainerInfo(cid, kwargs["name"])  # FIXME name should come from docker_client

    yield _create_container

    for c in containers:
        try:
            docker_client.remove_container(c)
        except Exception:
            LOG.warning("failed to remove test container %s", c)
示例#7
0
 def test_remove_non_existing_container(self, docker_client: DockerClient):
     with pytest.raises(NoSuchContainer):
         docker_client.remove_container("this_container_does_not_exist", force=False)