update_test.go 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package container // import "github.com/docker/docker/integration/container"
  2. import (
  3. "context"
  4. "testing"
  5. "time"
  6. containertypes "github.com/docker/docker/api/types/container"
  7. "github.com/docker/docker/integration/internal/container"
  8. "gotest.tools/assert"
  9. is "gotest.tools/assert/cmp"
  10. "gotest.tools/poll"
  11. )
  12. func TestUpdateRestartPolicy(t *testing.T) {
  13. defer setupTest(t)()
  14. client := testEnv.APIClient()
  15. ctx := context.Background()
  16. cID := container.Run(t, ctx, client, container.WithCmd("sh", "-c", "sleep 1 && false"), func(c *container.TestContainerConfig) {
  17. c.HostConfig.RestartPolicy = containertypes.RestartPolicy{
  18. Name: "on-failure",
  19. MaximumRetryCount: 3,
  20. }
  21. })
  22. _, err := client.ContainerUpdate(ctx, cID, containertypes.UpdateConfig{
  23. RestartPolicy: containertypes.RestartPolicy{
  24. Name: "on-failure",
  25. MaximumRetryCount: 5,
  26. },
  27. })
  28. assert.NilError(t, err)
  29. timeout := 60 * time.Second
  30. if testEnv.OSType == "windows" {
  31. timeout = 180 * time.Second
  32. }
  33. poll.WaitOn(t, container.IsInState(ctx, client, cID, "exited"), poll.WithDelay(100*time.Millisecond), poll.WithTimeout(timeout))
  34. inspect, err := client.ContainerInspect(ctx, cID)
  35. assert.NilError(t, err)
  36. assert.Check(t, is.Equal(inspect.RestartCount, 5))
  37. assert.Check(t, is.Equal(inspect.HostConfig.RestartPolicy.MaximumRetryCount, 5))
  38. }
  39. func TestUpdateRestartWithAutoRemove(t *testing.T) {
  40. defer setupTest(t)()
  41. client := testEnv.APIClient()
  42. ctx := context.Background()
  43. cID := container.Run(t, ctx, client, func(c *container.TestContainerConfig) {
  44. c.HostConfig.AutoRemove = true
  45. })
  46. _, err := client.ContainerUpdate(ctx, cID, containertypes.UpdateConfig{
  47. RestartPolicy: containertypes.RestartPolicy{
  48. Name: "always",
  49. },
  50. })
  51. assert.Check(t, is.ErrorContains(err, "Restart policy cannot be updated because AutoRemove is enabled for the container"))
  52. }