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  }