Signed-off-by: Sergey Evstifeev <sergey.evstifeev@gmail.com>
Sergey Evstifeev authored on 2015/09/23 07:30:06... | ... |
@@ -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) |