def test_list_containers_filter(self, docker_client: DockerClient, create_container): name_prefix = "filter_tests_" cn1 = name_prefix + _random_container_name() cn2 = name_prefix + _random_container_name() cn3 = name_prefix + _random_container_name() c1 = create_container("alpine", name=cn1, command=["echo", "1"]) c2 = create_container("alpine", name=cn2, command=["echo", "2"]) c3 = create_container("alpine", name=cn3, command=["echo", "3"]) # per id container_list = docker_client.list_containers(filter=f"id={c2.container_id}") assert 1 == len(container_list) assert c2.container_id.startswith(container_list[0]["id"]) assert c2.container_name == container_list[0]["name"] assert "created" == container_list[0]["status"] # per name pattern container_list = docker_client.list_containers(filter=f"name={name_prefix}") assert 3 == len(container_list) image_names = [info["name"] for info in container_list] assert c1.container_name in image_names assert c2.container_name in image_names assert c3.container_name in image_names # multiple patterns container_list = docker_client.list_containers( filter=[ f"id={c1.container_id}", f"name={container_name_prefix}", ] ) assert 1 == len(container_list) assert c1.container_name == container_list[0]["name"]
def test_create_container_remove_removes_container( self, docker_client: DockerClient, create_container ): info = create_container("alpine", remove=True, command=["echo", "foobar"]) # make sure it was correctly created assert 1 == len(docker_client.list_containers(f"id={info.container_id}")) # start the container # TODO: how should interactive behave if there is no tty? output, _ = docker_client.start_container(info.container_id, interactive=True) output = output.decode(config.DEFAULT_ENCODING) assert 0 == len(docker_client.list_containers(f"id={info.container_id}")) # it takes a while for it to be removed assert "foobar" in output
def test_list_containers(self, docker_client: DockerClient, create_container): c1 = create_container("alpine", command=["echo", "1"]) c2 = create_container("alpine", command=["echo", "2"]) c3 = create_container("alpine", command=["echo", "3"]) container_list = docker_client.list_containers() assert len(container_list) >= 3 image_names = [info["name"] for info in container_list] assert c1.container_name in image_names assert c2.container_name in image_names assert c3.container_name in image_names
def test_list_containers(self, run_mock): test_container = { "id": "00000000a1", "image": "localstack/localstack", "name": "localstack_main", "labels": "authors=LocalStack Contributors", "status": "running", } run_mock.return_value = json.dumps(test_container) docker_client = CmdDockerClient() container_list = docker_client.list_containers() call_arguments = run_mock.call_args[0][0] LOG.info("Intercepted call arguments: %s", call_arguments) self.assertEqual(test_container, container_list[0]) self.assertTrue(list_in(self._docker_cmd() + ["ps"], call_arguments)) self.assertIn("-a", call_arguments) self.assertIn("--format", call_arguments)
def test_list_containers_filter_illegal_filter(self, docker_client: DockerClient): # FIXME: define behavior with pytest.raises(ContainerException) as ex: docker_client.list_containers(filter="illegalfilter=foobar") assert ex.match("Invalid filter")
def test_list_containers_filter_non_existing(self, docker_client: DockerClient): container_list = docker_client.list_containers(filter="id=DOES_NOT_EXST") assert 0 == len(container_list)