summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBjorn Neergaard <bneergaard@mirantis.com>2023-03-23 12:19:59 -0600
committerGitHub <noreply@github.com>2023-03-23 12:19:59 -0600
commit219f21bf07502b447095649b5a2764661737f164 (patch)
tree4204cb9b98e061a7af184c263541e260c7c2585b
parenta1fd2f22f6ee07ab5bf241e7b33c75e395bfa9e5 (diff)
parentc6bf3071fee48b79c2d48faf8855b8afe0a1e951 (diff)
downloaddocker-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.go17
-rw-r--r--testutil/daemon/daemon.go20
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