Merge pull request #19822 from Microsoft/jjh/testexeccli

Windows CI: Initial porting CLI TestExec*
This commit is contained in:
Vincent Demeester 2016-02-02 08:32:28 +01:00
commit 5cdc0dfce3
2 changed files with 42 additions and 15 deletions

View File

@ -66,8 +66,7 @@ func (s *DockerSuite) TestExecInteractive(c *check.C) {
}
func (s *DockerSuite) TestExecAfterContainerRestart(c *check.C) {
testRequires(c, DaemonIsLinux)
out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
out, _ := runSleepingContainer(c, "-d")
cleanedContainerID := strings.TrimSpace(out)
c.Assert(waitRun(cleanedContainerID), check.IsNil)
dockerCmd(c, "restart", cleanedContainerID)
@ -79,6 +78,7 @@ func (s *DockerSuite) TestExecAfterContainerRestart(c *check.C) {
}
func (s *DockerDaemonSuite) TestExecAfterDaemonRestart(c *check.C) {
// TODO Windows CI: Requires a little work to get this ported.
testRequires(c, DaemonIsLinux)
testRequires(c, SameHostDaemon)
@ -103,9 +103,12 @@ func (s *DockerDaemonSuite) TestExecAfterDaemonRestart(c *check.C) {
// Regression test for #9155, #9044
func (s *DockerSuite) TestExecEnv(c *check.C) {
// TODO Windows CI: This one is interesting and may just end up being a feature
// difference between Windows and Linux. On Windows, the environment is passed
// into the process that is launched, not into the machine environment. Hence
// a subsequent exec will not have LALA set/
testRequires(c, DaemonIsLinux)
dockerCmd(c, "run", "-e", "LALA=value1", "-e", "LALA=value2",
"-d", "--name", "testing", "busybox", "top")
runSleepingContainer(c, "-e", "LALA=value1", "-e", "LALA=value2", "-d", "--name", "testing")
c.Assert(waitRun("testing"), check.IsNil)
out, _ := dockerCmd(c, "exec", "testing", "env")
@ -115,8 +118,7 @@ func (s *DockerSuite) TestExecEnv(c *check.C) {
}
func (s *DockerSuite) TestExecExitStatus(c *check.C) {
testRequires(c, DaemonIsLinux)
dockerCmd(c, "run", "-d", "--name", "top", "busybox", "top")
runSleepingContainer(c, "-d", "--name", "top")
// Test normal (non-detached) case first
cmd := exec.Command(dockerBinary, "exec", "top", "sh", "-c", "exit 23")
@ -125,6 +127,7 @@ func (s *DockerSuite) TestExecExitStatus(c *check.C) {
}
func (s *DockerSuite) TestExecPausedContainer(c *check.C) {
// Windows does not support pause
testRequires(c, DaemonIsLinux)
defer unpauseAllContainers()
@ -141,6 +144,7 @@ func (s *DockerSuite) TestExecPausedContainer(c *check.C) {
// regression test for #9476
func (s *DockerSuite) TestExecTTYCloseStdin(c *check.C) {
// TODO Windows CI: This requires some work to port to Windows.
testRequires(c, DaemonIsLinux)
dockerCmd(c, "run", "-d", "-it", "--name", "exec_tty_stdin", "busybox")
@ -161,6 +165,7 @@ func (s *DockerSuite) TestExecTTYCloseStdin(c *check.C) {
}
func (s *DockerSuite) TestExecTTYWithoutStdin(c *check.C) {
// TODO Windows CI: This requires some work to port to Windows.
testRequires(c, DaemonIsLinux)
out, _ := dockerCmd(c, "run", "-d", "-ti", "busybox")
id := strings.TrimSpace(out)
@ -195,6 +200,8 @@ func (s *DockerSuite) TestExecTTYWithoutStdin(c *check.C) {
}
func (s *DockerSuite) TestExecParseError(c *check.C) {
// TODO Windows CI: Requires some extra work. Consider copying the
// runSleepingContainer helper to have an exec version.
testRequires(c, DaemonIsLinux)
dockerCmd(c, "run", "-d", "--name", "top", "busybox", "top")
@ -206,6 +213,8 @@ func (s *DockerSuite) TestExecParseError(c *check.C) {
}
func (s *DockerSuite) TestExecStopNotHanging(c *check.C) {
// TODO Windows CI: Requires some extra work. Consider copying the
// runSleepingContainer helper to have an exec version.
testRequires(c, DaemonIsLinux)
dockerCmd(c, "run", "-d", "--name", "testing", "busybox", "top")
@ -232,6 +241,7 @@ func (s *DockerSuite) TestExecStopNotHanging(c *check.C) {
}
func (s *DockerSuite) TestExecCgroup(c *check.C) {
// Not applicable on Windows - using Linux specific functionality
testRequires(c, NotUserNamespace)
testRequires(c, DaemonIsLinux)
dockerCmd(c, "run", "-d", "--name", "testing", "busybox", "top")
@ -283,9 +293,8 @@ func (s *DockerSuite) TestExecCgroup(c *check.C) {
}
}
func (s *DockerSuite) TestInspectExecID(c *check.C) {
testRequires(c, DaemonIsLinux)
out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
func (s *DockerSuite) TestExecInspectID(c *check.C) {
out, _ := runSleepingContainer(c, "-d")
id := strings.TrimSuffix(out, "\n")
out = inspectField(c, id, "ExecIDs")
@ -293,7 +302,7 @@ func (s *DockerSuite) TestInspectExecID(c *check.C) {
// Start an exec, have it block waiting so we can do some checking
cmd := exec.Command(dockerBinary, "exec", id, "sh", "-c",
"while ! test -e /tmp/execid1; do sleep 1; done")
"while ! test -e /execid1; do sleep 1; done")
err := cmd.Start()
c.Assert(err, checker.IsNil, check.Commentf("failed to start the exec cmd"))
@ -318,7 +327,7 @@ func (s *DockerSuite) TestInspectExecID(c *check.C) {
// End the exec by creating the missing file
err = exec.Command(dockerBinary, "exec", id,
"sh", "-c", "touch /tmp/execid1").Run()
"sh", "-c", "touch /execid1").Run()
c.Assert(err, checker.IsNil, check.Commentf("failed to run the 2nd exec cmd"))
@ -344,6 +353,7 @@ func (s *DockerSuite) TestInspectExecID(c *check.C) {
}
func (s *DockerSuite) TestLinksPingLinkedContainersOnRename(c *check.C) {
// Problematic on Windows as Windows does not support links
testRequires(c, DaemonIsLinux)
var out string
out, _ = dockerCmd(c, "run", "-d", "--name", "container1", "busybox", "top")
@ -358,12 +368,17 @@ func (s *DockerSuite) TestLinksPingLinkedContainersOnRename(c *check.C) {
dockerCmd(c, "exec", "container2", "ping", "-c", "1", "alias1", "-W", "1")
}
func (s *DockerSuite) TestRunExecDir(c *check.C) {
func (s *DockerSuite) TestExecDir(c *check.C) {
// TODO Windows CI. This requires some work to port as it uses execDriverPath
// which is currently (and incorrectly) hard coded as a string assuming
// the daemon is running Linux :(
testRequires(c, SameHostDaemon, DaemonIsLinux)
out, _ := dockerCmd(c, "run", "-d", "busybox", "top")
out, _ := runSleepingContainer(c, "-d")
id := strings.TrimSpace(out)
execDir := filepath.Join(execDriverPath, id)
fmt.Println(execDriverPath)
stateFile := filepath.Join(execDir, "state.json")
{
@ -406,6 +421,7 @@ func (s *DockerSuite) TestRunExecDir(c *check.C) {
}
func (s *DockerSuite) TestRunMutableNetworkFiles(c *check.C) {
// Not applicable on Windows to Windows CI.
testRequires(c, SameHostDaemon, DaemonIsLinux)
for _, fn := range []string{"resolv.conf", "hosts"} {
deleteAllContainers()
@ -444,6 +460,8 @@ func (s *DockerSuite) TestRunMutableNetworkFiles(c *check.C) {
}
func (s *DockerSuite) TestExecWithUser(c *check.C) {
// TODO Windows CI: This may be fixable in the future once Windows
// supports users
testRequires(c, DaemonIsLinux)
dockerCmd(c, "run", "-d", "--name", "parent", "busybox", "top")
@ -455,6 +473,7 @@ func (s *DockerSuite) TestExecWithUser(c *check.C) {
}
func (s *DockerSuite) TestExecWithPrivileged(c *check.C) {
// Not applicable on Windows
testRequires(c, DaemonIsLinux, NotUserNamespace)
// Start main loop which attempts mknod repeatedly
dockerCmd(c, "run", "-d", "--name", "parent", "--cap-drop=ALL", "busybox", "sh", "-c", `while (true); do if [ -e /exec_priv ]; then cat /exec_priv && mknod /tmp/sda b 8 0 && echo "Success"; else echo "Privileged exec has not run yet"; fi; usleep 10000; done`)
@ -488,6 +507,7 @@ func (s *DockerSuite) TestExecWithPrivileged(c *check.C) {
}
func (s *DockerSuite) TestExecWithImageUser(c *check.C) {
// Not applicable on Windows
testRequires(c, DaemonIsLinux)
name := "testbuilduser"
_, err := buildImage(name,
@ -504,6 +524,7 @@ func (s *DockerSuite) TestExecWithImageUser(c *check.C) {
}
func (s *DockerSuite) TestExecOnReadonlyContainer(c *check.C) {
// Windows does not support read-only
// --read-only + userns has remount issues
testRequires(c, DaemonIsLinux, NotUserNamespace)
dockerCmd(c, "run", "-d", "--read-only", "--name", "parent", "busybox", "top")
@ -512,9 +533,11 @@ func (s *DockerSuite) TestExecOnReadonlyContainer(c *check.C) {
// #15750
func (s *DockerSuite) TestExecStartFails(c *check.C) {
// TODO Windows CI. This test should be portable. Figure out why it fails
// currently.
testRequires(c, DaemonIsLinux)
name := "exec-15750"
dockerCmd(c, "run", "-d", "--name", name, "busybox", "top")
runSleepingContainer(c, "-d", "--name", name)
c.Assert(waitRun(name), checker.IsNil)
out, _, err := dockerCmdWithError("exec", name, "no-such-cmd")

View File

@ -19,6 +19,8 @@ var (
// the private registry to use for tests
privateRegistryURL = "127.0.0.1:5000"
// TODO Windows CI. These are incorrect and need fixing into
// platform specific pieces.
runtimePath = "/var/run/docker"
execDriverPath = runtimePath + "/execdriver/native"
@ -84,7 +86,7 @@ func init() {
// to evaluate whether the daemon is local or remote is not possible through
// a build tag.
//
// For example Windows CI under Jenkins test the 64-bit
// For example Windows to Linux CI under Jenkins tests the 64-bit
// Windows binary build with the daemon build tag, but calls a remote
// Linux daemon.
//
@ -99,6 +101,8 @@ func init() {
isLocalDaemon = true
}
// TODO Windows CI. This are incorrect and need fixing into
// platform specific pieces.
// This is only used for a tests with local daemon true (Linux-only today)
// default is "/var/lib/docker", but we'll try and ask the
// /info endpoint for the specific root dir