From 596404f3aa593ebb016e20d4b72a28a357cf511f Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 23 Jul 2025 14:48:21 +0200 Subject: [PATCH] integration-cli: remove tests for pre-docker 1.7 clients The strslice.StrSlice type is a string-slice with a custom JSON Unmarshal function to provide backward-compatibility with older API requests from before docker 1.7 (see [moby@17d6f00] and [moby@ea4a067]), which used a string instead of an array of strings for some fields (Cmd, Entrypoint). We no longer support those API versions, and we no longer support pulling v1 images that may contain such a config, so we can remove these tests that validate the behavior as they're invalid API requests. This; - removes DockerAPISuite.TestPostContainerAPICreateWithStringOrSliceEntrypoint - removes DockerAPISuite.TestPostContainersCreateWithStringOrSliceCmd - removes DockerAPISuite.TestPostContainersCreateWithStringOrSliceCapAddDrop - updates DockerAPISuite.TestContainerAPIPostCreateNull, which used an invalid example [moby@17d6f00]: https://github.com/moby/moby/commit/17d6f00ec2b8b9636f0bb64c55a5b3855e8f4bae [moby@ea4a067]: https://github.com/moby/moby/commit/ea4a06740b6d4579f77507c1d7e0897a870fd72d Signed-off-by: Sebastiaan van Stijn (cherry picked from commit 1378604cc389a5a61b5f8219e133edb41381e4e3) Signed-off-by: Sebastiaan van Stijn --- integration-cli/docker_api_containers_test.go | 92 +------------------ 1 file changed, 2 insertions(+), 90 deletions(-) diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go index b3ebf3a786..74da4b313c 100644 --- a/integration-cli/docker_api_containers_test.go +++ b/integration-cli/docker_api_containers_test.go @@ -749,7 +749,7 @@ func (s *DockerAPISuite) TestContainerAPIRestartPolicyDefaultRetryCount(c *testi // Issue 7941 - test to make sure a "null" in JSON is just ignored. // W/o this fix a null in JSON would be parsed into a string var as "null" func (s *DockerAPISuite) TestContainerAPIPostCreateNull(c *testing.T) { - config := `{ + const config = `{ "Hostname":"", "Domainname":"", "Memory":0, @@ -764,7 +764,7 @@ func (s *DockerAPISuite) TestContainerAPIPostCreateNull(c *testing.T) { "OpenStdin":true, "StdinOnce":true, "Env":[], - "Cmd":"ls", + "Cmd":["ls"], "Image":"busybox", "Volumes":{}, "WorkingDir":"", @@ -797,8 +797,6 @@ func (s *DockerAPISuite) TestCreateWithTooLowMemoryLimit(c *testing.T) { testRequires(c, DaemonIsLinux) config := `{ "Image": "busybox", - "Cmd": "ls", - "OpenStdin": true, "HostConfig": { "CpuShares": 100, "Memory": 524287 @@ -1078,92 +1076,6 @@ func (s *DockerAPISuite) TestContainerAPIPostContainerStop(c *testing.T) { assert.NilError(c, waitInspect(containerID, "{{ .State.Running }}", "false", 60*time.Second)) } -// #14170 -func (s *DockerAPISuite) TestPostContainerAPICreateWithStringOrSliceEntrypoint(c *testing.T) { - config := container.Config{ - Image: "busybox", - Entrypoint: []string{"echo"}, - Cmd: []string{"hello", "world"}, - } - - apiClient, err := client.NewClientWithOpts(client.FromEnv) - assert.NilError(c, err) - defer apiClient.Close() - - _, err = apiClient.ContainerCreate(testutil.GetContext(c), &config, &container.HostConfig{}, &network.NetworkingConfig{}, nil, "echotest") - assert.NilError(c, err) - out := cli.DockerCmd(c, "start", "-a", "echotest").Combined() - assert.Equal(c, strings.TrimSpace(out), "hello world") - - config2 := struct { - Image string - Entrypoint string - Cmd []string - }{"busybox", "echo", []string{"hello", "world"}} - _, _, err = request.Post(testutil.GetContext(c), "/containers/create?name=echotest2", request.JSONBody(config2)) - assert.NilError(c, err) - out = cli.DockerCmd(c, "start", "-a", "echotest2").Combined() - assert.Equal(c, strings.TrimSpace(out), "hello world") -} - -// #14170 -func (s *DockerAPISuite) TestPostContainersCreateWithStringOrSliceCmd(c *testing.T) { - config := container.Config{ - Image: "busybox", - Cmd: []string{"echo", "hello", "world"}, - } - - apiClient, err := client.NewClientWithOpts(client.FromEnv) - assert.NilError(c, err) - defer apiClient.Close() - - _, err = apiClient.ContainerCreate(testutil.GetContext(c), &config, &container.HostConfig{}, &network.NetworkingConfig{}, nil, "echotest") - assert.NilError(c, err) - out := cli.DockerCmd(c, "start", "-a", "echotest").Combined() - assert.Equal(c, strings.TrimSpace(out), "hello world") - - config2 := struct { - Image string - Entrypoint string - Cmd string - }{"busybox", "echo", "hello world"} - _, _, err = request.Post(testutil.GetContext(c), "/containers/create?name=echotest2", request.JSONBody(config2)) - assert.NilError(c, err) - out = cli.DockerCmd(c, "start", "-a", "echotest2").Combined() - assert.Equal(c, strings.TrimSpace(out), "hello world") -} - -// regression #14318 -// for backward compatibility testing with and without CAP_ prefix -// and with upper and lowercase -func (s *DockerAPISuite) TestPostContainersCreateWithStringOrSliceCapAddDrop(c *testing.T) { - // Windows doesn't support CapAdd/CapDrop - testRequires(c, DaemonIsLinux) - config := struct { - Image string - CapAdd string - CapDrop string - }{"busybox", "NET_ADMIN", "cap_sys_admin"} - res, _, err := request.Post(testutil.GetContext(c), "/containers/create?name=capaddtest0", request.JSONBody(config)) - assert.NilError(c, err) - assert.Equal(c, res.StatusCode, http.StatusCreated) - - config2 := container.Config{ - Image: "busybox", - } - hostConfig := container.HostConfig{ - CapAdd: []string{"net_admin", "SYS_ADMIN"}, - CapDrop: []string{"SETGID", "CAP_SETPCAP"}, - } - - apiClient, err := client.NewClientWithOpts(client.FromEnv) - assert.NilError(c, err) - defer apiClient.Close() - - _, err = apiClient.ContainerCreate(testutil.GetContext(c), &config2, &hostConfig, &network.NetworkingConfig{}, nil, "capaddtest1") - assert.NilError(c, err) -} - // Ensure an error occurs when you have a container read-only rootfs but you // extract an archive to a symlink in a writable volume which points to a // directory outside of the volume.