1
0
mirror of https://github.com/go-micro/go-micro.git synced 2024-11-30 08:06:40 +02:00
go-micro/registry/watcher_test.go

143 lines
2.4 KiB
Go
Raw Normal View History

2019-01-15 18:50:37 +02:00
package registry
2016-05-01 22:30:14 +02:00
import (
"testing"
)
func TestWatcher(t *testing.T) {
2019-01-15 18:50:37 +02:00
testData := []*Service{
&Service{
2016-05-01 22:30:14 +02:00
Name: "test1",
Version: "1.0.1",
2019-01-15 18:50:37 +02:00
Nodes: []*Node{
&Node{
2016-05-01 22:30:14 +02:00
Id: "test1-1",
Address: "10.0.0.1",
Port: 10001,
Metadata: map[string]string{
"foo": "bar",
},
},
},
},
2019-01-15 18:50:37 +02:00
&Service{
2016-05-01 22:30:14 +02:00
Name: "test2",
Version: "1.0.2",
2019-01-15 18:50:37 +02:00
Nodes: []*Node{
&Node{
2016-05-01 22:30:14 +02:00
Id: "test2-1",
Address: "10.0.0.2",
Port: 10002,
Metadata: map[string]string{
"foo2": "bar2",
},
},
},
},
2019-01-15 18:50:37 +02:00
&Service{
2016-05-01 22:30:14 +02:00
Name: "test3",
Version: "1.0.3",
2019-01-15 18:50:37 +02:00
Nodes: []*Node{
&Node{
2016-05-01 22:30:14 +02:00
Id: "test3-1",
Address: "10.0.0.3",
Port: 10003,
Metadata: map[string]string{
"foo3": "bar3",
},
},
},
},
}
2019-01-15 18:50:37 +02:00
testFn := func(service, s *Service) {
2016-05-01 23:05:21 +02:00
if s == nil {
t.Fatalf("Expected one result for %s got nil", service.Name)
2016-05-01 22:30:14 +02:00
}
2016-05-01 23:05:21 +02:00
if s.Name != service.Name {
t.Fatalf("Expected name %s got %s", service.Name, s.Name)
2016-05-01 22:30:14 +02:00
}
2016-05-01 23:05:21 +02:00
if s.Version != service.Version {
t.Fatalf("Expected version %s got %s", service.Version, s.Version)
2016-05-01 22:38:22 +02:00
}
2016-05-01 23:05:21 +02:00
if len(s.Nodes) != 1 {
t.Fatalf("Expected 1 node, got %d", len(s.Nodes))
2016-05-01 22:38:22 +02:00
}
2016-05-01 23:05:21 +02:00
node := s.Nodes[0]
2016-05-01 22:30:14 +02:00
if node.Id != service.Nodes[0].Id {
t.Fatalf("Expected node id %s got %s", service.Nodes[0].Id, node.Id)
}
if node.Address != service.Nodes[0].Address {
t.Fatalf("Expected node address %s got %s", service.Nodes[0].Address, node.Address)
}
if node.Port != service.Nodes[0].Port {
2017-02-25 16:53:25 +02:00
t.Fatalf("Expected node port %d got %d", service.Nodes[0].Port, node.Port)
2016-05-01 22:30:14 +02:00
}
}
2016-05-01 23:05:21 +02:00
// new registry
r := NewRegistry()
w, err := r.Watch()
if err != nil {
t.Fatal(err)
}
defer w.Stop()
2016-05-01 22:30:14 +02:00
for _, service := range testData {
2016-05-01 23:05:21 +02:00
// register service
if err := r.Register(service); err != nil {
2016-05-01 22:30:14 +02:00
t.Fatal(err)
}
2016-05-01 23:30:33 +02:00
for {
2016-05-01 23:05:21 +02:00
res, err := w.Next()
if err != nil {
t.Fatal(err)
}
2016-05-01 22:38:22 +02:00
2016-05-01 23:05:21 +02:00
if res.Service.Name != service.Name {
2016-05-01 23:30:33 +02:00
continue
2016-05-01 23:05:21 +02:00
}
2016-05-01 22:38:22 +02:00
2016-05-01 23:05:21 +02:00
if res.Action != "create" {
2016-05-01 23:30:33 +02:00
t.Fatalf("Expected create event got %s for %s", res.Action, res.Service.Name)
2016-05-01 22:38:22 +02:00
}
2016-05-01 23:05:21 +02:00
testFn(service, res.Service)
break
2016-05-01 22:30:14 +02:00
}
2016-05-01 23:05:21 +02:00
// deregister
if err := r.Deregister(service); err != nil {
t.Fatal(err)
2016-05-01 22:30:14 +02:00
}
2016-05-01 23:30:33 +02:00
for {
2016-05-01 23:05:21 +02:00
res, err := w.Next()
if err != nil {
t.Fatal(err)
}
2016-05-01 22:30:14 +02:00
2016-05-01 23:30:33 +02:00
if res.Service.Name != service.Name {
2016-05-01 23:05:21 +02:00
continue
}
2016-05-01 22:30:14 +02:00
2016-05-01 23:30:33 +02:00
if res.Action != "delete" {
continue
2016-05-01 23:05:21 +02:00
}
2016-05-01 22:30:14 +02:00
2016-05-01 23:05:21 +02:00
testFn(service, res.Service)
break
2016-05-01 22:30:14 +02:00
}
}
}