docker_cli_rmi_test.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package main
  2. import (
  3. "fmt"
  4. "os/exec"
  5. "strings"
  6. "testing"
  7. )
  8. func TestImageRemoveWithContainerFails(t *testing.T) {
  9. errSubstr := "is using it"
  10. // create a container
  11. runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true")
  12. out, _, err := runCommandWithOutput(runCmd)
  13. errorOut(err, t, fmt.Sprintf("failed to create a container: %v %v", out, err))
  14. cleanedContainerID := stripTrailingCharacters(out)
  15. // try to delete the image
  16. runCmd = exec.Command(dockerBinary, "rmi", "busybox")
  17. out, _, err = runCommandWithOutput(runCmd)
  18. if err == nil {
  19. t.Fatalf("Container %q is using image, should not be able to rmi: %q", cleanedContainerID, out)
  20. }
  21. if !strings.Contains(out, errSubstr) {
  22. t.Fatalf("Container %q is using image, error message should contain %q: %v", cleanedContainerID, errSubstr, out)
  23. }
  24. // make sure it didn't delete the busybox name
  25. images, _, _ := cmd(t, "images")
  26. if !strings.Contains(images, "busybox") {
  27. t.Fatalf("The name 'busybox' should not have been removed from images: %q", images)
  28. }
  29. deleteContainer(cleanedContainerID)
  30. logDone("rmi- container using image while rmi, should not remove image name")
  31. }
  32. func TestImageTagRemove(t *testing.T) {
  33. imagesBefore, _, _ := cmd(t, "images", "-a")
  34. cmd(t, "tag", "busybox", "utest:tag1")
  35. cmd(t, "tag", "busybox", "utest/docker:tag2")
  36. cmd(t, "tag", "busybox", "utest:5000/docker:tag3")
  37. {
  38. imagesAfter, _, _ := cmd(t, "images", "-a")
  39. if nLines(imagesAfter) != nLines(imagesBefore)+3 {
  40. t.Fatalf("before: %q\n\nafter: %q\n", imagesBefore, imagesAfter)
  41. }
  42. }
  43. cmd(t, "rmi", "utest/docker:tag2")
  44. {
  45. imagesAfter, _, _ := cmd(t, "images", "-a")
  46. if nLines(imagesAfter) != nLines(imagesBefore)+2 {
  47. t.Fatalf("before: %q\n\nafter: %q\n", imagesBefore, imagesAfter)
  48. }
  49. }
  50. cmd(t, "rmi", "utest:5000/docker:tag3")
  51. {
  52. imagesAfter, _, _ := cmd(t, "images", "-a")
  53. if nLines(imagesAfter) != nLines(imagesBefore)+1 {
  54. t.Fatalf("before: %q\n\nafter: %q\n", imagesBefore, imagesAfter)
  55. }
  56. }
  57. cmd(t, "rmi", "utest:tag1")
  58. {
  59. imagesAfter, _, _ := cmd(t, "images", "-a")
  60. if nLines(imagesAfter) != nLines(imagesBefore)+0 {
  61. t.Fatalf("before: %q\n\nafter: %q\n", imagesBefore, imagesAfter)
  62. }
  63. }
  64. logDone("tag,rmi- tagging the same images multiple times then removing tags")
  65. }