docker_cli_save_load_test.go 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. package main
  2. import (
  3. "fmt"
  4. "os"
  5. "os/exec"
  6. "testing"
  7. )
  8. // save a repo and try to load it using stdout
  9. func TestSaveAndLoadRepoStdout(t *testing.T) {
  10. runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true")
  11. out, _, err := runCommandWithOutput(runCmd)
  12. errorOut(err, t, fmt.Sprintf("failed to create a container: %v %v", out, err))
  13. cleanedContainerID := stripTrailingCharacters(out)
  14. repoName := "foobar-save-load-test"
  15. inspectCmd := exec.Command(dockerBinary, "inspect", cleanedContainerID)
  16. out, _, err = runCommandWithOutput(inspectCmd)
  17. errorOut(err, t, fmt.Sprintf("output should've been a container id: %v %v", cleanedContainerID, err))
  18. commitCmd := exec.Command(dockerBinary, "commit", cleanedContainerID, repoName)
  19. out, _, err = runCommandWithOutput(commitCmd)
  20. errorOut(err, t, fmt.Sprintf("failed to commit container: %v %v", out, err))
  21. inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
  22. before, _, err := runCommandWithOutput(inspectCmd)
  23. errorOut(err, t, fmt.Sprintf("the repo should exist before saving it: %v %v", before, err))
  24. saveCmdTemplate := `%v save %v > /tmp/foobar-save-load-test.tar`
  25. saveCmdFinal := fmt.Sprintf(saveCmdTemplate, dockerBinary, repoName)
  26. saveCmd := exec.Command("bash", "-c", saveCmdFinal)
  27. out, _, err = runCommandWithOutput(saveCmd)
  28. errorOut(err, t, fmt.Sprintf("failed to save repo: %v %v", out, err))
  29. deleteImages(repoName)
  30. loadCmdFinal := `cat /tmp/foobar-save-load-test.tar | docker load`
  31. loadCmd := exec.Command("bash", "-c", loadCmdFinal)
  32. out, _, err = runCommandWithOutput(loadCmd)
  33. errorOut(err, t, fmt.Sprintf("failed to load repo: %v %v", out, err))
  34. inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
  35. after, _, err := runCommandWithOutput(inspectCmd)
  36. errorOut(err, t, fmt.Sprintf("the repo should exist after loading it: %v %v", after, err))
  37. if before != after {
  38. t.Fatalf("inspect is not the same after a save / load")
  39. }
  40. deleteContainer(cleanedContainerID)
  41. deleteImages(repoName)
  42. os.Remove("/tmp/foobar-save-load-test.tar")
  43. logDone("save - save a repo using stdout")
  44. logDone("load - load a repo using stdout")
  45. }
  46. // save a repo and try to load it using flags
  47. func TestSaveAndLoadRepoFlags(t *testing.T) {
  48. runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true")
  49. out, _, err := runCommandWithOutput(runCmd)
  50. errorOut(err, t, fmt.Sprintf("failed to create a container: %v %v", out, err))
  51. cleanedContainerID := stripTrailingCharacters(out)
  52. repoName := "foobar-save-load-test"
  53. inspectCmd := exec.Command(dockerBinary, "inspect", cleanedContainerID)
  54. out, _, err = runCommandWithOutput(inspectCmd)
  55. errorOut(err, t, fmt.Sprintf("output should've been a container id: %v %v", cleanedContainerID, err))
  56. commitCmd := exec.Command(dockerBinary, "commit", cleanedContainerID, repoName)
  57. out, _, err = runCommandWithOutput(commitCmd)
  58. errorOut(err, t, fmt.Sprintf("failed to commit container: %v %v", out, err))
  59. inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
  60. before, _, err := runCommandWithOutput(inspectCmd)
  61. errorOut(err, t, fmt.Sprintf("the repo should exist before saving it: %v %v", before, err))
  62. saveCmdTemplate := `%v save -o /tmp/foobar-save-load-test.tar %v`
  63. saveCmdFinal := fmt.Sprintf(saveCmdTemplate, dockerBinary, repoName)
  64. saveCmd := exec.Command("bash", "-c", saveCmdFinal)
  65. out, _, err = runCommandWithOutput(saveCmd)
  66. errorOut(err, t, fmt.Sprintf("failed to save repo: %v %v", out, err))
  67. deleteImages(repoName)
  68. loadCmdFinal := `docker load -i /tmp/foobar-save-load-test.tar`
  69. loadCmd := exec.Command("bash", "-c", loadCmdFinal)
  70. out, _, err = runCommandWithOutput(loadCmd)
  71. errorOut(err, t, fmt.Sprintf("failed to load repo: %v %v", out, err))
  72. inspectCmd = exec.Command(dockerBinary, "inspect", repoName)
  73. after, _, err := runCommandWithOutput(inspectCmd)
  74. errorOut(err, t, fmt.Sprintf("the repo should exist after loading it: %v %v", after, err))
  75. if before != after {
  76. t.Fatalf("inspect is not the same after a save / load")
  77. }
  78. deleteContainer(cleanedContainerID)
  79. deleteImages(repoName)
  80. os.Remove("/tmp/foobar-save-load-test.tar")
  81. logDone("save - save a repo using -o")
  82. logDone("load - load a repo using -i")
  83. }