+++ /dev/null
-package lb
-
-import (
- "context"
- "math"
- "testing"
-
- "github.com/go-kit/kit/endpoint"
- "github.com/go-kit/kit/sd"
-)
-
-func TestRandom(t *testing.T) {
- var (
- n = 7
- endpoints = make([]endpoint.Endpoint, n)
- counts = make([]int, n)
- seed = int64(12345)
- iterations = 1000000
- want = iterations / n
- tolerance = want / 100 // 1%
- )
-
- for i := 0; i < n; i++ {
- i0 := i
- endpoints[i] = func(context.Context, interface{}) (interface{}, error) { counts[i0]++; return struct{}{}, nil }
- }
-
- endpointer := sd.FixedEndpointer(endpoints)
- balancer := NewRandom(endpointer, seed)
-
- for i := 0; i < iterations; i++ {
- endpoint, _ := balancer.Endpoint()
- endpoint(context.Background(), struct{}{})
- }
-
- for i, have := range counts {
- delta := int(math.Abs(float64(want - have)))
- if delta > tolerance {
- t.Errorf("%d: want %d, have %d, delta %d > %d tolerance", i, want, have, delta, tolerance)
- }
- }
-}
-
-func TestRandomNoEndpoints(t *testing.T) {
- endpointer := sd.FixedEndpointer{}
- balancer := NewRandom(endpointer, 1415926)
- _, err := balancer.Endpoint()
- if want, have := ErrNoEndpoints, err; want != have {
- t.Errorf("want %v, have %v", want, have)
- }
-
-}