github.com/nullne/docker@v1.13.0-rc1/integration-cli/docker_cli_info_test.go (about) 1 package main 2 3 import ( 4 "encoding/json" 5 "fmt" 6 "net" 7 "strings" 8 9 "github.com/docker/docker/pkg/integration/checker" 10 "github.com/go-check/check" 11 ) 12 13 // ensure docker info succeeds 14 func (s *DockerSuite) TestInfoEnsureSucceeds(c *check.C) { 15 out, _ := dockerCmd(c, "info") 16 17 // always shown fields 18 stringsToCheck := []string{ 19 "ID:", 20 "Containers:", 21 " Running:", 22 " Paused:", 23 " Stopped:", 24 "Images:", 25 "OSType:", 26 "Architecture:", 27 "Logging Driver:", 28 "Operating System:", 29 "CPUs:", 30 "Total Memory:", 31 "Kernel Version:", 32 "Storage Driver:", 33 "Volume:", 34 "Network:", 35 "Live Restore Enabled:", 36 } 37 38 if daemonPlatform == "linux" { 39 stringsToCheck = append(stringsToCheck, "Init Binary:", "Security Options:", "containerd version:", "runc version:", "init version:") 40 } 41 42 if DaemonIsLinux.Condition() { 43 stringsToCheck = append(stringsToCheck, "Runtimes:", "Default Runtime: runc") 44 } 45 46 if experimentalDaemon { 47 stringsToCheck = append(stringsToCheck, "Experimental: true") 48 } else { 49 stringsToCheck = append(stringsToCheck, "Experimental: false") 50 } 51 52 for _, linePrefix := range stringsToCheck { 53 c.Assert(out, checker.Contains, linePrefix, check.Commentf("couldn't find string %v in output", linePrefix)) 54 } 55 } 56 57 // TestInfoFormat tests `docker info --format` 58 func (s *DockerSuite) TestInfoFormat(c *check.C) { 59 out, status := dockerCmd(c, "info", "--format", "{{json .}}") 60 c.Assert(status, checker.Equals, 0) 61 var m map[string]interface{} 62 err := json.Unmarshal([]byte(out), &m) 63 c.Assert(err, checker.IsNil) 64 _, _, err = dockerCmdWithError("info", "--format", "{{.badString}}") 65 c.Assert(err, checker.NotNil) 66 } 67 68 // TestInfoDiscoveryBackend verifies that a daemon run with `--cluster-advertise` and 69 // `--cluster-store` properly show the backend's endpoint in info output. 70 func (s *DockerSuite) TestInfoDiscoveryBackend(c *check.C) { 71 testRequires(c, SameHostDaemon, DaemonIsLinux) 72 73 d := NewDaemon(c) 74 discoveryBackend := "consul://consuladdr:consulport/some/path" 75 discoveryAdvertise := "1.1.1.1:2375" 76 err := d.Start(fmt.Sprintf("--cluster-store=%s", discoveryBackend), fmt.Sprintf("--cluster-advertise=%s", discoveryAdvertise)) 77 c.Assert(err, checker.IsNil) 78 defer d.Stop() 79 80 out, err := d.Cmd("info") 81 c.Assert(err, checker.IsNil) 82 c.Assert(out, checker.Contains, fmt.Sprintf("Cluster Store: %s\n", discoveryBackend)) 83 c.Assert(out, checker.Contains, fmt.Sprintf("Cluster Advertise: %s\n", discoveryAdvertise)) 84 } 85 86 // TestInfoDiscoveryInvalidAdvertise verifies that a daemon run with 87 // an invalid `--cluster-advertise` configuration 88 func (s *DockerSuite) TestInfoDiscoveryInvalidAdvertise(c *check.C) { 89 testRequires(c, SameHostDaemon, DaemonIsLinux) 90 91 d := NewDaemon(c) 92 discoveryBackend := "consul://consuladdr:consulport/some/path" 93 94 // --cluster-advertise with an invalid string is an error 95 err := d.Start(fmt.Sprintf("--cluster-store=%s", discoveryBackend), "--cluster-advertise=invalid") 96 c.Assert(err, checker.Not(checker.IsNil)) 97 98 // --cluster-advertise without --cluster-store is also an error 99 err = d.Start("--cluster-advertise=1.1.1.1:2375") 100 c.Assert(err, checker.Not(checker.IsNil)) 101 } 102 103 // TestInfoDiscoveryAdvertiseInterfaceName verifies that a daemon run with `--cluster-advertise` 104 // configured with interface name properly show the advertise ip-address in info output. 105 func (s *DockerSuite) TestInfoDiscoveryAdvertiseInterfaceName(c *check.C) { 106 testRequires(c, SameHostDaemon, Network, DaemonIsLinux) 107 108 d := NewDaemon(c) 109 discoveryBackend := "consul://consuladdr:consulport/some/path" 110 discoveryAdvertise := "eth0" 111 112 err := d.Start(fmt.Sprintf("--cluster-store=%s", discoveryBackend), fmt.Sprintf("--cluster-advertise=%s:2375", discoveryAdvertise)) 113 c.Assert(err, checker.IsNil) 114 defer d.Stop() 115 116 iface, err := net.InterfaceByName(discoveryAdvertise) 117 c.Assert(err, checker.IsNil) 118 addrs, err := iface.Addrs() 119 c.Assert(err, checker.IsNil) 120 c.Assert(len(addrs), checker.GreaterThan, 0) 121 ip, _, err := net.ParseCIDR(addrs[0].String()) 122 c.Assert(err, checker.IsNil) 123 124 out, err := d.Cmd("info") 125 c.Assert(err, checker.IsNil) 126 c.Assert(out, checker.Contains, fmt.Sprintf("Cluster Store: %s\n", discoveryBackend)) 127 c.Assert(out, checker.Contains, fmt.Sprintf("Cluster Advertise: %s:2375\n", ip.String())) 128 } 129 130 func (s *DockerSuite) TestInfoDisplaysRunningContainers(c *check.C) { 131 testRequires(c, DaemonIsLinux) 132 133 dockerCmd(c, "run", "-d", "busybox", "top") 134 out, _ := dockerCmd(c, "info") 135 c.Assert(out, checker.Contains, fmt.Sprintf("Containers: %d\n", 1)) 136 c.Assert(out, checker.Contains, fmt.Sprintf(" Running: %d\n", 1)) 137 c.Assert(out, checker.Contains, fmt.Sprintf(" Paused: %d\n", 0)) 138 c.Assert(out, checker.Contains, fmt.Sprintf(" Stopped: %d\n", 0)) 139 } 140 141 func (s *DockerSuite) TestInfoDisplaysPausedContainers(c *check.C) { 142 testRequires(c, IsPausable) 143 144 out, _ := runSleepingContainer(c, "-d") 145 cleanedContainerID := strings.TrimSpace(out) 146 147 dockerCmd(c, "pause", cleanedContainerID) 148 149 out, _ = dockerCmd(c, "info") 150 c.Assert(out, checker.Contains, fmt.Sprintf("Containers: %d\n", 1)) 151 c.Assert(out, checker.Contains, fmt.Sprintf(" Running: %d\n", 0)) 152 c.Assert(out, checker.Contains, fmt.Sprintf(" Paused: %d\n", 1)) 153 c.Assert(out, checker.Contains, fmt.Sprintf(" Stopped: %d\n", 0)) 154 } 155 156 func (s *DockerSuite) TestInfoDisplaysStoppedContainers(c *check.C) { 157 testRequires(c, DaemonIsLinux) 158 159 out, _ := dockerCmd(c, "run", "-d", "busybox", "top") 160 cleanedContainerID := strings.TrimSpace(out) 161 162 dockerCmd(c, "stop", cleanedContainerID) 163 164 out, _ = dockerCmd(c, "info") 165 c.Assert(out, checker.Contains, fmt.Sprintf("Containers: %d\n", 1)) 166 c.Assert(out, checker.Contains, fmt.Sprintf(" Running: %d\n", 0)) 167 c.Assert(out, checker.Contains, fmt.Sprintf(" Paused: %d\n", 0)) 168 c.Assert(out, checker.Contains, fmt.Sprintf(" Stopped: %d\n", 1)) 169 } 170 171 func (s *DockerSuite) TestInfoDebug(c *check.C) { 172 testRequires(c, SameHostDaemon, DaemonIsLinux) 173 174 d := NewDaemon(c) 175 err := d.Start("--debug") 176 c.Assert(err, checker.IsNil) 177 defer d.Stop() 178 179 out, err := d.Cmd("--debug", "info") 180 c.Assert(err, checker.IsNil) 181 c.Assert(out, checker.Contains, "Debug Mode (client): true\n") 182 c.Assert(out, checker.Contains, "Debug Mode (server): true\n") 183 c.Assert(out, checker.Contains, "File Descriptors") 184 c.Assert(out, checker.Contains, "Goroutines") 185 c.Assert(out, checker.Contains, "System Time") 186 c.Assert(out, checker.Contains, "EventsListeners") 187 c.Assert(out, checker.Contains, "Docker Root Dir") 188 } 189 190 func (s *DockerSuite) TestInsecureRegistries(c *check.C) { 191 testRequires(c, SameHostDaemon, DaemonIsLinux) 192 193 registryCIDR := "192.168.1.0/24" 194 registryHost := "insecurehost.com:5000" 195 196 d := NewDaemon(c) 197 err := d.Start("--insecure-registry="+registryCIDR, "--insecure-registry="+registryHost) 198 c.Assert(err, checker.IsNil) 199 defer d.Stop() 200 201 out, err := d.Cmd("info") 202 c.Assert(err, checker.IsNil) 203 c.Assert(out, checker.Contains, "Insecure Registries:\n") 204 c.Assert(out, checker.Contains, fmt.Sprintf(" %s\n", registryHost)) 205 c.Assert(out, checker.Contains, fmt.Sprintf(" %s\n", registryCIDR)) 206 } 207 208 func (s *DockerDaemonSuite) TestRegistryMirrors(c *check.C) { 209 testRequires(c, SameHostDaemon, DaemonIsLinux) 210 211 registryMirror1 := "https://192.168.1.2" 212 registryMirror2 := "http://registry.mirror.com:5000" 213 214 err := s.d.Start("--registry-mirror="+registryMirror1, "--registry-mirror="+registryMirror2) 215 c.Assert(err, checker.IsNil) 216 217 out, err := s.d.Cmd("info") 218 c.Assert(err, checker.IsNil) 219 c.Assert(out, checker.Contains, "Registry Mirrors:\n") 220 c.Assert(out, checker.Contains, fmt.Sprintf(" %s", registryMirror1)) 221 c.Assert(out, checker.Contains, fmt.Sprintf(" %s", registryMirror2)) 222 } 223 224 // Test case for #24392 225 func (s *DockerDaemonSuite) TestInfoLabels(c *check.C) { 226 testRequires(c, SameHostDaemon, DaemonIsLinux) 227 228 err := s.d.Start("--label", `test.empty=`, "--label", `test.empty=`, "--label", `test.label="1"`, "--label", `test.label="2"`) 229 c.Assert(err, checker.IsNil) 230 231 out, err := s.d.Cmd("info") 232 c.Assert(err, checker.IsNil) 233 c.Assert(out, checker.Contains, "WARNING: labels with duplicate keys and conflicting values have been deprecated") 234 }