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