Create & Init Project...

This commit is contained in:
2019-04-22 18:49:16 +08:00
commit fc4fa37393
25440 changed files with 4054998 additions and 0 deletions

View File

@@ -0,0 +1,229 @@
package service
import (
"context"
"fmt"
"testing"
"time"
dc "go-common/app/infra/discovery/conf"
"go-common/app/infra/discovery/model"
"go-common/library/ecode"
bm "go-common/library/net/http/blademaster"
"go-common/library/net/netutil/breaker"
xtime "go-common/library/time"
. "github.com/smartystreets/goconvey/convey"
)
var (
ctx = context.TODO()
reg = defRegisArg()
rew = &model.ArgRenew{Appid: "main.arch.test", Hostname: "test1", Region: "shsb", Zone: "sh001", Env: "pre"}
cancel = &model.ArgCancel{Appid: "main.arch.test", Hostname: "test1", Region: "shsb", Zone: "sh001", Env: "pre"}
fet = &model.ArgFetch{Appid: "main.arch.test", Region: "shsb", Zone: "sh001", Env: "pre", Status: 1}
set = &model.ArgSet{Appid: "main.arch.test", Region: "shsb", Hostname: []string{"test1"}, Zone: "sh001", Env: "pre"}
pollArg = newPoll()
)
func newFetchArg() *model.ArgFetchs {
return &model.ArgFetchs{Appid: []string{"main.arch.test"}, Zone: "sh001", Env: "pre", Status: 1}
}
func newPoll() *model.ArgPolls {
return &model.ArgPolls{
Region: "shsb",
Env: "pre",
Appid: []string{"main.arch.test"},
LatestTimestamp: []int64{0},
}
}
func defRegisArg() *model.ArgRegister {
return &model.ArgRegister{
LatestTimestamp: time.Now().Unix(),
Appid: "main.arch.test",
Hostname: "test1", RPC: "127.0.0.1:8080",
Region: "shsb", Zone: "sh001",
Env: "pre", Status: 1,
Metadata: `{"test":"test","weight":"10"}`,
}
}
var config = newConfig()
func newConfig() *dc.Config {
return &dc.Config{HTTPClient: &bm.ClientConfig{Timeout: xtime.Duration(time.Second), Breaker: &breaker.Config{Window: xtime.Duration(time.Second),
Sleep: xtime.Duration(time.Millisecond * 100),
Bucket: 10,
Ratio: 0.5,
Request: 100},
App: &bm.App{Key: "0c4b8fe3ff35a4b6", Secret: "b370880d1aca7d3a289b9b9a7f4d6812"}},
BM: &dc.HTTPServers{Inner: &bm.ServerConfig{Addr: "127.0.0.1:7171"}},
}
}
func TestRegister(t *testing.T) {
Convey("test Register", t, func() {
svr, _ := New(config)
i := model.NewInstance(reg)
svr.Register(context.TODO(), i, reg.LatestTimestamp, false)
ins, err := svr.Fetch(context.TODO(), fet)
for _, i := range ins.Instances {
fmt.Println("ins", i)
}
So(err, ShouldBeNil)
So(len(ins.Instances), ShouldResemble, 1)
Convey("test metadta", func() {
for _, i := range ins.Instances {
So(err, ShouldBeNil)
So(i.Metadata["weight"], ShouldEqual, "10")
So(i.Metadata["test"], ShouldEqual, "test")
}
})
})
}
func TestDiscovery(t *testing.T) {
Convey("test cancel polls", t, func() {
svr, _ := New(config)
reg2 := defRegisArg()
reg2.Hostname = "test2"
i1 := model.NewInstance(reg)
i2 := model.NewInstance(reg2)
svr.Register(context.TODO(), i1, reg.LatestTimestamp, reg.Replication)
svr.Register(context.TODO(), i2, reg2.LatestTimestamp, reg.Replication)
ch, new, err := svr.Polls(context.TODO(), pollArg)
So(err, ShouldBeNil)
So(new, ShouldBeTrue)
ins := <-ch
So(len(ins["main.arch.test"].Instances), ShouldEqual, 2)
pollArg.LatestTimestamp[0] = ins["main.arch.test"].LatestTimestamp
time.Sleep(time.Second)
err = svr.Cancel(context.TODO(), cancel)
So(err, ShouldBeNil)
ch, new, err = svr.Polls(context.TODO(), pollArg)
So(err, ShouldBeNil)
So(new, ShouldBeTrue)
ins = <-ch
So(len(ins["main.arch.test"].Instances), ShouldEqual, 1)
})
Convey("test compatible with treeid polls", t, func() {
svr, _ := New(config)
reg2 := defRegisArg()
reg2.Treeid = 1
i1 := model.NewInstance(reg2)
svr.Register(ctx, i1, reg2.LatestTimestamp, reg2.Replication)
ch, new, err := svr.Polls(context.TODO(), pollArg)
So(err, ShouldBeNil)
So(new, ShouldBeTrue)
ins := <-ch
So(len(ins["main.arch.test"].Instances), ShouldEqual, 1)
treepoll := newPoll()
treepoll.Treeid = []int64{1}
ch, new, err = svr.Polls(context.TODO(), treepoll)
So(err, ShouldBeNil)
So(new, ShouldBeTrue)
ins = <-ch
So(len(ins["1"].Instances), ShouldEqual, 1)
})
}
func TestFetchs(t *testing.T) {
Convey("test fetch multi appid", t, func() {
svr, _ := New(config)
reg2 := defRegisArg()
reg2.Appid = "appid2"
i1 := model.NewInstance(reg)
i2 := model.NewInstance(reg2)
svr.Register(context.TODO(), i1, reg.LatestTimestamp, reg.Replication)
svr.Register(context.TODO(), i2, reg2.LatestTimestamp, reg.Replication)
fetchs := newFetchArg()
fetchs.Appid = append(fetchs.Appid, "appid2")
is, err := svr.Fetchs(ctx, fetchs)
So(err, ShouldBeNil)
So(len(is), ShouldResemble, 2)
})
}
func TestZones(t *testing.T) {
Convey("test multi zone discovery", t, func() {
svr, _ := New(config)
reg2 := defRegisArg()
reg2.Zone = "sh002"
i1 := model.NewInstance(reg)
i2 := model.NewInstance(reg2)
svr.Register(context.TODO(), i1, reg.LatestTimestamp, reg.Replication)
svr.Register(context.TODO(), i2, reg2.LatestTimestamp, reg.Replication)
ch, new, err := svr.Polls(context.TODO(), pollArg)
So(err, ShouldBeNil)
So(new, ShouldBeTrue)
ins := <-ch
So(len(ins["main.arch.test"].ZoneInstances), ShouldEqual, 2)
pollArg.Zone = "sh002"
ch, new, err = svr.Polls(context.TODO(), pollArg)
So(err, ShouldBeNil)
So(new, ShouldBeTrue)
ins = <-ch
So(len(ins["main.arch.test"].ZoneInstances), ShouldEqual, 1)
Convey("test zone update", func() {
pollArg.LatestTimestamp = []int64{ins["main.arch.test"].LatestTimestamp}
pollArg.Zone = ""
reg3 := defRegisArg()
reg3.Zone = "sh002"
reg3.Hostname = "test03"
i3 := model.NewInstance(reg3)
svr.Register(context.TODO(), i3, reg3.LatestTimestamp, reg3.Replication)
ch, new, err = svr.Polls(context.TODO(), pollArg)
So(err, ShouldBeNil)
ins = <-ch
So(len(ins["main.arch.test"].ZoneInstances), ShouldResemble, 2)
So(len(ins["main.arch.test"].ZoneInstances["sh002"]), ShouldResemble, 2)
So(len(ins["main.arch.test"].ZoneInstances["sh001"]), ShouldResemble, 1)
pollArg.LatestTimestamp = []int64{ins["main.arch.test"].LatestTimestamp}
_, _, err = svr.Polls(context.TODO(), pollArg)
So(err, ShouldResemble, ecode.NotModified)
})
})
}
func TestRenew(t *testing.T) {
Convey("test Renew", t, func() {
svr, _ := New(config)
i := model.NewInstance(reg)
svr.Register(context.TODO(), i, reg.LatestTimestamp, reg.Replication)
_, err := svr.Renew(context.TODO(), rew)
So(err, ShouldBeNil)
})
}
func TestCancel(t *testing.T) {
Convey("test cancel", t, func() {
svr, _ := New(config)
i := model.NewInstance(reg)
svr.Register(context.TODO(), i, reg.LatestTimestamp, reg.Replication)
err := svr.Cancel(context.TODO(), cancel)
So(err, ShouldBeNil)
_, err = svr.Fetch(context.TODO(), fet)
So(err, ShouldResemble, ecode.NothingFound)
})
}
func TestFetchAll(t *testing.T) {
Convey("test fetch all", t, func() {
svr, _ := New(config)
i := model.NewInstance(reg)
svr.Register(context.TODO(), i, reg.LatestTimestamp, reg.Replication)
fs := svr.FetchAll(context.TODO())
_, ok := fs[reg.Appid]
So(ok, ShouldBeTrue)
})
}
func TestSet(t *testing.T) {
Convey("test set", t, func() {
svr, _ := New(config)
i := model.NewInstance(reg)
svr.Register(context.TODO(), i, reg.LatestTimestamp, reg.Replication)
set.Metadata = []string{`{"weight":"1"}`}
err := svr.Set(context.TODO(), set)
So(err, ShouldBeNil)
cm, err := svr.Fetch(context.TODO(), fet)
So(err, ShouldBeNil)
So(cm.Instances[0].Metadata["weight"], ShouldResemble, "1")
})
}