remove_test.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. package image // import "github.com/docker/docker/integration/image"
  2. import (
  3. "context"
  4. "strings"
  5. "testing"
  6. "github.com/docker/docker/api/types"
  7. "github.com/docker/docker/integration/internal/container"
  8. "gotest.tools/v3/assert"
  9. is "gotest.tools/v3/assert/cmp"
  10. )
  11. func TestRemoveImageOrphaning(t *testing.T) {
  12. defer setupTest(t)()
  13. ctx := context.Background()
  14. client := testEnv.APIClient()
  15. imgName := strings.ToLower(t.Name())
  16. // Create a container from busybox, and commit a small change so we have a new image
  17. cID1 := container.Create(ctx, t, client, container.WithCmd(""))
  18. commitResp1, err := client.ContainerCommit(ctx, cID1, types.ContainerCommitOptions{
  19. Changes: []string{`ENTRYPOINT ["true"]`},
  20. Reference: imgName,
  21. })
  22. assert.NilError(t, err)
  23. // verifies that reference now points to first image
  24. resp, _, err := client.ImageInspectWithRaw(ctx, imgName)
  25. assert.NilError(t, err)
  26. assert.Check(t, is.Equal(resp.ID, commitResp1.ID))
  27. // Create a container from created image, and commit a small change with same reference name
  28. cID2 := container.Create(ctx, t, client, container.WithImage(imgName), container.WithCmd(""))
  29. commitResp2, err := client.ContainerCommit(ctx, cID2, types.ContainerCommitOptions{
  30. Changes: []string{`LABEL Maintainer="Integration Tests"`},
  31. Reference: imgName,
  32. })
  33. assert.NilError(t, err)
  34. // verifies that reference now points to second image
  35. resp, _, err = client.ImageInspectWithRaw(ctx, imgName)
  36. assert.NilError(t, err)
  37. assert.Check(t, is.Equal(resp.ID, commitResp2.ID))
  38. // try to remove the image, should not error out.
  39. _, err = client.ImageRemove(ctx, imgName, types.ImageRemoveOptions{})
  40. assert.NilError(t, err)
  41. // check if the first image is still there
  42. resp, _, err = client.ImageInspectWithRaw(ctx, commitResp1.ID)
  43. assert.NilError(t, err)
  44. assert.Check(t, is.Equal(resp.ID, commitResp1.ID))
  45. // check if the second image has been deleted
  46. _, _, err = client.ImageInspectWithRaw(ctx, commitResp2.ID)
  47. assert.Check(t, is.ErrorContains(err, "No such image:"))
  48. }