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