package direct import ( "context" "reflect" "testing" "time" "github.com/go-kratos/kratos/v2/registry" "github.com/go-kratos/kratos/v2/selector" ) func TestDirect(t *testing.T) { b := &Builder{} wn := b.Build(selector.NewNode( "127.0.0.1:9090", ®istry.ServiceInstance{ ID: "127.0.0.1:9090", Name: "helloworld", Version: "v1.0.0", Endpoints: []string{"http://127.0.0.1:9090"}, Metadata: map[string]string{"weight": "10"}, })) done := wn.Pick() if done == nil { t.Errorf("expect %v, got %v", nil, done) } time.Sleep(time.Millisecond * 10) done(context.Background(), selector.DoneInfo{}) if !reflect.DeepEqual(float64(10), wn.Weight()) { t.Errorf("expect %v, got %v", float64(10), wn.Weight()) } if time.Millisecond*20 <= wn.PickElapsed() { t.Errorf("20ms <= wn.PickElapsed()(%s)", wn.PickElapsed()) } if time.Millisecond*10 >= wn.PickElapsed() { t.Errorf("10ms >= wn.PickElapsed()(%s)", wn.PickElapsed()) } } func TestDirectDefaultWeight(t *testing.T) { b := &Builder{} wn := b.Build(selector.NewNode( "127.0.0.1:9090", ®istry.ServiceInstance{ ID: "127.0.0.1:9090", Name: "helloworld", Version: "v1.0.0", Endpoints: []string{"http://127.0.0.1:9090"}, })) done := wn.Pick() if done == nil { t.Errorf("expect %v, got %v", nil, done) } time.Sleep(time.Millisecond * 10) done(context.Background(), selector.DoneInfo{}) if !reflect.DeepEqual(float64(100), wn.Weight()) { t.Errorf("expect %v, got %v", float64(100), wn.Weight()) } if time.Millisecond*20 <= wn.PickElapsed() { t.Errorf("time.Millisecond*20 <= wn.PickElapsed()(%s)", wn.PickElapsed()) } if time.Millisecond*5 >= wn.PickElapsed() { t.Errorf("time.Millisecond*5 >= wn.PickElapsed()(%s)", wn.PickElapsed()) } }