github.com/xmidt-org/webpa-common@v1.11.9/service/accessor_benchmarks_test.go (about)

     1  package service
     2  
     3  import (
     4  	"encoding/base64"
     5  	"fmt"
     6  	"io"
     7  	"math/rand"
     8  	"testing"
     9  )
    10  
    11  const addressSeed int64 = 2387240836734099856
    12  
    13  func generateAddresses(random io.Reader, count, length int) []string {
    14  	var (
    15  		buffer    = make([]byte, length)
    16  		addresses []string
    17  	)
    18  
    19  	for i := 0; i < count; i++ {
    20  		random.Read(buffer)
    21  		addresses = append(
    22  			addresses,
    23  			base64.RawURLEncoding.EncodeToString(buffer),
    24  		)
    25  	}
    26  
    27  	return addresses
    28  }
    29  
    30  func BenchmarkAccessor(b *testing.B) {
    31  	b.Log("-vnodeCounts set to", vnodeCounts)
    32  	b.Log("-addressCounts set to", addressCounts)
    33  
    34  	var (
    35  		random    = rand.New(rand.NewSource(addressSeed))
    36  		addresses = generateAddresses(random, addressCounts[len(addressCounts)-1], 32)
    37  	)
    38  
    39  	b.Run("Create", func(b *testing.B) {
    40  		for _, vnodeCount := range vnodeCounts {
    41  			for _, addressCount := range addressCounts {
    42  				var (
    43  					name          = fmt.Sprintf("(vnodeCount=%d,addressCount=%d)", vnodeCount, addressCount)
    44  					testAddresses = addresses[:addressCount]
    45  				)
    46  
    47  				b.Run(name, func(b *testing.B) {
    48  					b.ResetTimer()
    49  					for i := 0; i < b.N; i++ {
    50  						NewConsistentAccessorFactory(vnodeCount)(testAddresses)
    51  					}
    52  				})
    53  			}
    54  		}
    55  	})
    56  
    57  	b.Run("Get", func(b *testing.B) {
    58  		for _, vnodeCount := range vnodeCounts {
    59  			for _, addressCount := range addressCounts {
    60  				var (
    61  					name     = fmt.Sprintf("(vnodeCount=%d,addressCount=%d)", vnodeCount, addressCount)
    62  					accessor = NewConsistentAccessorFactory(vnodeCount)(addresses[:addressCount])
    63  					key      = make([]byte, 32)
    64  				)
    65  
    66  				random.Read(key)
    67  				b.Run(name, func(b *testing.B) {
    68  					b.ResetTimer()
    69  					for i := 0; i < b.N; i++ {
    70  						accessor.Get(key)
    71  					}
    72  				})
    73  			}
    74  		}
    75  	})
    76  }