mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #29739 from tonistiigi/add-restart-liverestore-test
Add test TestRestartPolicyWithLiveRestore
This commit is contained in:
commit
ec6d322d37
1 changed files with 59 additions and 2 deletions
|
@ -27,7 +27,7 @@ import (
|
|||
"github.com/docker/docker/pkg/stringid"
|
||||
"github.com/docker/docker/pkg/testutil"
|
||||
icmd "github.com/docker/docker/pkg/testutil/cmd"
|
||||
"github.com/docker/go-units"
|
||||
units "github.com/docker/go-units"
|
||||
"github.com/docker/libnetwork/iptables"
|
||||
"github.com/docker/libtrust"
|
||||
"github.com/go-check/check"
|
||||
|
@ -2892,5 +2892,62 @@ func (s *DockerDaemonSuite) TestRemoveContainerAfterLiveRestore(c *check.C) {
|
|||
|
||||
out, err = s.d.Cmd("rm", "top")
|
||||
c.Assert(err, check.IsNil, check.Commentf("Output: %s", out))
|
||||
|
||||
}
|
||||
|
||||
// #29598
|
||||
func (s *DockerDaemonSuite) TestRestartPolicyWithLiveRestore(c *check.C) {
|
||||
testRequires(c, DaemonIsLinux, SameHostDaemon)
|
||||
s.d.StartWithBusybox(c, "--live-restore")
|
||||
|
||||
out, err := s.d.Cmd("run", "-d", "--restart", "always", "busybox", "top")
|
||||
c.Assert(err, check.IsNil, check.Commentf("output: %s", out))
|
||||
id := strings.TrimSpace(out)
|
||||
|
||||
type state struct {
|
||||
Running bool
|
||||
StartedAt time.Time
|
||||
}
|
||||
out, err = s.d.Cmd("inspect", "-f", "{{json .State}}", id)
|
||||
c.Assert(err, checker.IsNil, check.Commentf("output: %s", out))
|
||||
|
||||
var origState state
|
||||
err = json.Unmarshal([]byte(strings.TrimSpace(out)), &origState)
|
||||
c.Assert(err, checker.IsNil)
|
||||
|
||||
s.d.Restart(c, "--live-restore")
|
||||
|
||||
pid, err := s.d.Cmd("inspect", "-f", "{{.State.Pid}}", id)
|
||||
c.Assert(err, check.IsNil)
|
||||
pidint, err := strconv.Atoi(strings.TrimSpace(pid))
|
||||
c.Assert(err, check.IsNil)
|
||||
c.Assert(pidint, checker.GreaterThan, 0)
|
||||
c.Assert(syscall.Kill(pidint, syscall.SIGKILL), check.IsNil)
|
||||
|
||||
ticker := time.NewTicker(50 * time.Millisecond)
|
||||
timeout := time.After(10 * time.Second)
|
||||
|
||||
for range ticker.C {
|
||||
select {
|
||||
case <-timeout:
|
||||
c.Fatal("timeout waiting for container restart")
|
||||
default:
|
||||
}
|
||||
|
||||
out, err := s.d.Cmd("inspect", "-f", "{{json .State}}", id)
|
||||
c.Assert(err, checker.IsNil, check.Commentf("output: %s", out))
|
||||
|
||||
var newState state
|
||||
err = json.Unmarshal([]byte(strings.TrimSpace(out)), &newState)
|
||||
c.Assert(err, checker.IsNil)
|
||||
|
||||
if !newState.Running {
|
||||
continue
|
||||
}
|
||||
if newState.StartedAt.After(origState.StartedAt) {
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
out, err = s.d.Cmd("stop", id)
|
||||
c.Assert(err, check.IsNil, check.Commentf("output: %s", out))
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue