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