update_test.go 1.8 KB

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