Fix a bug in Output.Write, and improve testing coverage of error cases.

This commit is contained in:
Solomon Hykes 2013-11-22 02:28:56 +00:00
parent 3553a803e3
commit 35d54c6655
2 changed files with 23 additions and 1 deletions

View file

@ -89,7 +89,7 @@ func (o *Output) Write(p []byte) (n int, err error) {
firstErr = err
}
}
return len(p), err
return len(p), firstErr
}
// Close unregisters all destinations and waits for all background

View file

@ -4,6 +4,7 @@ import (
"bufio"
"bytes"
"fmt"
"io"
"io/ioutil"
"strings"
"testing"
@ -208,6 +209,27 @@ func TestOutputAdd(t *testing.T) {
}
}
func TestOutputWriteError(t *testing.T) {
o := NewOutput()
buf := &bytes.Buffer{}
o.Add(buf)
r, w := io.Pipe()
input := "Hello there"
expectedErr := fmt.Errorf("This is an error")
r.CloseWithError(expectedErr)
o.Add(w)
n, err := o.Write([]byte(input))
if err != expectedErr {
t.Fatalf("Output.Write() should return the first error encountered, if any")
}
if buf.String() != input {
t.Fatalf("Output.Write() should attempt write on all destinations, even after encountering an error")
}
if n != len(input) {
t.Fatalf("Output.Write() should return the size of the input if it successfully writes to at least one destination")
}
}
func TestInputAddEmpty(t *testing.T) {
i := NewInput()
var b bytes.Buffer