update_test.go 2.0 KB

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