github.com/rentongzhang/docker@v1.8.2-rc1/pkg/progressreader/progressreader_test.go (about) 1 package progressreader 2 3 import ( 4 "bufio" 5 "bytes" 6 "io" 7 "io/ioutil" 8 "testing" 9 10 "github.com/docker/docker/pkg/streamformatter" 11 ) 12 13 func TestOutputOnPrematureClose(t *testing.T) { 14 var outBuf bytes.Buffer 15 content := []byte("TESTING") 16 reader := ioutil.NopCloser(bytes.NewReader(content)) 17 writer := bufio.NewWriter(&outBuf) 18 19 prCfg := Config{ 20 In: reader, 21 Out: writer, 22 Formatter: streamformatter.NewStreamFormatter(), 23 Size: len(content), 24 NewLines: true, 25 ID: "Test", 26 Action: "Read", 27 } 28 pr := New(prCfg) 29 30 part := make([]byte, 4, 4) 31 _, err := io.ReadFull(pr, part) 32 if err != nil { 33 pr.Close() 34 t.Fatal(err) 35 } 36 37 if err := writer.Flush(); err != nil { 38 pr.Close() 39 t.Fatal(err) 40 } 41 42 tlen := outBuf.Len() 43 pr.Close() 44 if err := writer.Flush(); err != nil { 45 t.Fatal(err) 46 } 47 48 if outBuf.Len() == tlen { 49 t.Fatalf("Expected some output when closing prematurely") 50 } 51 } 52 53 func TestCompleteSilently(t *testing.T) { 54 var outBuf bytes.Buffer 55 content := []byte("TESTING") 56 reader := ioutil.NopCloser(bytes.NewReader(content)) 57 writer := bufio.NewWriter(&outBuf) 58 59 prCfg := Config{ 60 In: reader, 61 Out: writer, 62 Formatter: streamformatter.NewStreamFormatter(), 63 Size: len(content), 64 NewLines: true, 65 ID: "Test", 66 Action: "Read", 67 } 68 pr := New(prCfg) 69 70 out, err := ioutil.ReadAll(pr) 71 if err != nil { 72 pr.Close() 73 t.Fatal(err) 74 } 75 if string(out) != "TESTING" { 76 pr.Close() 77 t.Fatalf("Unexpected output %q from reader", string(out)) 78 } 79 80 if err := writer.Flush(); err != nil { 81 pr.Close() 82 t.Fatal(err) 83 } 84 85 tlen := outBuf.Len() 86 pr.Close() 87 if err := writer.Flush(); err != nil { 88 t.Fatal(err) 89 } 90 91 if outBuf.Len() > tlen { 92 t.Fatalf("Should have closed silently when read is complete") 93 } 94 }