diff_test.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  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. "gotest.tools/v3/poll"
  9. "gotest.tools/v3/skip"
  10. )
  11. func TestDiff(t *testing.T) {
  12. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "cannot diff a running container on Windows")
  13. ctx := setupTest(t)
  14. apiClient := testEnv.APIClient()
  15. cID := container.Run(ctx, t, apiClient, container.WithCmd("sh", "-c", `mkdir /foo; echo xyzzy > /foo/bar`))
  16. expected := []containertypes.FilesystemChange{
  17. {Kind: containertypes.ChangeAdd, Path: "/foo"},
  18. {Kind: containertypes.ChangeAdd, Path: "/foo/bar"},
  19. }
  20. items, err := apiClient.ContainerDiff(ctx, cID)
  21. assert.NilError(t, err)
  22. assert.DeepEqual(t, expected, items)
  23. }
  24. func TestDiffStoppedContainer(t *testing.T) {
  25. // There's no way in Windows to differentiate between an Add or a Modify,
  26. // and all files are under a "Files/" prefix.
  27. skip.If(t, testEnv.DaemonInfo.OSType == "windows", "FIXME")
  28. ctx := setupTest(t)
  29. apiClient := testEnv.APIClient()
  30. cID := container.Run(ctx, t, apiClient, container.WithCmd("sh", "-c", `mkdir /foo; echo xyzzy > /foo/bar`))
  31. poll.WaitOn(t, container.IsInState(ctx, apiClient, cID, "exited"), poll.WithDelay(100*time.Millisecond), poll.WithTimeout(60*time.Second))
  32. expected := []containertypes.FilesystemChange{
  33. {Kind: containertypes.ChangeAdd, Path: "/foo"},
  34. {Kind: containertypes.ChangeAdd, Path: "/foo/bar"},
  35. }
  36. if testEnv.DaemonInfo.OSType == "windows" {
  37. expected = []containertypes.FilesystemChange{
  38. {Kind: containertypes.ChangeModify, Path: "Files/foo"},
  39. {Kind: containertypes.ChangeModify, Path: "Files/foo/bar"},
  40. }
  41. }
  42. items, err := apiClient.ContainerDiff(ctx, cID)
  43. assert.NilError(t, err)
  44. assert.DeepEqual(t, expected, items)
  45. }