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