feat: registry.
This commit is contained in:
114
registry/eureka/register_test.go
Normal file
114
registry/eureka/register_test.go
Normal file
@@ -0,0 +1,114 @@
|
||||
package eureka
|
||||
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"log"
|
||||
"sync"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/go-kratos/kratos/v2/registry"
|
||||
)
|
||||
|
||||
func TestRegistry(_ *testing.T) {
|
||||
ctx := context.Background()
|
||||
ctx, cancel := context.WithCancel(ctx)
|
||||
s1 := ®istry.ServiceInstance{
|
||||
ID: "0",
|
||||
Name: "helloworld",
|
||||
Endpoints: []string{"http://127.0.0.1:1111"},
|
||||
}
|
||||
s2 := ®istry.ServiceInstance{
|
||||
ID: "0",
|
||||
Name: "helloworld2",
|
||||
Endpoints: []string{"http://127.0.0.1:222"},
|
||||
}
|
||||
|
||||
r, _ := New([]string{"https://127.0.0.1:18761"}, WithContext(ctx), WithHeartbeat(time.Second), WithRefresh(time.Second), WithEurekaPath("eureka"))
|
||||
|
||||
go do(r, s1)
|
||||
go do(r, s2)
|
||||
|
||||
time.Sleep(time.Second * 20)
|
||||
cancel()
|
||||
time.Sleep(time.Second * 1)
|
||||
}
|
||||
|
||||
func do(r *Registry, s *registry.ServiceInstance) {
|
||||
w, err := r.Watch(context.Background(), s.Name)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
defer func() {
|
||||
_ = w.Stop()
|
||||
}()
|
||||
go func() {
|
||||
for {
|
||||
res, nextErr := w.Next()
|
||||
if nextErr != nil {
|
||||
return
|
||||
}
|
||||
log.Printf("watch: %d", len(res))
|
||||
for _, r := range res {
|
||||
log.Printf("next: %+v", r)
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
ctx, cancel := context.WithCancel(context.Background())
|
||||
if err = r.Register(ctx, s); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
time.Sleep(time.Second * 10)
|
||||
res, err := r.GetService(ctx, s.Name)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for i, re := range res {
|
||||
log.Printf("first %d re:%v\n", i, re)
|
||||
}
|
||||
|
||||
if len(res) != 1 && res[0].Name != s.Name {
|
||||
log.Fatalf("not expected: %+v", res)
|
||||
}
|
||||
|
||||
if err = r.Deregister(ctx, s); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
cancel()
|
||||
time.Sleep(time.Second * 10)
|
||||
|
||||
res, err = r.GetService(ctx, s.Name)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
for i, re := range res {
|
||||
log.Printf("second %d re:%v\n", i, re)
|
||||
}
|
||||
if len(res) != 0 {
|
||||
log.Fatalf("not expected empty")
|
||||
}
|
||||
}
|
||||
|
||||
func TestLock(_ *testing.T) {
|
||||
type me struct {
|
||||
lock sync.Mutex
|
||||
}
|
||||
|
||||
a := &me{}
|
||||
go func() {
|
||||
defer a.lock.Unlock()
|
||||
a.lock.Lock()
|
||||
fmt.Println("This is fmt first.")
|
||||
time.Sleep(time.Second * 5)
|
||||
}()
|
||||
go func() {
|
||||
defer a.lock.Unlock()
|
||||
a.lock.Lock()
|
||||
fmt.Println("This is fmt second.")
|
||||
time.Sleep(time.Second * 5)
|
||||
}()
|
||||
time.Sleep(time.Second * 10)
|
||||
}
|
||||
Reference in New Issue
Block a user