76d8bfdff4
This field was added in f0e5b3d7d8
to
account for older versions of the engine (Docker EE LTS versions), which
did not yet provide the OSType field in Docker info, and had to be manually
set using the TEST_OSTYPE env-var.
This patch removes the field in favor of the equivalent in DaemonInfo. It's
more verbose, but also less ambiguous what information we're using (i.e.,
the platform the daemon is running on, not the local platform).
Signed-off-by: Sebastiaan van Stijn <github@gone.nl>
85 lines
3 KiB
Go
85 lines
3 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"gotest.tools/v3/assert"
|
|
"gotest.tools/v3/icmd"
|
|
)
|
|
|
|
type DockerCLITopSuite struct {
|
|
ds *DockerSuite
|
|
}
|
|
|
|
func (s *DockerCLITopSuite) TearDownTest(c *testing.T) {
|
|
s.ds.TearDownTest(c)
|
|
}
|
|
|
|
func (s *DockerCLITopSuite) OnTimeout(c *testing.T) {
|
|
s.ds.OnTimeout(c)
|
|
}
|
|
|
|
func (s *DockerCLITopSuite) TestTopMultipleArgs(c *testing.T) {
|
|
out := runSleepingContainer(c, "-d")
|
|
cleanedContainerID := strings.TrimSpace(out)
|
|
|
|
var expected icmd.Expected
|
|
switch testEnv.DaemonInfo.OSType {
|
|
case "windows":
|
|
expected = icmd.Expected{ExitCode: 1, Err: "Windows does not support arguments to top"}
|
|
default:
|
|
expected = icmd.Expected{Out: "PID"}
|
|
}
|
|
result := dockerCmdWithResult("top", cleanedContainerID, "-o", "pid")
|
|
result.Assert(c, expected)
|
|
}
|
|
|
|
func (s *DockerCLITopSuite) TestTopNonPrivileged(c *testing.T) {
|
|
out := runSleepingContainer(c, "-d")
|
|
cleanedContainerID := strings.TrimSpace(out)
|
|
|
|
out1, _ := dockerCmd(c, "top", cleanedContainerID)
|
|
out2, _ := dockerCmd(c, "top", cleanedContainerID)
|
|
dockerCmd(c, "kill", cleanedContainerID)
|
|
|
|
// Windows will list the name of the launched executable which in this case is busybox.exe, without the parameters.
|
|
// Linux will display the command executed in the container
|
|
var lookingFor string
|
|
if testEnv.DaemonInfo.OSType == "windows" {
|
|
lookingFor = "busybox.exe"
|
|
} else {
|
|
lookingFor = "top"
|
|
}
|
|
|
|
assert.Assert(c, strings.Contains(out1, lookingFor), "top should've listed `%s` in the process list, but failed the first time", lookingFor)
|
|
assert.Assert(c, strings.Contains(out2, lookingFor), "top should've listed `%s` in the process list, but failed the second time", lookingFor)
|
|
}
|
|
|
|
// TestTopWindowsCoreProcesses validates that there are lines for the critical
|
|
// processes which are found in a Windows container. Note Windows is architecturally
|
|
// very different to Linux in this regard.
|
|
func (s *DockerCLITopSuite) TestTopWindowsCoreProcesses(c *testing.T) {
|
|
testRequires(c, DaemonIsWindows)
|
|
out := runSleepingContainer(c, "-d")
|
|
cleanedContainerID := strings.TrimSpace(out)
|
|
out1, _ := dockerCmd(c, "top", cleanedContainerID)
|
|
lookingFor := []string{"smss.exe", "csrss.exe", "wininit.exe", "services.exe", "lsass.exe", "CExecSvc.exe"}
|
|
for i, s := range lookingFor {
|
|
assert.Assert(c, strings.Contains(out1, s), "top should've listed `%s` in the process list, but failed. Test case %d", s, i)
|
|
}
|
|
}
|
|
|
|
func (s *DockerCLITopSuite) TestTopPrivileged(c *testing.T) {
|
|
// Windows does not support --privileged
|
|
testRequires(c, DaemonIsLinux, NotUserNamespace)
|
|
out, _ := dockerCmd(c, "run", "--privileged", "-i", "-d", "busybox", "top")
|
|
cleanedContainerID := strings.TrimSpace(out)
|
|
|
|
out1, _ := dockerCmd(c, "top", cleanedContainerID)
|
|
out2, _ := dockerCmd(c, "top", cleanedContainerID)
|
|
dockerCmd(c, "kill", cleanedContainerID)
|
|
|
|
assert.Assert(c, strings.Contains(out1, "top"), "top should've listed `top` in the process list, but failed the first time")
|
|
assert.Assert(c, strings.Contains(out2, "top"), "top should've listed `top` in the process list, but failed the second time")
|
|
}
|