예제 #1
0
    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"]
예제 #2
0
    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
예제 #3
0
    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
예제 #4
0
 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)
예제 #5
0
    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")
예제 #6
0
 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)