package resolver import ( "fmt" "testing" "time" "github.com/bilibili/kratos/pkg/naming" ) func Test_FilterLittle(t *testing.T) { var backs []*naming.Instance for i := 0; i < 3; i++ { backs = append(backs, &naming.Instance{ Zone: "sh1", Env: "prod", AppID: "2233", Hostname: fmt.Sprintf("linux-%d", i), Addrs: []string{fmt.Sprintf("grpc://127.0.0.%d:9000", i)}, LastTs: time.Now().Unix(), }) } r := &Resolver{ quit: make(chan struct{}, 1), zone: "sh1", subsetSize: 50, } if len(r.filter(backs)) != 3 { t.Fatalf("backends length must be 3") } } func Test_FilterBig(t *testing.T) { var backs []*naming.Instance for i := 0; i < 100; i++ { backs = append(backs, &naming.Instance{ Zone: "sh1", Env: "prod", AppID: "2233", Hostname: fmt.Sprintf("linux-%d", i), Addrs: []string{fmt.Sprintf("grpc://127.0.0.%d:9000", i)}, LastTs: time.Now().Unix(), }) } r := &Resolver{ quit: make(chan struct{}, 1), zone: "sh1", subsetSize: 50, } if len(r.filter(backs)) != 50 { t.Fatalf("backends length must be 50") } } func Test_FilterNone(t *testing.T) { var backs []*naming.Instance for i := 0; i < 100; i++ { backs = append(backs, &naming.Instance{ Zone: "sh1", Env: "prod", AppID: "2233", Metadata: map[string]string{naming.MetaCluster: "c1"}, Hostname: fmt.Sprintf("linux-%d", i), Addrs: []string{fmt.Sprintf("grpc://127.0.0.%d:9000", i)}, LastTs: time.Now().Unix(), }) } r := &Resolver{ quit: make(chan struct{}, 1), zone: "sh1", subsetSize: 50, clusters: map[string]struct{}{"c2": struct{}{}}, } if len(r.filter(backs)) != 0 { t.Fatalf("backends length must be 0") } } func Test_FilterSome(t *testing.T) { var backs []*naming.Instance for i := 0; i < 40; i++ { backs = append(backs, &naming.Instance{ Zone: "sh1", Env: "prod", AppID: "2233", Metadata: map[string]string{naming.MetaCluster: "c1"}, Hostname: fmt.Sprintf("linux-%d", i), Addrs: []string{fmt.Sprintf("grpc://127.0.0.%d:9000", i)}, LastTs: time.Now().Unix(), }) } for i := 50; i < 150; i++ { backs = append(backs, &naming.Instance{ Zone: "sh1", Env: "prod", AppID: "2233", Metadata: map[string]string{naming.MetaCluster: "c2"}, Hostname: fmt.Sprintf("linux-%d", i), Addrs: []string{fmt.Sprintf("grpc://127.0.0.%d:9000", i)}, LastTs: time.Now().Unix(), }) } r := &Resolver{ quit: make(chan struct{}, 1), zone: "sh1", subsetSize: 50, clusters: map[string]struct{}{"c2": struct{}{}}, } if len(r.filter(backs)) != 50 { t.Fatalf("backends length must be 0") } r2 := &Resolver{ quit: make(chan struct{}, 1), zone: "sh1", subsetSize: 50, clusters: map[string]struct{}{"c1": struct{}{}}, } if len(r2.filter(backs)) != 40 { t.Fatalf("backends length must be 0") } }