From 09de92b891c15bda593cf47617f032d2b0b40605 Mon Sep 17 00:00:00 2001 From: Darren Shepherd Date: Fri, 12 Jun 2015 09:49:53 -0700 Subject: [PATCH] Set omitempty for IP and PublicPort to conform w/ API 1.18 Signed-off-by: Darren Shepherd --- api/types/types.go | 4 +- integration-cli/docker_api_containers_test.go | 40 +++++++++++++++++++ 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/api/types/types.go b/api/types/types.go index 70033d07dd..b885242a2b 100644 --- a/api/types/types.go +++ b/api/types/types.go @@ -94,9 +94,9 @@ type ImageInspect struct { // GET "/containers/json" type Port struct { - IP string + IP string `json:",omitempty"` PrivatePort int - PublicPort int + PublicPort int `json:",omitempty"` Type string } diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go index ae69dfd91a..9f587a80a5 100644 --- a/integration-cli/docker_api_containers_test.go +++ b/integration-cli/docker_api_containers_test.go @@ -9,6 +9,7 @@ import ( "net/http/httputil" "os" "os/exec" + "strconv" "strings" "time" @@ -84,6 +85,45 @@ func (s *DockerSuite) TestContainerApiGetJSONNoFieldsOmitted(c *check.C) { } } +type containerPs struct { + Names []string + Ports []map[string]interface{} +} + +// regression test for non-empty fields from #13901 +func (s *DockerSuite) TestContainerPsOmitFields(c *check.C) { + name := "pstest" + port := 80 + runCmd := exec.Command(dockerBinary, "run", "-d", "--name", name, "--expose", strconv.Itoa(port), "busybox", "sleep", "5") + _, err := runCommand(runCmd) + c.Assert(err, check.IsNil) + + status, body, err := sockRequest("GET", "/containers/json?all=1", nil) + c.Assert(status, check.Equals, http.StatusOK) + c.Assert(err, check.IsNil) + + var resp []containerPs + err = json.Unmarshal(body, &resp) + c.Assert(err, check.IsNil) + + var foundContainer *containerPs + for _, container := range resp { + for _, testName := range container.Names { + if "/"+name == testName { + foundContainer = &container + break + } + } + } + + c.Assert(len(foundContainer.Ports), check.Equals, 1) + c.Assert(foundContainer.Ports[0]["PrivatePort"], check.Equals, float64(port)) + _, ok := foundContainer.Ports[0]["PublicPort"] + c.Assert(ok, check.Not(check.Equals), true) + _, ok = foundContainer.Ports[0]["IP"] + c.Assert(ok, check.Not(check.Equals), true) +} + func (s *DockerSuite) TestContainerApiGetExport(c *check.C) { name := "exportcontainer" runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "touch", "/test")