github.com/grange74/docker@v1.6.0-rc3/integration-cli/docker_cli_save_load_unix_test.go (about) 1 // +build !windows 2 3 package main 4 5 import ( 6 "bytes" 7 "fmt" 8 "os" 9 "os/exec" 10 "testing" 11 12 "github.com/docker/docker/vendor/src/github.com/kr/pty" 13 ) 14 15 // save a repo and try to load it using stdout 16 func TestSaveAndLoadRepoStdout(t *testing.T) { 17 runCmd := exec.Command(dockerBinary, "run", "-d", "busybox", "true") 18 out, _, err := runCommandWithOutput(runCmd) 19 if err != nil { 20 t.Fatalf("failed to create a container: %s, %v", out, err) 21 } 22 23 cleanedContainerID := stripTrailingCharacters(out) 24 25 repoName := "foobar-save-load-test" 26 27 inspectCmd := exec.Command(dockerBinary, "inspect", cleanedContainerID) 28 if out, _, err = runCommandWithOutput(inspectCmd); err != nil { 29 t.Fatalf("output should've been a container id: %s, %v", out, err) 30 } 31 32 commitCmd := exec.Command(dockerBinary, "commit", cleanedContainerID, repoName) 33 if out, _, err = runCommandWithOutput(commitCmd); err != nil { 34 t.Fatalf("failed to commit container: %s, %v", out, err) 35 } 36 37 inspectCmd = exec.Command(dockerBinary, "inspect", repoName) 38 before, _, err := runCommandWithOutput(inspectCmd) 39 if err != nil { 40 t.Fatalf("the repo should exist before saving it: %s, %v", before, err) 41 } 42 43 saveCmdTemplate := `%v save %v > /tmp/foobar-save-load-test.tar` 44 saveCmdFinal := fmt.Sprintf(saveCmdTemplate, dockerBinary, repoName) 45 saveCmd := exec.Command("bash", "-c", saveCmdFinal) 46 if out, _, err = runCommandWithOutput(saveCmd); err != nil { 47 t.Fatalf("failed to save repo: %s, %v", out, err) 48 } 49 50 deleteImages(repoName) 51 52 loadCmdFinal := `cat /tmp/foobar-save-load-test.tar | docker load` 53 loadCmd := exec.Command("bash", "-c", loadCmdFinal) 54 if out, _, err = runCommandWithOutput(loadCmd); err != nil { 55 t.Fatalf("failed to load repo: %s, %v", out, err) 56 } 57 58 inspectCmd = exec.Command(dockerBinary, "inspect", repoName) 59 after, _, err := runCommandWithOutput(inspectCmd) 60 if err != nil { 61 t.Fatalf("the repo should exist after loading it: %s %v", after, err) 62 } 63 64 if before != after { 65 t.Fatalf("inspect is not the same after a save / load") 66 } 67 68 deleteContainer(cleanedContainerID) 69 deleteImages(repoName) 70 71 os.Remove("/tmp/foobar-save-load-test.tar") 72 73 logDone("save - save/load a repo using stdout") 74 75 pty, tty, err := pty.Open() 76 if err != nil { 77 t.Fatalf("Could not open pty: %v", err) 78 } 79 cmd := exec.Command(dockerBinary, "save", repoName) 80 cmd.Stdin = tty 81 cmd.Stdout = tty 82 cmd.Stderr = tty 83 if err := cmd.Start(); err != nil { 84 t.Fatalf("start err: %v", err) 85 } 86 if err := cmd.Wait(); err == nil { 87 t.Fatal("did not break writing to a TTY") 88 } 89 90 buf := make([]byte, 1024) 91 92 n, err := pty.Read(buf) 93 if err != nil { 94 t.Fatal("could not read tty output") 95 } 96 97 if !bytes.Contains(buf[:n], []byte("Cowardly refusing")) { 98 t.Fatal("help output is not being yielded", out) 99 } 100 101 logDone("save - do not save to a tty") 102 }