micro/registry/watcher_test.go

136 lines
2.3 KiB
Go
Raw Normal View History

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