integration/container: Consolidate legacy inspect API tests

Move the raw inspect response checks from integration-cli into
TestContainerInspectWithRaw.
Share one created container and API 1.24 response to verify legacy
top-level fields, the string Path, and VolumeDriver placement in
HostConfig rather than Config.

Drop the redundant bridge endpoint check because existing network
integration tests already validate and use the inspected address.

Signed-off-by: Jeston Singh <sjestonsingh@gmail.com>
Co-authored-by: Paweł Gronowski <pawel.gronowski@docker.com>
Signed-off-by: Paweł Gronowski <pawel.gronowski@docker.com>
This commit is contained in:
Jeston SinghandPaweł Gronowski authored and Paweł Gronowski committed 2026-10-27 21:37:04 +01:00
1 parent 9d3170875d
commit 420c2de5cf
2 files changed
+36 -92

No files matched your search

@@ -1,91 +0,0 @@
package main
import (
"encoding/json"
"strings"
"testing"
"github.com/moby/moby/api/types/container"
"github.com/moby/moby/v2/integration-cli/cli"
"gotest.tools/v3/assert"
)
func (s *DockerAPISuite) TestInspectAPIContainerResponse(c *testing.T) {
out := cli.DockerCmd(c, "run", "-d", "busybox", "true").Stdout()
cleanedContainerID := strings.TrimSpace(out)
keysBase := []string{
"Id", "State", "Created", "Path", "Args", "Config", "Image", "NetworkSettings",
"ResolvConfPath", "HostnamePath", "HostsPath", "LogPath", "Name", "Driver", "MountLabel", "ProcessLabel", "GraphDriver",
"Mounts",
}
cases := []struct {
version string
keys []string
}{
{version: "v1.24", keys: keysBase},
}
for _, cs := range cases {
body := getInspectBody(c, cs.version, cleanedContainerID)
var inspectJSON map[string]any
err := json.Unmarshal(body, &inspectJSON)
assert.NilError(c, err, "Unable to unmarshal body for version %s", cs.version)
for _, key := range cs.keys {
_, ok := inspectJSON[key]
assert.Check(c, ok, "%s does not exist in response for version %s", key, cs.version)
}
// Issue #6830: type not properly converted to JSON/back
_, ok := inspectJSON["Path"].(bool)
assert.Assert(c, !ok, "Path of `true` should not be converted to boolean `true` via JSON marshalling")
}
}
func (s *DockerAPISuite) TestInspectAPIContainerVolumeDriver(c *testing.T) {
out := cli.DockerCmd(c, "run", "-d", "--volume-driver", "local", "busybox", "true").Stdout()
cleanedContainerID := strings.TrimSpace(out)
body := getInspectBody(c, "v1.25", cleanedContainerID)
var inspectJSON map[string]any
err := json.Unmarshal(body, &inspectJSON)
assert.NilError(c, err, "Unable to unmarshal body for version 1.25")
config, ok := inspectJSON["Config"]
assert.Assert(c, ok, "Unable to find 'Config'")
cfg := config.(map[string]any)
_, ok = cfg["VolumeDriver"]
assert.Assert(c, !ok, "API version 1.25 expected to not include VolumeDriver in 'Config'")
config, ok = inspectJSON["HostConfig"]
assert.Assert(c, ok, "Unable to find 'HostConfig'")
cfg = config.(map[string]any)
_, ok = cfg["VolumeDriver"]
assert.Assert(c, ok, "API version 1.25 expected to include VolumeDriver in 'HostConfig'")
}
// Inspect for API v1.21 and up; see
//
// - https://github.com/moby/moby/issues/17131
// - https://github.com/moby/moby/issues/17139
// - https://github.com/moby/moby/issues/17173
func (s *DockerAPISuite) TestInspectAPIBridgeNetworkSettings121(c *testing.T) {
// Windows doesn't have any bridge network settings
testRequires(c, DaemonIsLinux)
out := cli.DockerCmd(c, "run", "-d", "busybox", "top").Stdout()
containerID := strings.TrimSpace(out)
cli.WaitRun(c, containerID)
body := getInspectBody(c, "", containerID)
var inspectJSON container.InspectResponse
err := json.Unmarshal(body, &inspectJSON)
assert.NilError(c, err)
settings := inspectJSON.NetworkSettings
assert.Assert(c, settings.Networks["bridge"] != nil)
assert.Assert(c, settings.Networks["bridge"].IPAddress.IsValid())
}
+36 -1
View File
@@ -148,7 +148,9 @@ func TestContainerInspectWithRaw(t *testing.T) {
ctx := setupTest(t)
apiClient := request.NewAPIClient(t)
ctrID := container.Create(ctx, t, apiClient)
ctrID := container.Create(ctx, t, apiClient, container.WithCmd("true"), func(c *container.TestContainerConfig) {
c.HostConfig.VolumeDriver = "local"
})
defer apiClient.ContainerRemove(ctx, ctrID, client.ContainerRemoveOptions{Force: true})
tests := []struct {
@@ -205,4 +207,37 @@ func TestContainerInspectWithRaw(t *testing.T) {
}
})
}
t.Run("API 1.24 compatibility", func(t *testing.T) {
// Older API versions include GraphDriver even when using a snapshotter.
oldClient := request.NewAPIClient(t, client.WithAPIVersion("1.24"))
inspect, err := oldClient.ContainerInspect(ctx, ctrID, client.ContainerInspectOptions{})
assert.NilError(t, err)
var rawInspect map[string]any
err = json.Unmarshal(inspect.Raw, &rawInspect)
assert.NilError(t, err)
for _, key := range []string{
"Id", "State", "Created", "Path", "Args", "Config", "Image", "NetworkSettings",
"ResolvConfPath", "HostnamePath", "HostsPath", "LogPath", "Name", "Driver",
"MountLabel", "ProcessLabel", "GraphDriver", "Mounts",
} {
_, ok := rawInspect[key]
assert.Check(t, ok, "%s does not exist in response", key)
}
// Issue #6830: type not properly converted to JSON/back
assert.Check(t, is.Equal(rawInspect["Path"], "true"), "Path should be the string \"true\", not a boolean")
config, ok := rawInspect["Config"].(map[string]any)
assert.Assert(t, ok, "Unable to find 'Config' object")
_, ok = config["VolumeDriver"]
assert.Check(t, !ok, "Expected to not include VolumeDriver in 'Config'")
hostConfig, ok := rawInspect["HostConfig"].(map[string]any)
assert.Assert(t, ok, "Unable to find 'HostConfig' object")
assert.Check(t, is.Equal(hostConfig["VolumeDriver"], "local"), "Expected to include VolumeDriver in 'HostConfig'")
})
}