github.com/rawahars/moby@v24.0.4+incompatible/integration-cli/docker_cli_info_test.go (about)

     1  package main
     2  
     3  import (
     4  	"encoding/json"
     5  	"fmt"
     6  	"strings"
     7  	"testing"
     8  
     9  	"gotest.tools/v3/assert"
    10  )
    11  
    12  type DockerCLIInfoSuite struct {
    13  	ds *DockerSuite
    14  }
    15  
    16  func (s *DockerCLIInfoSuite) TearDownTest(c *testing.T) {
    17  	s.ds.TearDownTest(c)
    18  }
    19  
    20  func (s *DockerCLIInfoSuite) OnTimeout(c *testing.T) {
    21  	s.ds.OnTimeout(c)
    22  }
    23  
    24  // ensure docker info succeeds
    25  func (s *DockerCLIInfoSuite) TestInfoEnsureSucceeds(c *testing.T) {
    26  	out, _ := dockerCmd(c, "info")
    27  
    28  	// always shown fields
    29  	stringsToCheck := []string{
    30  		"ID:",
    31  		"Containers:",
    32  		" Running:",
    33  		" Paused:",
    34  		" Stopped:",
    35  		"Images:",
    36  		"OSType:",
    37  		"Architecture:",
    38  		"Logging Driver:",
    39  		"Operating System:",
    40  		"CPUs:",
    41  		"Total Memory:",
    42  		"Kernel Version:",
    43  		"Storage Driver:",
    44  		"Volume:",
    45  		"Network:",
    46  		"Live Restore Enabled:",
    47  	}
    48  
    49  	if testEnv.OSType == "linux" {
    50  		stringsToCheck = append(stringsToCheck, "Init Binary:", "Security Options:", "containerd version:", "runc version:", "init version:")
    51  	}
    52  
    53  	if DaemonIsLinux() {
    54  		stringsToCheck = append(stringsToCheck, "Runtimes:", "Default Runtime: runc")
    55  	}
    56  
    57  	if testEnv.DaemonInfo.ExperimentalBuild {
    58  		stringsToCheck = append(stringsToCheck, "Experimental: true")
    59  	} else {
    60  		stringsToCheck = append(stringsToCheck, "Experimental: false")
    61  	}
    62  
    63  	for _, linePrefix := range stringsToCheck {
    64  		assert.Assert(c, strings.Contains(out, linePrefix), "couldn't find string %v in output", linePrefix)
    65  	}
    66  }
    67  
    68  func (s *DockerCLIInfoSuite) TestInfoDisplaysRunningContainers(c *testing.T) {
    69  	testRequires(c, DaemonIsLinux)
    70  
    71  	existing := existingContainerStates(c)
    72  
    73  	dockerCmd(c, "run", "-d", "busybox", "top")
    74  	out, _ := dockerCmd(c, "info")
    75  	assert.Assert(c, strings.Contains(out, fmt.Sprintf("Containers: %d\n", existing["Containers"]+1)))
    76  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Running: %d\n", existing["ContainersRunning"]+1)))
    77  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Paused: %d\n", existing["ContainersPaused"])))
    78  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Stopped: %d\n", existing["ContainersStopped"])))
    79  }
    80  
    81  func (s *DockerCLIInfoSuite) TestInfoDisplaysPausedContainers(c *testing.T) {
    82  	testRequires(c, IsPausable)
    83  
    84  	existing := existingContainerStates(c)
    85  
    86  	out := runSleepingContainer(c, "-d")
    87  	cleanedContainerID := strings.TrimSpace(out)
    88  
    89  	dockerCmd(c, "pause", cleanedContainerID)
    90  
    91  	out, _ = dockerCmd(c, "info")
    92  	assert.Assert(c, strings.Contains(out, fmt.Sprintf("Containers: %d\n", existing["Containers"]+1)))
    93  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Running: %d\n", existing["ContainersRunning"])))
    94  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Paused: %d\n", existing["ContainersPaused"]+1)))
    95  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Stopped: %d\n", existing["ContainersStopped"])))
    96  }
    97  
    98  func (s *DockerCLIInfoSuite) TestInfoDisplaysStoppedContainers(c *testing.T) {
    99  	testRequires(c, DaemonIsLinux)
   100  
   101  	existing := existingContainerStates(c)
   102  
   103  	out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
   104  	cleanedContainerID := strings.TrimSpace(out)
   105  
   106  	dockerCmd(c, "stop", cleanedContainerID)
   107  
   108  	out, _ = dockerCmd(c, "info")
   109  	assert.Assert(c, strings.Contains(out, fmt.Sprintf("Containers: %d\n", existing["Containers"]+1)))
   110  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Running: %d\n", existing["ContainersRunning"])))
   111  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Paused: %d\n", existing["ContainersPaused"])))
   112  	assert.Assert(c, strings.Contains(out, fmt.Sprintf(" Stopped: %d\n", existing["ContainersStopped"]+1)))
   113  }
   114  
   115  func existingContainerStates(c *testing.T) map[string]int {
   116  	out, _ := dockerCmd(c, "info", "--format", "{{json .}}")
   117  	var m map[string]interface{}
   118  	err := json.Unmarshal([]byte(out), &m)
   119  	assert.NilError(c, err)
   120  	res := map[string]int{}
   121  	res["Containers"] = int(m["Containers"].(float64))
   122  	res["ContainersRunning"] = int(m["ContainersRunning"].(float64))
   123  	res["ContainersPaused"] = int(m["ContainersPaused"].(float64))
   124  	res["ContainersStopped"] = int(m["ContainersStopped"].(float64))
   125  	return res
   126  }