From 18dd1d9aba3c79d355abaa7f498b88ad816f7d04 Mon Sep 17 00:00:00 2001 From: Vincent Demeester Date: Fri, 2 Mar 2018 14:45:14 +0100 Subject: [PATCH] Fixes some integration/container test to run on remote daemon ``` docker build -f Dockerfile.e2e -t moby-e2e . docker run -v /var/run/docker.sock:/var/run/docker.sock \ -e TEST_INTEGRATION_DIR=/tests/integration/container \ -e DOCKER_API_VERSION=1.36 moby-e2e ``` Signed-off-by: Vincent Demeester --- integration-cli/check_test.go | 2 +- integration/container/daemon_linux_test.go | 2 ++ integration/container/links_linux_test.go | 2 +- integration/container/mounts_linux_test.go | 3 ++- integration/container/nat_test.go | 6 +++--- integration/container/pause_test.go | 9 ++++----- integration/container/remove_test.go | 2 +- integration/container/rename_test.go | 20 ++++++++++++-------- integration/container/restart_test.go | 2 ++ integration/service/inspect_test.go | 2 +- internal/test/environment/environment.go | 8 +++++++- 11 files changed, 36 insertions(+), 22 deletions(-) diff --git a/integration-cli/check_test.go b/integration-cli/check_test.go index dd802fbc11..a9f94fb576 100644 --- a/integration-cli/check_test.go +++ b/integration-cli/check_test.go @@ -85,7 +85,7 @@ type DockerSuite struct { } func (s *DockerSuite) OnTimeout(c *check.C) { - if !testEnv.IsLocalDaemon() { + if testEnv.IsRemoteDaemon() { return } path := filepath.Join(os.Getenv("DEST"), "docker.pid") diff --git a/integration/container/daemon_linux_test.go b/integration/container/daemon_linux_test.go index 5e15562ae8..5077770f53 100644 --- a/integration/container/daemon_linux_test.go +++ b/integration/container/daemon_linux_test.go @@ -11,6 +11,7 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/integration-cli/daemon" "github.com/docker/docker/integration/internal/container" + "github.com/gotestyourself/gotestyourself/skip" "github.com/stretchr/testify/assert" "golang.org/x/sys/unix" ) @@ -26,6 +27,7 @@ import ( // the container process, then start dockerd back up and attempt to start the // container again. func TestContainerStartOnDaemonRestart(t *testing.T) { + skip.If(t, testEnv.IsRemoteDaemon(), "cannot start daemon on remote test run") t.Parallel() d := daemon.New(t, "", "dockerd", daemon.Config{}) diff --git a/integration/container/links_linux_test.go b/integration/container/links_linux_test.go index 87b27e321b..d230898ed0 100644 --- a/integration/container/links_linux_test.go +++ b/integration/container/links_linux_test.go @@ -20,7 +20,7 @@ import ( ) func TestLinksEtcHostsContentMatch(t *testing.T) { - skip.If(t, !testEnv.IsLocalDaemon()) + skip.If(t, testEnv.IsRemoteDaemon()) hosts, err := ioutil.ReadFile("/etc/hosts") skip.If(t, os.IsNotExist(err)) diff --git a/integration/container/mounts_linux_test.go b/integration/container/mounts_linux_test.go index ceec706271..71bdccc71b 100644 --- a/integration/container/mounts_linux_test.go +++ b/integration/container/mounts_linux_test.go @@ -23,6 +23,7 @@ import ( ) func TestContainerShmNoLeak(t *testing.T) { + skip.If(t, testEnv.IsRemoteDaemon(), "cannot start daemon on remote test run") t.Parallel() d := daemon.New(t, "docker", "dockerd", daemon.Config{}) client, err := d.NewClient() @@ -94,7 +95,7 @@ func TestContainerShmNoLeak(t *testing.T) { func TestContainerNetworkMountsNoChown(t *testing.T) { // chown only applies to Linux bind mounted volumes; must be same host to verify - skip.If(t, testEnv.DaemonInfo.OSType != "linux" || !testEnv.IsLocalDaemon()) + skip.If(t, testEnv.DaemonInfo.OSType != "linux" || testEnv.IsRemoteDaemon()) defer setupTest(t)() diff --git a/integration/container/nat_test.go b/integration/container/nat_test.go index 84df4960a2..293ba9bba6 100644 --- a/integration/container/nat_test.go +++ b/integration/container/nat_test.go @@ -22,7 +22,7 @@ import ( ) func TestNetworkNat(t *testing.T) { - skip.If(t, !testEnv.IsLocalDaemon()) + skip.If(t, testEnv.IsRemoteDaemon()) defer setupTest(t)() @@ -40,7 +40,7 @@ func TestNetworkNat(t *testing.T) { } func TestNetworkLocalhostTCPNat(t *testing.T) { - skip.If(t, !testEnv.IsLocalDaemon()) + skip.If(t, testEnv.IsRemoteDaemon()) defer setupTest(t)() @@ -57,7 +57,7 @@ func TestNetworkLocalhostTCPNat(t *testing.T) { } func TestNetworkLoopbackNat(t *testing.T) { - skip.If(t, !testEnv.IsLocalDaemon()) + skip.If(t, testEnv.IsRemoteDaemon()) msg := "it works" startServerContainer(t, msg, 8080) diff --git a/integration/container/pause_test.go b/integration/container/pause_test.go index cacc3621de..7c2aa96c75 100644 --- a/integration/container/pause_test.go +++ b/integration/container/pause_test.go @@ -25,20 +25,19 @@ func TestPause(t *testing.T) { client := request.NewAPIClient(t) ctx := context.Background() - name := "testeventpause" - cID := container.Run(t, ctx, client, container.WithName(name)) + cID := container.Run(t, ctx, client) poll.WaitOn(t, container.IsInState(ctx, client, cID, "running"), poll.WithDelay(100*time.Millisecond)) since := request.DaemonUnixTime(ctx, t, client, testEnv) - err := client.ContainerPause(ctx, name) + err := client.ContainerPause(ctx, cID) require.NoError(t, err) inspect, err := client.ContainerInspect(ctx, cID) require.NoError(t, err) assert.Equal(t, inspect.State.Paused, true) - err = client.ContainerUnpause(ctx, name) + err = client.ContainerUnpause(ctx, cID) require.NoError(t, err) until := request.DaemonUnixTime(ctx, t, client, testEnv) @@ -46,7 +45,7 @@ func TestPause(t *testing.T) { messages, errs := client.Events(ctx, types.EventsOptions{ Since: since, Until: until, - Filters: filters.NewArgs(filters.Arg("container", name)), + Filters: filters.NewArgs(filters.Arg("container", cID)), }) assert.Equal(t, getEventActions(t, messages, errs), []string{"pause", "unpause"}) } diff --git a/integration/container/remove_test.go b/integration/container/remove_test.go index bf55dd22c7..22fa26af67 100644 --- a/integration/container/remove_test.go +++ b/integration/container/remove_test.go @@ -27,7 +27,7 @@ func getPrefixAndSlashFromDaemonPlatform() (prefix, slash string) { // Test case for #5244: `docker rm` fails if bind dir doesn't exist anymore func TestRemoveContainerWithRemovedVolume(t *testing.T) { - skip.If(t, !testEnv.IsLocalDaemon()) + skip.If(t, testEnv.IsRemoteDaemon()) defer setupTest(t)() ctx := context.Background() diff --git a/integration/container/rename_test.go b/integration/container/rename_test.go index 2138ee578e..3567aee1f5 100644 --- a/integration/container/rename_test.go +++ b/integration/container/rename_test.go @@ -55,7 +55,7 @@ func TestRenameStoppedContainer(t *testing.T) { inspect, err := client.ContainerInspect(ctx, cID) require.NoError(t, err) - assert.Equal(t, inspect.Name, "/"+oldName) + assert.Equal(t, "/"+oldName, inspect.Name) newName := "new_name" + stringid.GenerateNonCryptoID() err = client.ContainerRename(ctx, oldName, newName) @@ -63,7 +63,7 @@ func TestRenameStoppedContainer(t *testing.T) { inspect, err = client.ContainerInspect(ctx, cID) require.NoError(t, err) - assert.Equal(t, inspect.Name, "/"+newName) + assert.Equal(t, "/"+newName, inspect.Name) } func TestRenameRunningContainerAndReuse(t *testing.T) { @@ -81,7 +81,7 @@ func TestRenameRunningContainerAndReuse(t *testing.T) { inspect, err := client.ContainerInspect(ctx, cID) require.NoError(t, err) - assert.Equal(t, inspect.Name, "/"+newName) + assert.Equal(t, "/"+newName, inspect.Name) _, err = client.ContainerInspect(ctx, oldName) testutil.ErrorContains(t, err, "No such container: "+oldName) @@ -91,7 +91,7 @@ func TestRenameRunningContainerAndReuse(t *testing.T) { inspect, err = client.ContainerInspect(ctx, cID) require.NoError(t, err) - assert.Equal(t, inspect.Name, "/"+oldName) + assert.Equal(t, "/"+oldName, inspect.Name) } func TestRenameInvalidName(t *testing.T) { @@ -108,7 +108,7 @@ func TestRenameInvalidName(t *testing.T) { inspect, err := client.ContainerInspect(ctx, oldName) require.NoError(t, err) - assert.Equal(t, inspect.ID, cID) + assert.Equal(t, cID, inspect.ID) } // Test case for GitHub issue 22466 @@ -133,6 +133,10 @@ func TestRenameAnonymousContainer(t *testing.T) { }) err = client.ContainerRename(ctx, cID, "container1") require.NoError(t, err) + // Stop/Start the container to get registered + // FIXME(vdemeester) this is a really weird behavior as it fails otherwise + err = client.ContainerStop(ctx, "container1", nil) + require.NoError(t, err) err = client.ContainerStart(ctx, "container1", types.ContainerStartOptions{}) require.NoError(t, err) @@ -152,7 +156,7 @@ func TestRenameAnonymousContainer(t *testing.T) { inspect, err := client.ContainerInspect(ctx, cID) require.NoError(t, err) - assert.Equal(t, inspect.State.ExitCode, 0) + assert.Equal(t, 0, inspect.State.ExitCode, "container %s exited with the wrong exitcode: %+v", cID, inspect) } // TODO: should be a unit test @@ -175,7 +179,7 @@ func TestRenameContainerWithSameName(t *testing.T) { // of the linked container should be updated so that the other // container could still reference to the container that is renamed. func TestRenameContainerWithLinkedContainer(t *testing.T) { - skip.If(t, !testEnv.IsLocalDaemon()) + skip.If(t, testEnv.IsRemoteDaemon()) defer setupTest(t)() ctx := context.Background() @@ -192,5 +196,5 @@ func TestRenameContainerWithLinkedContainer(t *testing.T) { inspect, err := client.ContainerInspect(ctx, "app2/mysql") require.NoError(t, err) - assert.Equal(t, inspect.ID, db1ID) + assert.Equal(t, db1ID, inspect.ID) } diff --git a/integration/container/restart_test.go b/integration/container/restart_test.go index accaf2cd80..7a2576e219 100644 --- a/integration/container/restart_test.go +++ b/integration/container/restart_test.go @@ -9,9 +9,11 @@ import ( "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/integration-cli/daemon" + "github.com/gotestyourself/gotestyourself/skip" ) func TestDaemonRestartKillContainers(t *testing.T) { + skip.If(t, testEnv.IsRemoteDaemon(), "cannot start daemon on remote test run") type testCase struct { desc string config *container.Config diff --git a/integration/service/inspect_test.go b/integration/service/inspect_test.go index fdb22cf2f7..8cd24bc31b 100644 --- a/integration/service/inspect_test.go +++ b/integration/service/inspect_test.go @@ -18,7 +18,7 @@ import ( ) func TestInspect(t *testing.T) { - skip.IfCondition(t, !testEnv.IsLocalDaemon()) + skip.IfCondition(t, testEnv.IsRemoteDaemon()) defer setupTest(t)() d := swarm.NewSwarm(t, testEnv) defer d.Stop(t) diff --git a/internal/test/environment/environment.go b/internal/test/environment/environment.go index bde4c0a1bc..16f6146334 100644 --- a/internal/test/environment/environment.go +++ b/internal/test/environment/environment.go @@ -96,7 +96,7 @@ func toSlash(path string) string { } // IsLocalDaemon is true if the daemon under test is on the same -// host as the CLI. +// host as the test process. // // Deterministically working out the environment in which CI is running // to evaluate whether the daemon is local or remote is not possible through @@ -115,6 +115,12 @@ func (e *Execution) IsLocalDaemon() bool { return os.Getenv("DOCKER_REMOTE_DAEMON") == "" } +// IsRemoteDaemon is true if the daemon under test is on different host +// as the test process. +func (e *Execution) IsRemoteDaemon() bool { + return !e.IsLocalDaemon() +} + // Print the execution details to stdout // TODO: print everything func (e *Execution) Print() {