mirror of
https://github.com/go-kit/kit.git
synced 2026-04-24 20:33:58 +02:00
53 lines
1.2 KiB
Go
53 lines
1.2 KiB
Go
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)
|
|
}
|
|
|
|
}
|