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 }