github.com/karrick/gorill@v1.10.3/helpers_test.go (about) 1 package gorill 2 3 import ( 4 "fmt" 5 "io" 6 "math/rand" 7 "sync" 8 "testing" 9 ) 10 11 const alphabet = "abcdefghijklmnopqrstuvwxyz\n" 12 const consumerCount = 1000 13 14 func benchmarkWriter(b *testing.B, n int, consumers []io.WriteCloser) { 15 b.Skip("disabled") 16 17 const producerCount = 10 18 19 producerBegin := make(chan struct{}) 20 var finished sync.WaitGroup 21 22 finished.Add(producerCount) 23 24 for i := 0; i < producerCount; i++ { 25 go func(begin <-chan struct{}, finished *sync.WaitGroup) { 26 <-begin 27 for i := 0; i < n; i++ { 28 j := rand.Int31n(int32(consumerCount)) 29 n, err := consumers[j].Write([]byte(alphabet)) 30 if want := len(alphabet); n != want { 31 b.Fatalf("Actual: %#v; Expected: %#v", n, want) 32 } 33 if err != nil { 34 b.Fatalf("Actual: %#v; Expected: %#v", err, nil) 35 } 36 } 37 finished.Done() 38 }(producerBegin, &finished) 39 } 40 41 b.ResetTimer() 42 for i := 0; i < producerCount; i++ { 43 producerBegin <- struct{}{} 44 } 45 fmt.Printf("\nwaiting for producer complete: ") 46 finished.Wait() 47 fmt.Printf("\ndone waiting for producer complete") 48 for i := 0; i < consumerCount; i++ { 49 consumers[i].Close() 50 } 51 }