archive_test.go
ef711962
 package docker
97a82094
 
 import (
58befe30
 	"io"
97a82094
 	"io/ioutil"
 	"os"
 	"os/exec"
 	"testing"
68278b66
 	"time"
97a82094
 )
 
58befe30
 func TestCmdStreamLargeStderr(t *testing.T) {
 	cmd := exec.Command("/bin/sh", "-c", "dd if=/dev/zero bs=1k count=1000 of=/dev/stderr; echo hello")
 	out, err := CmdStream(cmd)
 	if err != nil {
 		t.Fatalf("Failed to start command: " + err.Error())
 	}
68278b66
 	errCh := make(chan error)
 	go func() {
 		_, err := io.Copy(ioutil.Discard, out)
 		errCh <- err
 	}()
 	select {
 	case err := <-errCh:
 		if err != nil {
 			t.Fatalf("Command should not have failed (err=%s...)", err.Error()[:100])
 		}
 	case <-time.After(5 * time.Second):
 		t.Fatalf("Command did not complete in 5 seconds; probable deadlock")
58befe30
 	}
 }
 
97a82094
 func TestCmdStreamBad(t *testing.T) {
 	badCmd := exec.Command("/bin/sh", "-c", "echo hello; echo >&2 error couldn\\'t reverse the phase pulser; exit 1")
 	out, err := CmdStream(badCmd)
 	if err != nil {
 		t.Fatalf("Failed to start command: " + err.Error())
 	}
 	if output, err := ioutil.ReadAll(out); err == nil {
 		t.Fatalf("Command should have failed")
 	} else if err.Error() != "exit status 1: error couldn't reverse the phase pulser\n" {
 		t.Fatalf("Wrong error value (%s)", err.Error())
 	} else if s := string(output); s != "hello\n" {
 		t.Fatalf("Command output should be '%s', not '%s'", "hello\\n", output)
 	}
 }
 
 func TestCmdStreamGood(t *testing.T) {
 	cmd := exec.Command("/bin/sh", "-c", "echo hello; exit 0")
 	out, err := CmdStream(cmd)
 	if err != nil {
 		t.Fatal(err)
 	}
 	if output, err := ioutil.ReadAll(out); err != nil {
 		t.Fatalf("Command should not have failed (err=%s)", err)
 	} else if s := string(output); s != "hello\n" {
 		t.Fatalf("Command output should be '%s', not '%s'", "hello\\n", output)
 	}
 }
 
 func TestTarUntar(t *testing.T) {
 	archive, err := Tar(".", Uncompressed)
 	if err != nil {
 		t.Fatal(err)
 	}
 	tmp, err := ioutil.TempDir("", "docker-test-untar")
 	if err != nil {
 		t.Fatal(err)
 	}
 	defer os.RemoveAll(tmp)
 	if err := Untar(archive, tmp); err != nil {
 		t.Fatal(err)
 	}
 	if _, err := os.Stat(tmp); err != nil {
 		t.Fatalf("Error stating %s: %s", tmp, err.Error())
 	}
 }