mounts_test.go 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package volumes
  2. import (
  3. "os"
  4. "testing"
  5. "github.com/docker/docker/api/types"
  6. "github.com/docker/docker/testutil"
  7. "github.com/docker/docker/testutil/daemon"
  8. "github.com/docker/docker/testutil/fixtures/plugin"
  9. "gotest.tools/v3/assert"
  10. "gotest.tools/v3/skip"
  11. )
  12. // TestPluginWithDevMounts tests very specific regression caused by mounts ordering
  13. // (sorted in the daemon). See #36698
  14. func TestPluginWithDevMounts(t *testing.T) {
  15. skip.If(t, testEnv.IsRemoteDaemon, "cannot run daemon when remote daemon")
  16. skip.If(t, testEnv.DaemonInfo.OSType == "windows")
  17. skip.If(t, testEnv.IsRootless)
  18. t.Parallel()
  19. ctx := testutil.StartSpan(baseContext, t)
  20. d := daemon.New(t)
  21. d.Start(t, "--iptables=false")
  22. defer d.Stop(t)
  23. c := d.NewClientT(t)
  24. testDir, err := os.MkdirTemp("", "test-dir")
  25. assert.NilError(t, err)
  26. defer os.RemoveAll(testDir)
  27. createPlugin(ctx, t, c, "test", "dummy", asVolumeDriver, func(c *plugin.Config) {
  28. root := "/"
  29. dev := "/dev"
  30. mounts := []types.PluginMount{
  31. {Type: "bind", Source: &root, Destination: "/host", Options: []string{"rbind"}},
  32. {Type: "bind", Source: &dev, Destination: "/dev", Options: []string{"rbind"}},
  33. {Type: "bind", Source: &testDir, Destination: "/etc/foo", Options: []string{"rbind"}},
  34. }
  35. c.PluginConfig.Mounts = append(c.PluginConfig.Mounts, mounts...)
  36. c.PropagatedMount = "/propagated"
  37. c.Network = types.PluginConfigNetwork{Type: "host"}
  38. c.IpcHost = true
  39. })
  40. err = c.PluginEnable(ctx, "test", types.PluginEnableOptions{Timeout: 30})
  41. assert.NilError(t, err)
  42. defer func() {
  43. err := c.PluginRemove(ctx, "test", types.PluginRemoveOptions{Force: true})
  44. assert.Check(t, err)
  45. }()
  46. p, _, err := c.PluginInspectWithRaw(ctx, "test")
  47. assert.NilError(t, err)
  48. assert.Assert(t, p.Enabled)
  49. }