update_test.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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, container.WithAutoRemove)
  44. _, err := client.ContainerUpdate(ctx, cID, containertypes.UpdateConfig{
  45. RestartPolicy: containertypes.RestartPolicy{
  46. Name: "always",
  47. },
  48. })
  49. assert.Check(t, is.ErrorContains(err, "Restart policy cannot be updated because AutoRemove is enabled for the container"))
  50. }