github.com/karrick/gorill@v1.10.3/timedWriteCloser_test.go (about) 1 package gorill 2 3 import ( 4 "bytes" 5 "io" 6 "testing" 7 "time" 8 ) 9 10 var timedWriterBuf []byte 11 12 func init() { 13 timedWriterBuf = make([]byte, 1024) 14 for i := range timedWriterBuf { 15 timedWriterBuf[i] = '.' 16 } 17 } 18 19 func TestTimedWriteCloserBeforeTimeout(t *testing.T) { 20 timeout := time.Second 21 bb := new(bytes.Buffer) 22 23 tw := NewTimedWriteCloser(NopCloseWriter(SlowWriter(bb, timeout/10)), timeout) 24 defer tw.Close() 25 26 n, err := tw.Write(timedWriterBuf) 27 if want := len(timedWriterBuf); n != want { 28 t.Errorf("Actual: %#v; Expected: %#v", n, want) 29 } 30 if err != nil { 31 t.Errorf("Actual: %#v; Expected: %#v", err, nil) 32 } 33 if want := string(timedWriterBuf); want != bb.String() { 34 t.Errorf("Actual: %#v; Expected: %#v", bb.String(), want) 35 } 36 } 37 38 func TestTimedWriteCloserAfterTimeout(t *testing.T) { 39 timeout := time.Millisecond 40 bb := new(bytes.Buffer) 41 42 tw := NewTimedWriteCloser(NopCloseWriter(SlowWriter(bb, 10*timeout)), timeout) 43 defer tw.Close() 44 45 n, err := tw.Write(timedWriterBuf) 46 if want := 0; n != want { 47 t.Errorf("Actual: %#v; Expected: %#v", n, want) 48 } 49 if _, ok := err.(ErrTimeout); err == nil || !ok { 50 t.Errorf("Actual: %#v; Expected: %s", err, ErrTimeout(timeout)) 51 } 52 // NOTE: cannot check for contents of buffer, because write independently completes. 53 } 54 55 func TestTimedWriteCloserWriteAfterCloseReturnsError(t *testing.T) { 56 tw := NewTimedWriteCloser(NopCloseWriter(new(bytes.Buffer)), time.Millisecond) 57 58 tw.Close() 59 60 n, err := tw.Write([]byte(alphabet)) 61 if want := 0; n != want { 62 t.Errorf("Actual: %#v; Expected: %#v", n, want) 63 } 64 if _, ok := err.(ErrWriteAfterClose); err == nil || !ok { 65 t.Errorf("Actual: %s; Expected: %#v", err, ErrWriteAfterClose{}) 66 } 67 } 68 69 func BenchmarkWriterTimedWriteCloser(b *testing.B) { 70 consumers := make([]io.WriteCloser, consumerCount) 71 for i := 0; i < len(consumers); i++ { 72 consumers[i] = NewTimedWriteCloser(NewNopCloseBuffer(), time.Minute) 73 } 74 benchmarkWriter(b, b.N, consumers) 75 }