gitee.com/liuxuezhan/go-micro-v1.18.0@v1.0.0/client/selector/filter_test.go (about) 1 package selector 2 3 import ( 4 "testing" 5 6 "gitee.com/liuxuezhan/go-micro-v1.18.0/registry" 7 ) 8 9 func TestFilterEndpoint(t *testing.T) { 10 testData := []struct { 11 services []*registry.Service 12 endpoint string 13 count int 14 }{ 15 { 16 services: []*registry.Service{ 17 { 18 Name: "test", 19 Version: "1.0.0", 20 Endpoints: []*registry.Endpoint{ 21 { 22 Name: "Foo.Bar", 23 }, 24 }, 25 }, 26 { 27 Name: "test", 28 Version: "1.1.0", 29 Endpoints: []*registry.Endpoint{ 30 { 31 Name: "Baz.Bar", 32 }, 33 }, 34 }, 35 }, 36 endpoint: "Foo.Bar", 37 count: 1, 38 }, 39 { 40 services: []*registry.Service{ 41 { 42 Name: "test", 43 Version: "1.0.0", 44 Endpoints: []*registry.Endpoint{ 45 { 46 Name: "Foo.Bar", 47 }, 48 }, 49 }, 50 { 51 Name: "test", 52 Version: "1.1.0", 53 Endpoints: []*registry.Endpoint{ 54 { 55 Name: "Foo.Bar", 56 }, 57 }, 58 }, 59 }, 60 endpoint: "Bar.Baz", 61 count: 0, 62 }, 63 } 64 65 for _, data := range testData { 66 filter := FilterEndpoint(data.endpoint) 67 services := filter(data.services) 68 69 if len(services) != data.count { 70 t.Fatalf("Expected %d services, got %d", data.count, len(services)) 71 } 72 73 for _, service := range services { 74 var seen bool 75 76 for _, ep := range service.Endpoints { 77 if ep.Name == data.endpoint { 78 seen = true 79 break 80 } 81 } 82 83 if !seen && data.count > 0 { 84 t.Fatalf("Expected %d services but seen is %t; result %+v", data.count, seen, services) 85 } 86 } 87 } 88 } 89 90 func TestFilterLabel(t *testing.T) { 91 testData := []struct { 92 services []*registry.Service 93 label [2]string 94 count int 95 }{ 96 { 97 services: []*registry.Service{ 98 { 99 Name: "test", 100 Version: "1.0.0", 101 Nodes: []*registry.Node{ 102 { 103 Id: "test-1", 104 Address: "localhost", 105 Metadata: map[string]string{ 106 "foo": "bar", 107 }, 108 }, 109 }, 110 }, 111 { 112 Name: "test", 113 Version: "1.1.0", 114 Nodes: []*registry.Node{ 115 { 116 Id: "test-2", 117 Address: "localhost", 118 Metadata: map[string]string{ 119 "foo": "baz", 120 }, 121 }, 122 }, 123 }, 124 }, 125 label: [2]string{"foo", "bar"}, 126 count: 1, 127 }, 128 { 129 services: []*registry.Service{ 130 { 131 Name: "test", 132 Version: "1.0.0", 133 Nodes: []*registry.Node{ 134 { 135 Id: "test-1", 136 Address: "localhost", 137 }, 138 }, 139 }, 140 { 141 Name: "test", 142 Version: "1.1.0", 143 Nodes: []*registry.Node{ 144 { 145 Id: "test-2", 146 Address: "localhost", 147 }, 148 }, 149 }, 150 }, 151 label: [2]string{"foo", "bar"}, 152 count: 0, 153 }, 154 } 155 156 for _, data := range testData { 157 filter := FilterLabel(data.label[0], data.label[1]) 158 services := filter(data.services) 159 160 if len(services) != data.count { 161 t.Fatalf("Expected %d services, got %d", data.count, len(services)) 162 } 163 164 for _, service := range services { 165 var seen bool 166 167 for _, node := range service.Nodes { 168 if node.Metadata[data.label[0]] != data.label[1] { 169 t.Fatalf("Expected %s=%s but got %s=%s for service %+v node %+v", 170 data.label[0], data.label[1], data.label[0], node.Metadata[data.label[0]], service, node) 171 } 172 seen = true 173 } 174 175 if !seen { 176 t.Fatalf("Expected node for %s=%s but saw none; results %+v", data.label[0], data.label[1], service) 177 } 178 } 179 } 180 } 181 182 func TestFilterVersion(t *testing.T) { 183 testData := []struct { 184 services []*registry.Service 185 version string 186 count int 187 }{ 188 { 189 services: []*registry.Service{ 190 { 191 Name: "test", 192 Version: "1.0.0", 193 }, 194 { 195 Name: "test", 196 Version: "1.1.0", 197 }, 198 }, 199 version: "1.0.0", 200 count: 1, 201 }, 202 { 203 services: []*registry.Service{ 204 { 205 Name: "test", 206 Version: "1.0.0", 207 }, 208 { 209 Name: "test", 210 Version: "1.1.0", 211 }, 212 }, 213 version: "2.0.0", 214 count: 0, 215 }, 216 } 217 218 for _, data := range testData { 219 filter := FilterVersion(data.version) 220 services := filter(data.services) 221 222 if len(services) != data.count { 223 t.Fatalf("Expected %d services, got %d", data.count, len(services)) 224 } 225 226 var seen bool 227 228 for _, service := range services { 229 if service.Version != data.version { 230 t.Fatalf("Expected version %s, got %s", data.version, service.Version) 231 } 232 seen = true 233 } 234 235 if !seen && data.count > 0 { 236 t.Fatalf("Expected %d services but seen is %t; result %+v", data.count, seen, services) 237 } 238 } 239 }