github.com/moby/docker@v26.1.3+incompatible/integration-cli/docker_api_inspect_test.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "strings" 6 "testing" 7 8 "github.com/docker/docker/api/types" 9 "github.com/docker/docker/client" 10 "github.com/docker/docker/integration-cli/cli" 11 "github.com/docker/docker/testutil" 12 "gotest.tools/v3/assert" 13 is "gotest.tools/v3/assert/cmp" 14 ) 15 16 func (s *DockerAPISuite) TestInspectAPIContainerResponse(c *testing.T) { 17 out := cli.DockerCmd(c, "run", "-d", "busybox", "true").Stdout() 18 cleanedContainerID := strings.TrimSpace(out) 19 20 keysBase := []string{ 21 "Id", "State", "Created", "Path", "Args", "Config", "Image", "NetworkSettings", 22 "ResolvConfPath", "HostnamePath", "HostsPath", "LogPath", "Name", "Driver", "MountLabel", "ProcessLabel", "GraphDriver", 23 "Mounts", 24 } 25 26 cases := []struct { 27 version string 28 keys []string 29 }{ 30 {version: "v1.24", keys: keysBase}, 31 } 32 for _, cs := range cases { 33 body := getInspectBody(c, cs.version, cleanedContainerID) 34 35 var inspectJSON map[string]interface{} 36 err := json.Unmarshal(body, &inspectJSON) 37 assert.NilError(c, err, "Unable to unmarshal body for version %s", cs.version) 38 39 for _, key := range cs.keys { 40 _, ok := inspectJSON[key] 41 assert.Check(c, ok, "%s does not exist in response for version %s", key, cs.version) 42 } 43 44 // Issue #6830: type not properly converted to JSON/back 45 _, ok := inspectJSON["Path"].(bool) 46 assert.Assert(c, !ok, "Path of `true` should not be converted to boolean `true` via JSON marshalling") 47 } 48 } 49 50 func (s *DockerAPISuite) TestInspectAPIContainerVolumeDriver(c *testing.T) { 51 out := cli.DockerCmd(c, "run", "-d", "--volume-driver", "local", "busybox", "true").Stdout() 52 cleanedContainerID := strings.TrimSpace(out) 53 54 body := getInspectBody(c, "v1.25", cleanedContainerID) 55 56 var inspectJSON map[string]interface{} 57 err := json.Unmarshal(body, &inspectJSON) 58 assert.NilError(c, err, "Unable to unmarshal body for version 1.25") 59 60 config, ok := inspectJSON["Config"] 61 assert.Assert(c, ok, "Unable to find 'Config'") 62 cfg := config.(map[string]interface{}) 63 _, ok = cfg["VolumeDriver"] 64 assert.Assert(c, !ok, "API version 1.25 expected to not include VolumeDriver in 'Config'") 65 66 config, ok = inspectJSON["HostConfig"] 67 assert.Assert(c, ok, "Unable to find 'HostConfig'") 68 cfg = config.(map[string]interface{}) 69 _, ok = cfg["VolumeDriver"] 70 assert.Assert(c, ok, "API version 1.25 expected to include VolumeDriver in 'HostConfig'") 71 } 72 73 func (s *DockerAPISuite) TestInspectAPIImageResponse(c *testing.T) { 74 cli.DockerCmd(c, "tag", "busybox:latest", "busybox:mytag") 75 apiClient, err := client.NewClientWithOpts(client.FromEnv) 76 assert.NilError(c, err) 77 defer apiClient.Close() 78 79 imageJSON, _, err := apiClient.ImageInspectWithRaw(testutil.GetContext(c), "busybox") 80 assert.NilError(c, err) 81 82 assert.Check(c, len(imageJSON.RepoTags) == 2) 83 assert.Check(c, is.Contains(imageJSON.RepoTags, "busybox:latest")) 84 assert.Check(c, is.Contains(imageJSON.RepoTags, "busybox:mytag")) 85 } 86 87 // Inspect for API v1.21 and up; see 88 // 89 // - https://github.com/moby/moby/issues/17131 90 // - https://github.com/moby/moby/issues/17139 91 // - https://github.com/moby/moby/issues/17173 92 func (s *DockerAPISuite) TestInspectAPIBridgeNetworkSettings121(c *testing.T) { 93 // Windows doesn't have any bridge network settings 94 testRequires(c, DaemonIsLinux) 95 out := cli.DockerCmd(c, "run", "-d", "busybox", "top").Stdout() 96 containerID := strings.TrimSpace(out) 97 cli.WaitRun(c, containerID) 98 99 body := getInspectBody(c, "", containerID) 100 101 var inspectJSON types.ContainerJSON 102 err := json.Unmarshal(body, &inspectJSON) 103 assert.NilError(c, err) 104 105 settings := inspectJSON.NetworkSettings 106 assert.Assert(c, len(settings.IPAddress) != 0) 107 assert.Assert(c, settings.Networks["bridge"] != nil) 108 assert.Equal(c, settings.IPAddress, settings.Networks["bridge"].IPAddress) 109 }