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  }