Преглед на файлове

Set omitempty for IP and PublicPort to conform w/ API 1.18

Signed-off-by: Darren Shepherd <darren@rancher.com>
Darren Shepherd преди 10 години
родител
ревизия
09de92b891
променени са 2 файла, в които са добавени 42 реда и са изтрити 2 реда
  1. 2 2
      api/types/types.go
  2. 40 0
      integration-cli/docker_api_containers_test.go

+ 2 - 2
api/types/types.go

@@ -94,9 +94,9 @@ type ImageInspect struct {
 
 
 // GET  "/containers/json"
 // GET  "/containers/json"
 type Port struct {
 type Port struct {
-	IP          string
+	IP          string `json:",omitempty"`
 	PrivatePort int
 	PrivatePort int
-	PublicPort  int
+	PublicPort  int `json:",omitempty"`
 	Type        string
 	Type        string
 }
 }
 
 

+ 40 - 0
integration-cli/docker_api_containers_test.go

@@ -9,6 +9,7 @@ import (
 	"net/http/httputil"
 	"net/http/httputil"
 	"os"
 	"os"
 	"os/exec"
 	"os/exec"
+	"strconv"
 	"strings"
 	"strings"
 	"time"
 	"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) {
 func (s *DockerSuite) TestContainerApiGetExport(c *check.C) {
 	name := "exportcontainer"
 	name := "exportcontainer"
 	runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "touch", "/test")
 	runCmd := exec.Command(dockerBinary, "run", "--name", name, "busybox", "touch", "/test")