You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
consul/lib/cluster_test.go

175 lines
3.7 KiB

package lib
import (
"testing"
"time"
)
func TestDurationMinusBuffer(t *testing.T) {
tests := []struct {
Duration time.Duration
Buffer time.Duration
Jitter int64
}{
{
Duration: 1 * time.Minute,
Buffer: 10 * time.Second,
Jitter: 16,
},
{
Duration: 1 * time.Second,
Buffer: 500 * time.Millisecond,
Jitter: 4,
},
{
Duration: 1 * time.Second,
Buffer: 1 * time.Second,
Jitter: 4,
},
{
Duration: 1 * time.Second,
Buffer: 1 * time.Second,
Jitter: 0,
},
{
Duration: 1 * time.Second,
Buffer: 1 * time.Second,
Jitter: 1,
},
}
for _, test := range tests {
min, max := DurationMinusBufferDomain(test.Duration, test.Buffer, test.Jitter)
for i := 0; i < 10; i++ {
d := DurationMinusBuffer(test.Duration, test.Buffer, test.Jitter)
if d < min || d > max {
t.Fatalf("Bad: %v", d)
}
}
}
}
func TestDurationMinusBufferDomain(t *testing.T) {
tests := []struct {
Duration time.Duration
Buffer time.Duration
Jitter int64
Min time.Duration
Max time.Duration
}{
{
Duration: 60 * time.Second,
Buffer: 10 * time.Second,
Jitter: 16,
Min: 46*time.Second + 875*time.Millisecond,
Max: 50 * time.Second,
},
{
Duration: 60 * time.Second,
Buffer: 0 * time.Second,
Jitter: 16,
Min: 56*time.Second + 250*time.Millisecond,
Max: 60 * time.Second,
},
{
Duration: 60 * time.Second,
Buffer: 0 * time.Second,
Jitter: 0,
Min: 60 * time.Second,
Max: 60 * time.Second,
},
{
Duration: 60 * time.Second,
Buffer: 0 * time.Second,
Jitter: 1,
Min: 0 * time.Second,
Max: 60 * time.Second,
},
{
Duration: 60 * time.Second,
Buffer: 0 * time.Second,
Jitter: 2,
Min: 30 * time.Second,
Max: 60 * time.Second,
},
{
Duration: 60 * time.Second,
Buffer: 0 * time.Second,
Jitter: 4,
Min: 45 * time.Second,
Max: 60 * time.Second,
},
{
Duration: 0 * time.Second,
Buffer: 0 * time.Second,
Jitter: 0,
Min: 0 * time.Second,
Max: 0 * time.Second,
},
{
Duration: 60 * time.Second,
Buffer: 120 * time.Second,
Jitter: 8,
Min: -1 * (52*time.Second + 500*time.Millisecond),
Max: -1 * 60 * time.Second,
},
}
for _, test := range tests {
min, max := DurationMinusBufferDomain(test.Duration, test.Buffer, test.Jitter)
if min != test.Min {
t.Errorf("Bad min: %v != %v", min, test.Min)
}
if max != test.Max {
t.Errorf("Bad max: %v != %v", max, test.Max)
}
}
}
func TestRandomStagger(t *testing.T) {
intv := time.Minute
for i := 0; i < 10; i++ {
stagger := RandomStagger(intv)
if stagger < 0 || stagger >= intv {
t.Fatalf("Bad: %v", stagger)
}
}
}
func TestRateScaledInterval(t *testing.T) {
const min = 1 * time.Second
rate := 200.0
if v := RateScaledInterval(rate, min, 0); v != min {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(rate, min, 100); v != min {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(rate, min, 200); v != 1*time.Second {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(rate, min, 1000); v != 5*time.Second {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(rate, min, 5000); v != 25*time.Second {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(rate, min, 10000); v != 50*time.Second {
t.Fatalf("Bad: %v", v)
}
halfMin := minRate / 2.0
if v := RateScaledInterval(halfMin, min, 100); v != min {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(0, min, 10000); v != min {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(0.0, min, 10000); v != min {
t.Fatalf("Bad: %v", v)
}
if v := RateScaledInterval(-1, min, 10000); v != min {
t.Fatalf("Bad: %v", v)
}
}