github.com/vieux/docker@v0.6.3-0.20161004191708-e097c2a938c7/integration-cli/docker_cli_save_load_unix_test.go (about) 1 // +build !windows 2 3 package main 4 5 import ( 6 "fmt" 7 "io/ioutil" 8 "os" 9 "os/exec" 10 "strings" 11 12 "github.com/docker/docker/pkg/integration/checker" 13 "github.com/go-check/check" 14 "github.com/kr/pty" 15 ) 16 17 // save a repo and try to load it using stdout 18 func (s *DockerSuite) TestSaveAndLoadRepoStdout(c *check.C) { 19 name := "test-save-and-load-repo-stdout" 20 dockerCmd(c, "run", "--name", name, "busybox", "true") 21 22 repoName := "foobar-save-load-test" 23 before, _ := dockerCmd(c, "commit", name, repoName) 24 before = strings.TrimRight(before, "\n") 25 26 tmpFile, err := ioutil.TempFile("", "foobar-save-load-test.tar") 27 c.Assert(err, check.IsNil) 28 defer os.Remove(tmpFile.Name()) 29 30 saveCmd := exec.Command(dockerBinary, "save", repoName) 31 saveCmd.Stdout = tmpFile 32 33 _, err = runCommand(saveCmd) 34 c.Assert(err, check.IsNil) 35 36 tmpFile, err = os.Open(tmpFile.Name()) 37 c.Assert(err, check.IsNil) 38 defer tmpFile.Close() 39 40 deleteImages(repoName) 41 42 loadCmd := exec.Command(dockerBinary, "load") 43 loadCmd.Stdin = tmpFile 44 45 out, _, err := runCommandWithOutput(loadCmd) 46 c.Assert(err, check.IsNil, check.Commentf(out)) 47 48 after := inspectField(c, repoName, "Id") 49 after = strings.TrimRight(after, "\n") 50 51 c.Assert(after, check.Equals, before) //inspect is not the same after a save / load 52 53 deleteImages(repoName) 54 55 pty, tty, err := pty.Open() 56 c.Assert(err, check.IsNil) 57 cmd := exec.Command(dockerBinary, "save", repoName) 58 cmd.Stdin = tty 59 cmd.Stdout = tty 60 cmd.Stderr = tty 61 c.Assert(cmd.Start(), check.IsNil) 62 c.Assert(cmd.Wait(), check.NotNil) //did not break writing to a TTY 63 64 buf := make([]byte, 1024) 65 66 n, err := pty.Read(buf) 67 c.Assert(err, check.IsNil) //could not read tty output 68 c.Assert(string(buf[:n]), checker.Contains, "Cowardly refusing", check.Commentf("help output is not being yielded", out)) 69 } 70 71 func (s *DockerSuite) TestSaveAndLoadWithProgressBar(c *check.C) { 72 name := "test-load" 73 _, err := buildImage(name, ` 74 FROM busybox 75 RUN touch aa 76 `, true) 77 c.Assert(err, check.IsNil) 78 79 tmptar := name + ".tar" 80 dockerCmd(c, "save", "-o", tmptar, name) 81 defer os.Remove(tmptar) 82 83 dockerCmd(c, "rmi", name) 84 dockerCmd(c, "tag", "busybox", name) 85 out, _ := dockerCmd(c, "load", "-i", tmptar) 86 expected := fmt.Sprintf("The image %s:latest already exists, renaming the old one with ID", name) 87 c.Assert(out, checker.Contains, expected) 88 }