github.com/rita33cool1/iot-system-gateway@v0.0.0-20200911033302-e65bde238cc5/docker-engine/integration-cli/docker_api_inspect_test.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "strings" 6 7 "golang.org/x/net/context" 8 9 "github.com/docker/docker/api/types" 10 "github.com/docker/docker/api/types/versions/v1p20" 11 "github.com/docker/docker/client" 12 "github.com/docker/docker/integration-cli/checker" 13 "github.com/go-check/check" 14 "github.com/gotestyourself/gotestyourself/assert" 15 is "github.com/gotestyourself/gotestyourself/assert/cmp" 16 ) 17 18 func (s *DockerSuite) TestInspectAPIContainerResponse(c *check.C) { 19 out, _ := dockerCmd(c, "run", "-d", "busybox", "true") 20 21 cleanedContainerID := strings.TrimSpace(out) 22 keysBase := []string{"Id", "State", "Created", "Path", "Args", "Config", "Image", "NetworkSettings", 23 "ResolvConfPath", "HostnamePath", "HostsPath", "LogPath", "Name", "Driver", "MountLabel", "ProcessLabel", "GraphDriver"} 24 25 type acase struct { 26 version string 27 keys []string 28 } 29 30 var cases []acase 31 32 if testEnv.OSType == "windows" { 33 cases = []acase{ 34 {"v1.25", append(keysBase, "Mounts")}, 35 } 36 37 } else { 38 cases = []acase{ 39 {"v1.20", append(keysBase, "Mounts")}, 40 {"v1.19", append(keysBase, "Volumes", "VolumesRW")}, 41 } 42 } 43 44 for _, cs := range cases { 45 body := getInspectBody(c, cs.version, cleanedContainerID) 46 47 var inspectJSON map[string]interface{} 48 err := json.Unmarshal(body, &inspectJSON) 49 c.Assert(err, checker.IsNil, check.Commentf("Unable to unmarshal body for version %s", cs.version)) 50 51 for _, key := range cs.keys { 52 _, ok := inspectJSON[key] 53 c.Check(ok, checker.True, check.Commentf("%s does not exist in response for version %s", key, cs.version)) 54 } 55 56 //Issue #6830: type not properly converted to JSON/back 57 _, ok := inspectJSON["Path"].(bool) 58 c.Assert(ok, checker.False, check.Commentf("Path of `true` should not be converted to boolean `true` via JSON marshalling")) 59 } 60 } 61 62 func (s *DockerSuite) TestInspectAPIContainerVolumeDriverLegacy(c *check.C) { 63 // No legacy implications for Windows 64 testRequires(c, DaemonIsLinux) 65 out, _ := dockerCmd(c, "run", "-d", "busybox", "true") 66 67 cleanedContainerID := strings.TrimSpace(out) 68 69 cases := []string{"v1.19", "v1.20"} 70 for _, version := range cases { 71 body := getInspectBody(c, version, cleanedContainerID) 72 73 var inspectJSON map[string]interface{} 74 err := json.Unmarshal(body, &inspectJSON) 75 c.Assert(err, checker.IsNil, check.Commentf("Unable to unmarshal body for version %s", version)) 76 77 config, ok := inspectJSON["Config"] 78 c.Assert(ok, checker.True, check.Commentf("Unable to find 'Config'")) 79 cfg := config.(map[string]interface{}) 80 _, ok = cfg["VolumeDriver"] 81 c.Assert(ok, checker.True, check.Commentf("API version %s expected to include VolumeDriver in 'Config'", version)) 82 } 83 } 84 85 func (s *DockerSuite) TestInspectAPIContainerVolumeDriver(c *check.C) { 86 out, _ := dockerCmd(c, "run", "-d", "--volume-driver", "local", "busybox", "true") 87 88 cleanedContainerID := strings.TrimSpace(out) 89 90 body := getInspectBody(c, "v1.25", cleanedContainerID) 91 92 var inspectJSON map[string]interface{} 93 err := json.Unmarshal(body, &inspectJSON) 94 c.Assert(err, checker.IsNil, check.Commentf("Unable to unmarshal body for version 1.25")) 95 96 config, ok := inspectJSON["Config"] 97 c.Assert(ok, checker.True, check.Commentf("Unable to find 'Config'")) 98 cfg := config.(map[string]interface{}) 99 _, ok = cfg["VolumeDriver"] 100 c.Assert(ok, checker.False, check.Commentf("API version 1.25 expected to not include VolumeDriver in 'Config'")) 101 102 config, ok = inspectJSON["HostConfig"] 103 c.Assert(ok, checker.True, check.Commentf("Unable to find 'HostConfig'")) 104 cfg = config.(map[string]interface{}) 105 _, ok = cfg["VolumeDriver"] 106 c.Assert(ok, checker.True, check.Commentf("API version 1.25 expected to include VolumeDriver in 'HostConfig'")) 107 } 108 109 func (s *DockerSuite) TestInspectAPIImageResponse(c *check.C) { 110 dockerCmd(c, "tag", "busybox:latest", "busybox:mytag") 111 cli, err := client.NewEnvClient() 112 c.Assert(err, checker.IsNil) 113 defer cli.Close() 114 115 imageJSON, _, err := cli.ImageInspectWithRaw(context.Background(), "busybox") 116 c.Assert(err, checker.IsNil) 117 118 c.Assert(imageJSON.RepoTags, checker.HasLen, 2) 119 assert.Check(c, is.Contains(imageJSON.RepoTags, "busybox:latest")) 120 assert.Check(c, is.Contains(imageJSON.RepoTags, "busybox:mytag")) 121 } 122 123 // #17131, #17139, #17173 124 func (s *DockerSuite) TestInspectAPIEmptyFieldsInConfigPre121(c *check.C) { 125 // Not relevant on Windows 126 testRequires(c, DaemonIsLinux) 127 out, _ := dockerCmd(c, "run", "-d", "busybox", "true") 128 129 cleanedContainerID := strings.TrimSpace(out) 130 131 cases := []string{"v1.19", "v1.20"} 132 for _, version := range cases { 133 body := getInspectBody(c, version, cleanedContainerID) 134 135 var inspectJSON map[string]interface{} 136 err := json.Unmarshal(body, &inspectJSON) 137 c.Assert(err, checker.IsNil, check.Commentf("Unable to unmarshal body for version %s", version)) 138 config, ok := inspectJSON["Config"] 139 c.Assert(ok, checker.True, check.Commentf("Unable to find 'Config'")) 140 cfg := config.(map[string]interface{}) 141 for _, f := range []string{"MacAddress", "NetworkDisabled", "ExposedPorts"} { 142 _, ok := cfg[f] 143 c.Check(ok, checker.True, check.Commentf("API version %s expected to include %s in 'Config'", version, f)) 144 } 145 } 146 } 147 148 func (s *DockerSuite) TestInspectAPIBridgeNetworkSettings120(c *check.C) { 149 // Not relevant on Windows, and besides it doesn't have any bridge network settings 150 testRequires(c, DaemonIsLinux) 151 out, _ := dockerCmd(c, "run", "-d", "busybox", "top") 152 containerID := strings.TrimSpace(out) 153 waitRun(containerID) 154 155 body := getInspectBody(c, "v1.20", containerID) 156 157 var inspectJSON v1p20.ContainerJSON 158 err := json.Unmarshal(body, &inspectJSON) 159 c.Assert(err, checker.IsNil) 160 161 settings := inspectJSON.NetworkSettings 162 c.Assert(settings.IPAddress, checker.Not(checker.HasLen), 0) 163 } 164 165 func (s *DockerSuite) TestInspectAPIBridgeNetworkSettings121(c *check.C) { 166 // Windows doesn't have any bridge network settings 167 testRequires(c, DaemonIsLinux) 168 out, _ := dockerCmd(c, "run", "-d", "busybox", "top") 169 containerID := strings.TrimSpace(out) 170 waitRun(containerID) 171 172 body := getInspectBody(c, "v1.21", containerID) 173 174 var inspectJSON types.ContainerJSON 175 err := json.Unmarshal(body, &inspectJSON) 176 c.Assert(err, checker.IsNil) 177 178 settings := inspectJSON.NetworkSettings 179 c.Assert(settings.IPAddress, checker.Not(checker.HasLen), 0) 180 c.Assert(settings.Networks["bridge"], checker.Not(checker.IsNil)) 181 c.Assert(settings.IPAddress, checker.Equals, settings.Networks["bridge"].IPAddress) 182 }