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.

123 lines
2.9 KiB

2 years ago
package ewma
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"},
}))
if !reflect.DeepEqual(float64(100), wn.Weight()) {
t.Errorf("expect %v, got %v", 100, wn.Weight())
}
done := wn.Pick()
if done == nil {
t.Errorf("done is equal to nil")
}
done2 := wn.Pick()
if done2 == nil {
t.Errorf("done2 is equal to nil")
}
time.Sleep(time.Millisecond * 10)
done(context.Background(), selector.DoneInfo{})
if float64(30000) >= wn.Weight() {
t.Errorf("float64(30000) >= wn.Weight()(%v)", wn.Weight())
}
if float64(60000) <= wn.Weight() {
t.Errorf("float64(60000) <= wn.Weight()(%v)", wn.Weight())
}
if time.Millisecond*15 <= wn.PickElapsed() {
t.Errorf("time.Millisecond*15 <= wn.PickElapsed()(%v)", wn.PickElapsed())
}
if time.Millisecond*5 >= wn.PickElapsed() {
t.Errorf("time.Millisecond*5 >= wn.PickElapsed()(%v)", wn.PickElapsed())
}
}
func TestDirectError(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"},
}))
for i := 0; i < 5; i++ {
var err error
if i != 0 {
err = context.DeadlineExceeded
}
done := wn.Pick()
if done == nil {
t.Errorf("expect not nil, got nil")
}
time.Sleep(time.Millisecond * 20)
done(context.Background(), selector.DoneInfo{Err: err})
}
if float64(30000) >= wn.Weight() {
t.Errorf("float64(30000) >= wn.Weight()(%v)", wn.Weight())
}
if float64(60000) <= wn.Weight() {
t.Errorf("float64(60000) <= wn.Weight()(%v)", wn.Weight())
}
}
func TestDirectErrorHandler(t *testing.T) {
b := &Builder{
ErrHandler: func(err error) bool {
return err != nil
},
}
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"},
}))
for i := 0; i < 5; i++ {
var err error
if i != 0 {
err = context.DeadlineExceeded
}
done := wn.Pick()
if done == nil {
t.Errorf("expect not nil, got nil")
}
time.Sleep(time.Millisecond * 20)
done(context.Background(), selector.DoneInfo{Err: err})
}
if float64(30000) >= wn.Weight() {
t.Errorf("float64(30000) >= wn.Weight()(%v)", wn.Weight())
}
if float64(60000) <= wn.Weight() {
t.Errorf("float64(60000) <= wn.Weight()(%v)", wn.Weight())
}
}