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)
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)
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)
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)
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 )
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)
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)