gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/registry/watcher_test.go (about) 1 package registry 2 3 import ( 4 "os" 5 "testing" 6 "time" 7 ) 8 9 func TestWatcher(t *testing.T) { 10 testData := []*Service{ 11 { 12 Name: "test1", 13 Version: "1.0.1", 14 Nodes: []*Node{ 15 { 16 Id: "test1-1", 17 Address: "10.0.0.1:10001", 18 Metadata: map[string]string{ 19 "foo": "bar", 20 }, 21 }, 22 }, 23 }, 24 { 25 Name: "test2", 26 Version: "1.0.2", 27 Nodes: []*Node{ 28 { 29 Id: "test2-1", 30 Address: "10.0.0.2:10002", 31 Metadata: map[string]string{ 32 "foo2": "bar2", 33 }, 34 }, 35 }, 36 }, 37 { 38 Name: "test3", 39 Version: "1.0.3", 40 Nodes: []*Node{ 41 { 42 Id: "test3-1", 43 Address: "10.0.0.3:10003", 44 Metadata: map[string]string{ 45 "foo3": "bar3", 46 }, 47 }, 48 }, 49 }, 50 } 51 52 testFn := func(service, s *Service) { 53 if s == nil { 54 t.Fatalf("Expected one result for %s got nil", service.Name) 55 56 } 57 58 if s.Name != service.Name { 59 t.Fatalf("Expected name %s got %s", service.Name, s.Name) 60 } 61 62 if s.Version != service.Version { 63 t.Fatalf("Expected version %s got %s", service.Version, s.Version) 64 } 65 66 if len(s.Nodes) != 1 { 67 t.Fatalf("Expected 1 node, got %d", len(s.Nodes)) 68 } 69 70 node := s.Nodes[0] 71 72 if node.Id != service.Nodes[0].Id { 73 t.Fatalf("Expected node id %s got %s", service.Nodes[0].Id, node.Id) 74 } 75 76 if node.Address != service.Nodes[0].Address { 77 t.Fatalf("Expected node address %s got %s", service.Nodes[0].Address, node.Address) 78 } 79 } 80 81 travis := os.Getenv("TRAVIS") 82 83 var opts []Option 84 85 if travis == "true" { 86 opts = append(opts, Timeout(time.Millisecond*100)) 87 } 88 89 // new registry 90 r := NewRegistry(opts...) 91 92 w, err := r.Watch() 93 if err != nil { 94 t.Fatal(err) 95 } 96 defer w.Stop() 97 98 for _, service := range testData { 99 // register service 100 if err := r.Register(service); err != nil { 101 t.Fatal(err) 102 } 103 104 for { 105 res, err := w.Next() 106 if err != nil { 107 t.Fatal(err) 108 } 109 110 if res.Service.Name != service.Name { 111 continue 112 } 113 114 if res.Action != "create" { 115 t.Fatalf("Expected create event got %s for %s", res.Action, res.Service.Name) 116 } 117 118 testFn(service, res.Service) 119 break 120 } 121 122 // deregister 123 if err := r.Deregister(service); err != nil { 124 t.Fatal(err) 125 } 126 127 for { 128 res, err := w.Next() 129 if err != nil { 130 t.Fatal(err) 131 } 132 133 if res.Service.Name != service.Name { 134 continue 135 } 136 137 if res.Action != "delete" { 138 continue 139 } 140 141 testFn(service, res.Service) 142 break 143 } 144 } 145 }