package main import ( "fmt" "os" "os/exec" "testing" ) // save a repo and try to load it func TestSaveAndLoadRepo(t *testing.T) { runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true") out, _, err := runCommandWithOutput(runCmd) errorOut(err, t, fmt.Sprintf("failed to create a container: %v %v", out, err)) cleanedContainerID := stripTrailingCharacters(out) repoName := "foobar-save-load-test" inspectCmd := exec.Command(dockerBinary, "inspect", cleanedContainerID) out, _, err = runCommandWithOutput(inspectCmd) errorOut(err, t, fmt.Sprintf("output should've been a container id: %v %v", cleanedContainerID, err)) commitCmd := exec.Command(dockerBinary, "commit", cleanedContainerID, repoName) out, _, err = runCommandWithOutput(commitCmd) errorOut(err, t, fmt.Sprintf("failed to commit container: %v %v", out, err)) saveCmdTemplate := `%v save %v > /tmp/foobar-save-load-test.tar` saveCmdFinal := fmt.Sprintf(saveCmdTemplate, dockerBinary, repoName) saveCmd := exec.Command("bash", "-c", saveCmdFinal) out, _, err = runCommandWithOutput(saveCmd) errorOut(err, t, fmt.Sprintf("failed to save repo: %v %v", out, err)) deleteImages(repoName) loadCmdFinal := `cat /tmp/foobar-save-load-test.tar | docker load` loadCmd := exec.Command("bash", "-c", loadCmdFinal) out, _, err = runCommandWithOutput(loadCmd) errorOut(err, t, fmt.Sprintf("failed to load repo: %v %v", out, err)) inspectCmd = exec.Command(dockerBinary, "inspect", repoName) out, _, err = runCommandWithOutput(inspectCmd) errorOut(err, t, fmt.Sprintf("the repo should exist after loading it: %v %v", out, err)) deleteContainer(cleanedContainerID) deleteImages(repoName) os.Remove("/tmp/foobar-save-load-test.tar") logDone("save - save a repo") logDone("load - load a repo") }