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.
 
 
 

70 lines
1.8 KiB

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(
"http",
"127.0.0.1:9090",
&registry.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(
"http",
"127.0.0.1:9090",
&registry.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())
}
}