github.com/karrick/gorill@v1.10.3/multiWriteCloserFanIn_test.go (about) 1 // +build !race 2 3 package gorill 4 5 import ( 6 "io" 7 "testing" 8 "time" 9 ) 10 11 func TestMultiWriteCloserFanIn(t *testing.T) { 12 bb := NewNopCloseBufferSize(16384) 13 14 first := NewMultiWriteCloserFanIn(bb) 15 16 want := string(largeBuf) 17 first.Write(largeBuf) 18 19 if actual := bb.String(); actual != want { 20 t.Errorf("Actual: %#v; Expected: %#v", actual, want) 21 } 22 23 bb.Reset() 24 want = "" 25 if actual := bb.String(); actual != want { 26 t.Errorf("Actual: %#v; Expected: %#v", actual, want) 27 } 28 29 second := first.Add() 30 want = string(largeBuf) 31 second.Write(largeBuf) 32 33 if actual := bb.String(); actual != want { 34 t.Errorf("Actual: %#v; Expected: %#v", actual, want) 35 } 36 37 first.Close() 38 if want, actual := false, bb.IsClosed(); actual != want { 39 t.Errorf("Actual: %#v; Expected: %#v", actual, want) 40 } 41 42 second.Close() 43 time.Sleep(100 * time.Millisecond) // race condition during testing 44 if want, actual := true, bb.IsClosed(); actual != want { 45 t.Errorf("Actual: %#v; Expected: %#v", actual, want) 46 } 47 } 48 49 func BenchmarkWriterMultiWriteCloserFanIn(b *testing.B) { 50 consumers := make([]io.WriteCloser, consumerCount) 51 for i := 0; i < len(consumers); i++ { 52 consumers[i] = NewMultiWriteCloserFanIn(NewNopCloseBuffer()) 53 } 54 benchmarkWriter(b, b.N, consumers) 55 }