Browse code

Add StdCopy happy path test: both reading and writing

Signed-off-by: Sergey Evstifeev <sergey.evstifeev@gmail.com>

Sergey Evstifeev authored on 2015/09/23 07:30:06
Showing 2 changed files
... ...
@@ -12,6 +12,8 @@ const (
12 12
 	stdWriterPrefixLen = 8
13 13
 	stdWriterFdIndex   = 0
14 14
 	stdWriterSizeIndex = 4
15
+
16
+	startingBufLen = 32*1024 + stdWriterPrefixLen + 1
15 17
 )
16 18
 
17 19
 // StdType prefixes type and length to standard stream.
... ...
@@ -80,7 +82,7 @@ var errInvalidStdHeader = errors.New("Unrecognized input header")
80 80
 // `written` will hold the total number of bytes written to `dstout` and `dsterr`.
81 81
 func StdCopy(dstout, dsterr io.Writer, src io.Reader) (written int64, err error) {
82 82
 	var (
83
-		buf       = make([]byte, 32*1024+stdWriterPrefixLen+1)
83
+		buf       = make([]byte, startingBufLen)
84 84
 		bufLen    = len(buf)
85 85
 		nr, nw    int
86 86
 		er, ew    error
... ...
@@ -85,6 +85,30 @@ func TestWriteDoesNotReturnNegativeWrittenBytes(t *testing.T) {
85 85
 	}
86 86
 }
87 87
 
88
+func TestStdCopyWriteAndRead(t *testing.T) {
89
+	buffer := new(bytes.Buffer)
90
+	stdOutBytes := []byte(strings.Repeat("o", startingBufLen))
91
+	dstOut := NewStdWriter(buffer, Stdout)
92
+	_, err := dstOut.Write(stdOutBytes)
93
+	if err != nil {
94
+		t.Fatal(err)
95
+	}
96
+	stdErrBytes := []byte(strings.Repeat("e", startingBufLen))
97
+	dstErr := NewStdWriter(buffer, Stderr)
98
+	_, err = dstErr.Write(stdErrBytes)
99
+	if err != nil {
100
+		t.Fatal(err)
101
+	}
102
+	written, err := StdCopy(ioutil.Discard, ioutil.Discard, buffer)
103
+	if err != nil {
104
+		t.Fatal(err)
105
+	}
106
+	expectedTotalWritten := len(stdOutBytes) + len(stdErrBytes)
107
+	if written != int64(expectedTotalWritten) {
108
+		t.Fatalf("Expected to have total of %d bytes written, got %d", expectedTotalWritten, written)
109
+	}
110
+}
111
+
88 112
 func TestStdCopyWithInvalidInputHeader(t *testing.T) {
89 113
 	dstOut := NewStdWriter(ioutil.Discard, Stdout)
90 114
 	dstErr := NewStdWriter(ioutil.Discard, Stderr)