TestDaemonRestartIpcMode: modernize

Move the test case from integration-cli to integration.

The test logic itself has not changed, except these
two things:

* the new test sets default-ipc-mode via command line
  rather than via daemon.json (less code);
* the new test uses current API version.

Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
Kir Kolyshkin 2019-02-14 17:08:00 -08:00
parent f664df01d1
commit 9fd765f07c
2 changed files with 44 additions and 41 deletions

View file

@ -2896,47 +2896,6 @@ func (s *DockerDaemonSuite) TestDaemonStartWithIpcModes(c *check.C) {
} }
} }
// TestDaemonRestartIpcMode makes sure a container keeps its ipc mode
// (derived from daemon default) even after the daemon is restarted
// with a different default ipc mode.
func (s *DockerDaemonSuite) TestDaemonRestartIpcMode(c *check.C) {
f, err := ioutil.TempFile("", "test-daemon-ipc-config-restart")
c.Assert(err, checker.IsNil)
file := f.Name()
defer os.Remove(file)
c.Assert(f.Close(), checker.IsNil)
config := []byte(`{"default-ipc-mode": "private"}`)
c.Assert(ioutil.WriteFile(file, config, 0644), checker.IsNil)
s.d.StartWithBusybox(c, "--config-file", file)
// check the container is created with private ipc mode as per daemon default
name := "ipc1"
_, err = s.d.Cmd("run", "-d", "--name", name, "--restart=always", "busybox", "top")
c.Assert(err, checker.IsNil)
m, err := s.d.InspectField(name, ".HostConfig.IpcMode")
c.Assert(err, check.IsNil)
c.Assert(m, checker.Equals, "private")
// restart the daemon with shareable default ipc mode
config = []byte(`{"default-ipc-mode": "shareable"}`)
c.Assert(ioutil.WriteFile(file, config, 0644), checker.IsNil)
s.d.Restart(c, "--config-file", file)
// check the container is still having private ipc mode
m, err = s.d.InspectField(name, ".HostConfig.IpcMode")
c.Assert(err, check.IsNil)
c.Assert(m, checker.Equals, "private")
// check a new container is created with shareable ipc mode as per new daemon default
name = "ipc2"
_, err = s.d.Cmd("run", "-d", "--name", name, "busybox", "top")
c.Assert(err, checker.IsNil)
m, err = s.d.InspectField(name, ".HostConfig.IpcMode")
c.Assert(err, check.IsNil)
c.Assert(m, checker.Equals, "shareable")
}
// TestFailedPluginRemove makes sure that a failed plugin remove does not block // TestFailedPluginRemove makes sure that a failed plugin remove does not block
// the daemon from starting // the daemon from starting
func (s *DockerDaemonSuite) TestFailedPluginRemove(c *check.C) { func (s *DockerDaemonSuite) TestFailedPluginRemove(c *check.C) {

View file

@ -13,6 +13,7 @@ import (
"github.com/docker/docker/internal/test/daemon" "github.com/docker/docker/internal/test/daemon"
"golang.org/x/sys/unix" "golang.org/x/sys/unix"
"gotest.tools/assert" "gotest.tools/assert"
is "gotest.tools/assert/cmp"
"gotest.tools/skip" "gotest.tools/skip"
) )
@ -76,3 +77,46 @@ func getContainerdShimPid(t *testing.T, c types.ContainerJSON) int {
assert.Check(t, ppid != 1, "got unexpected ppid") assert.Check(t, ppid != 1, "got unexpected ppid")
return ppid return ppid
} }
// TestDaemonRestartIpcMode makes sure a container keeps its ipc mode
// (derived from daemon default) even after the daemon is restarted
// with a different default ipc mode.
func TestDaemonRestartIpcMode(t *testing.T) {
skip.If(t, testEnv.IsRemoteDaemon, "cannot start daemon on remote test run")
skip.If(t, testEnv.DaemonInfo.OSType == "windows")
t.Parallel()
d := daemon.New(t)
d.StartWithBusybox(t, "--iptables=false", "--default-ipc-mode=private")
defer d.Stop(t)
c := d.NewClientT(t)
ctx := context.Background()
// check the container is created with private ipc mode as per daemon default
cID := container.Run(t, ctx, c,
container.WithCmd("top"),
container.WithRestartPolicy("always"),
)
defer c.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{Force: true})
inspect, err := c.ContainerInspect(ctx, cID)
assert.NilError(t, err)
assert.Check(t, is.Equal(string(inspect.HostConfig.IpcMode), "private"))
// restart the daemon with shareable default ipc mode
d.Restart(t, "--iptables=false", "--default-ipc-mode=shareable")
// check the container is still having private ipc mode
inspect, err = c.ContainerInspect(ctx, cID)
assert.NilError(t, err)
assert.Check(t, is.Equal(string(inspect.HostConfig.IpcMode), "private"))
// check a new container is created with shareable ipc mode as per new daemon default
cID = container.Run(t, ctx, c)
defer c.ContainerRemove(ctx, cID, types.ContainerRemoveOptions{Force: true})
inspect, err = c.ContainerInspect(ctx, cID)
assert.NilError(t, err)
assert.Check(t, is.Equal(string(inspect.HostConfig.IpcMode), "shareable"))
}