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:
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())
|
||||
}
|
||||
@@ -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'")
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user