diff options
author | Bjorn Neergaard <bneergaard@mirantis.com> | 2023-03-23 12:19:59 -0600 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-03-23 12:19:59 -0600 |
commit | 219f21bf07502b447095649b5a2764661737f164 (patch) | |
tree | 4204cb9b98e061a7af184c263541e260c7c2585b | |
parent | a1fd2f22f6ee07ab5bf241e7b33c75e395bfa9e5 (diff) | |
parent | c6bf3071fee48b79c2d48faf8855b8afe0a1e951 (diff) | |
download | docker-219f21bf07502b447095649b5a2764661737f164.tar.gz |
Merge pull request #45196 from vvoland/integration-restart-race-23v23.0.2
[backport 23.0] TestDaemonRestartKillContainers: Fix races
-rw-r--r-- | integration/container/restart_test.go | 17 | ||||
-rw-r--r-- | testutil/daemon/daemon.go | 20 |
2 files changed, 18 insertions, 19 deletions
diff --git a/integration/container/restart_test.go b/integration/container/restart_test.go index 201c2d6344..3a6155003a 100644 --- a/integration/container/restart_test.go +++ b/integration/container/restart_test.go @@ -76,11 +76,10 @@ func TestDaemonRestartKillContainers(t *testing.T) { d.Stop(t) }, } { + tc := tc + liveRestoreEnabled := liveRestoreEnabled + stopDaemon := stopDaemon t.Run(fmt.Sprintf("live-restore=%v/%s/%s", liveRestoreEnabled, tc.desc, fnName), func(t *testing.T) { - c := tc - liveRestoreEnabled := liveRestoreEnabled - stopDaemon := stopDaemon - t.Parallel() d := daemon.New(t) @@ -95,11 +94,11 @@ func TestDaemonRestartKillContainers(t *testing.T) { defer d.Stop(t) ctx := context.Background() - resp, err := client.ContainerCreate(ctx, c.config, c.hostConfig, nil, nil, "") + resp, err := client.ContainerCreate(ctx, tc.config, tc.hostConfig, nil, nil, "") assert.NilError(t, err) defer client.ContainerRemove(ctx, resp.ID, types.ContainerRemoveOptions{Force: true}) - if c.xStart { + if tc.xStart { err = client.ContainerStart(ctx, resp.ID, types.ContainerStartOptions{}) assert.NilError(t, err) } @@ -107,9 +106,9 @@ func TestDaemonRestartKillContainers(t *testing.T) { stopDaemon(t, d) d.Start(t, args...) - expected := c.xRunning + expected := tc.xRunning if liveRestoreEnabled { - expected = c.xRunningLiveRestore + expected = tc.xRunningLiveRestore } var running bool @@ -125,7 +124,7 @@ func TestDaemonRestartKillContainers(t *testing.T) { } assert.Equal(t, expected, running, "got unexpected running state, expected %v, got: %v", expected, running) - if c.xHealthCheck { + if tc.xHealthCheck { startTime := time.Now() ctxPoll, cancel := context.WithTimeout(ctx, 30*time.Second) defer cancel() diff --git a/testutil/daemon/daemon.go b/testutil/daemon/daemon.go index a78c138786..2a1f5b3dc8 100644 --- a/testutil/daemon/daemon.go +++ b/testutil/daemon/daemon.go @@ -392,25 +392,27 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error { } d.args = append(d.args, providedArgs...) - d.cmd = exec.Command(dockerdBinary, d.args...) - d.cmd.Env = append(os.Environ(), "DOCKER_SERVICE_PREFER_OFFLINE_IMAGE=1") - d.cmd.Env = append(d.cmd.Env, d.extraEnv...) - d.cmd.Stdout = out - d.cmd.Stderr = out + cmd := exec.Command(dockerdBinary, d.args...) + cmd.Env = append(os.Environ(), "DOCKER_SERVICE_PREFER_OFFLINE_IMAGE=1") + cmd.Env = append(cmd.Env, d.extraEnv...) + cmd.Stdout = out + cmd.Stderr = out d.logFile = out if d.rootlessUser != nil { // sudo requires this for propagating signals - setsid(d.cmd) + setsid(cmd) } - if err := d.cmd.Start(); err != nil { + if err := cmd.Start(); err != nil { return errors.Wrapf(err, "[%s] could not start daemon container", d.id) } wait := make(chan error, 1) + d.cmd = cmd + d.Wait = wait go func() { - ret := d.cmd.Wait() + ret := cmd.Wait() d.log.Logf("[%s] exiting daemon", d.id) // If we send before logging, we might accidentally log _after_ the test is done. // As of Go 1.12, this incurs a panic instead of silently being dropped. @@ -418,8 +420,6 @@ func (d *Daemon) StartWithLogFile(out *os.File, providedArgs ...string) error { close(wait) }() - d.Wait = wait - clientConfig, err := d.getClientConfig() if err != nil { return err |