123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- package router
- import (
- "testing"
- )
- /*
- Split into multiple package, need to be tested separately
- func TestSelectLeastLoad(t *testing.T) {
- settings := &StrategyLeastLoadConfig{
- HealthCheck: &HealthPingConfig{
- SamplingCount: 10,
- },
- Expected: 1,
- MaxRTT: int64(time.Millisecond * time.Duration(800)),
- }
- strategy := NewLeastLoadStrategy(settings)
- // std 40
- strategy.PutResult("a", time.Millisecond*time.Duration(60))
- strategy.PutResult("a", time.Millisecond*time.Duration(140))
- strategy.PutResult("a", time.Millisecond*time.Duration(60))
- strategy.PutResult("a", time.Millisecond*time.Duration(140))
- // std 60
- strategy.PutResult("b", time.Millisecond*time.Duration(40))
- strategy.PutResult("b", time.Millisecond*time.Duration(160))
- strategy.PutResult("b", time.Millisecond*time.Duration(40))
- strategy.PutResult("b", time.Millisecond*time.Duration(160))
- // std 0, but >MaxRTT
- strategy.PutResult("c", time.Millisecond*time.Duration(1000))
- strategy.PutResult("c", time.Millisecond*time.Duration(1000))
- strategy.PutResult("c", time.Millisecond*time.Duration(1000))
- strategy.PutResult("c", time.Millisecond*time.Duration(1000))
- expected := "a"
- actual := strategy.SelectAndPick([]string{"a", "b", "c", "untested"})
- if actual != expected {
- t.Errorf("expected: %v, actual: %v", expected, actual)
- }
- }
- func TestSelectLeastLoadWithCost(t *testing.T) {
- settings := &StrategyLeastLoadConfig{
- HealthCheck: &HealthPingConfig{
- SamplingCount: 10,
- },
- Costs: []*StrategyWeight{
- {Match: "a", Value: 9},
- },
- Expected: 1,
- }
- strategy := NewLeastLoadStrategy(settings, nil)
- // std 40, std+c 120
- strategy.PutResult("a", time.Millisecond*time.Duration(60))
- strategy.PutResult("a", time.Millisecond*time.Duration(140))
- strategy.PutResult("a", time.Millisecond*time.Duration(60))
- strategy.PutResult("a", time.Millisecond*time.Duration(140))
- // std 60
- strategy.PutResult("b", time.Millisecond*time.Duration(40))
- strategy.PutResult("b", time.Millisecond*time.Duration(160))
- strategy.PutResult("b", time.Millisecond*time.Duration(40))
- strategy.PutResult("b", time.Millisecond*time.Duration(160))
- expected := "b"
- actual := strategy.SelectAndPick([]string{"a", "b", "untested"})
- if actual != expected {
- t.Errorf("expected: %v, actual: %v", expected, actual)
- }
- }
- */
- func TestSelectLeastExpected(t *testing.T) {
- strategy := &LeastLoadStrategy{
- settings: &StrategyLeastLoadConfig{
- Baselines: nil,
- Expected: 3,
- },
- }
- nodes := []*node{
- {Tag: "a", RTTDeviationCost: 100},
- {Tag: "b", RTTDeviationCost: 200},
- {Tag: "c", RTTDeviationCost: 300},
- {Tag: "d", RTTDeviationCost: 350},
- }
- expected := 3
- ns := strategy.selectLeastLoad(nodes)
- if len(ns) != expected {
- t.Errorf("expected: %v, actual: %v", expected, len(ns))
- }
- }
- func TestSelectLeastExpected2(t *testing.T) {
- strategy := &LeastLoadStrategy{
- settings: &StrategyLeastLoadConfig{
- Baselines: nil,
- Expected: 3,
- },
- }
- nodes := []*node{
- {Tag: "a", RTTDeviationCost: 100},
- {Tag: "b", RTTDeviationCost: 200},
- }
- expected := 2
- ns := strategy.selectLeastLoad(nodes)
- if len(ns) != expected {
- t.Errorf("expected: %v, actual: %v", expected, len(ns))
- }
- }
- func TestSelectLeastExpectedAndBaselines(t *testing.T) {
- strategy := &LeastLoadStrategy{
- settings: &StrategyLeastLoadConfig{
- Baselines: []int64{200, 300, 400},
- Expected: 3,
- },
- }
- nodes := []*node{
- {Tag: "a", RTTDeviationCost: 100},
- {Tag: "b", RTTDeviationCost: 200},
- {Tag: "c", RTTDeviationCost: 250},
- {Tag: "d", RTTDeviationCost: 300},
- {Tag: "e", RTTDeviationCost: 310},
- }
- expected := 3
- ns := strategy.selectLeastLoad(nodes)
- if len(ns) != expected {
- t.Errorf("expected: %v, actual: %v", expected, len(ns))
- }
- }
- func TestSelectLeastExpectedAndBaselines2(t *testing.T) {
- strategy := &LeastLoadStrategy{
- settings: &StrategyLeastLoadConfig{
- Baselines: []int64{200, 300, 400},
- Expected: 3,
- },
- }
- nodes := []*node{
- {Tag: "a", RTTDeviationCost: 500},
- {Tag: "b", RTTDeviationCost: 600},
- {Tag: "c", RTTDeviationCost: 700},
- {Tag: "d", RTTDeviationCost: 800},
- {Tag: "e", RTTDeviationCost: 900},
- }
- expected := 3
- ns := strategy.selectLeastLoad(nodes)
- if len(ns) != expected {
- t.Errorf("expected: %v, actual: %v", expected, len(ns))
- }
- }
- func TestSelectLeastLoadBaselines(t *testing.T) {
- strategy := &LeastLoadStrategy{
- settings: &StrategyLeastLoadConfig{
- Baselines: []int64{200, 400, 600},
- Expected: 0,
- },
- }
- nodes := []*node{
- {Tag: "a", RTTDeviationCost: 100},
- {Tag: "b", RTTDeviationCost: 200},
- {Tag: "c", RTTDeviationCost: 300},
- }
- expected := 1
- ns := strategy.selectLeastLoad(nodes)
- if len(ns) != expected {
- t.Errorf("expected: %v, actual: %v", expected, len(ns))
- }
- }
- func TestSelectLeastLoadBaselinesNoQualified(t *testing.T) {
- strategy := &LeastLoadStrategy{
- settings: &StrategyLeastLoadConfig{
- Baselines: []int64{200, 400, 600},
- Expected: 0,
- },
- }
- nodes := []*node{
- {Tag: "a", RTTDeviationCost: 800},
- {Tag: "b", RTTDeviationCost: 1000},
- }
- expected := 0
- ns := strategy.selectLeastLoad(nodes)
- if len(ns) != expected {
- t.Errorf("expected: %v, actual: %v", expected, len(ns))
- }
- }
|