github.com/anth0d/nomad@v0.0.0-20221214183521-ae3a0a2cad06/nomad/structs/service_registration_test.go (about) 1 package structs 2 3 import ( 4 "testing" 5 6 "github.com/shoenig/test/must" 7 "github.com/stretchr/testify/require" 8 ) 9 10 func TestServiceRegistration_Copy(t *testing.T) { 11 sr := &ServiceRegistration{ 12 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 13 ServiceName: "example-cache", 14 Namespace: "default", 15 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 16 Datacenter: "dc1", 17 JobID: "example", 18 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 19 Tags: []string{"foo"}, 20 Address: "192.168.13.13", 21 Port: 23813, 22 } 23 newSR := sr.Copy() 24 require.True(t, sr.Equal(newSR)) 25 } 26 27 func TestServiceRegistration_Equal(t *testing.T) { 28 testCases := []struct { 29 serviceReg1 *ServiceRegistration 30 serviceReg2 *ServiceRegistration 31 expectedOutput bool 32 name string 33 }{ 34 { 35 serviceReg1: nil, 36 serviceReg2: &ServiceRegistration{ 37 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 38 ServiceName: "example-cache", 39 Namespace: "default", 40 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 41 Datacenter: "dc1", 42 JobID: "example", 43 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 44 Tags: []string{"foo"}, 45 Address: "192.168.13.13", 46 Port: 23813, 47 }, 48 expectedOutput: false, 49 name: "nil service registration composed", 50 }, 51 { 52 serviceReg1: &ServiceRegistration{ 53 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 54 ServiceName: "example-cache", 55 Namespace: "default", 56 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 57 Datacenter: "dc1", 58 JobID: "example", 59 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 60 Tags: []string{"foo"}, 61 Address: "192.168.13.13", 62 Port: 23813, 63 }, 64 serviceReg2: nil, 65 expectedOutput: false, 66 name: "nil service registration func input", 67 }, 68 { 69 serviceReg1: &ServiceRegistration{ 70 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 71 ServiceName: "example-cache", 72 Namespace: "default", 73 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 74 Datacenter: "dc1", 75 JobID: "example", 76 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 77 Tags: []string{"foo"}, 78 Address: "192.168.13.13", 79 Port: 23813, 80 }, 81 serviceReg2: &ServiceRegistration{ 82 ID: "_nomad-group-2873cf75-42e5-7c45-ca1c-415f3e18be3dcache-example-cache-db", 83 ServiceName: "example-cache", 84 Namespace: "default", 85 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 86 Datacenter: "dc1", 87 JobID: "example", 88 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 89 Tags: []string{"foo"}, 90 Address: "192.168.13.13", 91 Port: 23813, 92 }, 93 expectedOutput: false, 94 name: "ID not equal", 95 }, 96 { 97 serviceReg1: &ServiceRegistration{ 98 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 99 ServiceName: "example-cache", 100 Namespace: "default", 101 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 102 Datacenter: "dc1", 103 JobID: "example", 104 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 105 Tags: []string{"foo"}, 106 Address: "192.168.13.13", 107 Port: 23813, 108 }, 109 serviceReg2: &ServiceRegistration{ 110 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 111 ServiceName: "platform-example-cache", 112 Namespace: "default", 113 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 114 Datacenter: "dc1", 115 JobID: "example", 116 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 117 Tags: []string{"foo"}, 118 Address: "192.168.13.13", 119 Port: 23813, 120 }, 121 expectedOutput: false, 122 name: "service name not equal", 123 }, 124 { 125 serviceReg1: &ServiceRegistration{ 126 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 127 ServiceName: "example-cache", 128 Namespace: "default", 129 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 130 Datacenter: "dc1", 131 JobID: "example", 132 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 133 Tags: []string{"foo"}, 134 Address: "192.168.13.13", 135 Port: 23813, 136 }, 137 serviceReg2: &ServiceRegistration{ 138 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 139 ServiceName: "example-cache", 140 Namespace: "default", 141 NodeID: "ba991c17-7ce5-9c20-78b7-311e63578583", 142 Datacenter: "dc1", 143 JobID: "example", 144 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 145 Tags: []string{"foo"}, 146 Address: "192.168.13.13", 147 Port: 23813, 148 }, 149 expectedOutput: false, 150 name: "node ID not equal", 151 }, 152 { 153 serviceReg1: &ServiceRegistration{ 154 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 155 ServiceName: "example-cache", 156 Namespace: "default", 157 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 158 Datacenter: "dc1", 159 JobID: "example", 160 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 161 Tags: []string{"foo"}, 162 Address: "192.168.13.13", 163 Port: 23813, 164 }, 165 serviceReg2: &ServiceRegistration{ 166 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 167 ServiceName: "example-cache", 168 Namespace: "default", 169 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 170 Datacenter: "dc2", 171 JobID: "example", 172 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 173 Tags: []string{"foo"}, 174 Address: "192.168.13.13", 175 Port: 23813, 176 }, 177 expectedOutput: false, 178 name: "datacenter not equal", 179 }, 180 { 181 serviceReg1: &ServiceRegistration{ 182 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 183 ServiceName: "example-cache", 184 Namespace: "default", 185 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 186 Datacenter: "dc1", 187 JobID: "example", 188 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 189 Tags: []string{"foo"}, 190 Address: "192.168.13.13", 191 Port: 23813, 192 }, 193 serviceReg2: &ServiceRegistration{ 194 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 195 ServiceName: "example-cache", 196 Namespace: "default", 197 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 198 Datacenter: "dc1", 199 JobID: "platform-example", 200 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 201 Tags: []string{"foo"}, 202 Address: "192.168.13.13", 203 Port: 23813, 204 }, 205 expectedOutput: false, 206 name: "job ID not equal", 207 }, 208 { 209 serviceReg1: &ServiceRegistration{ 210 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 211 ServiceName: "example-cache", 212 Namespace: "default", 213 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 214 Datacenter: "dc1", 215 JobID: "example", 216 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 217 Tags: []string{"foo"}, 218 Address: "192.168.13.13", 219 Port: 23813, 220 }, 221 serviceReg2: &ServiceRegistration{ 222 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 223 ServiceName: "example-cache", 224 Namespace: "default", 225 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 226 Datacenter: "dc1", 227 JobID: "example", 228 AllocID: "ba991c17-7ce5-9c20-78b7-311e63578583", 229 Tags: []string{"foo"}, 230 Address: "192.168.13.13", 231 Port: 23813, 232 }, 233 expectedOutput: false, 234 name: "alloc ID not equal", 235 }, 236 { 237 serviceReg1: &ServiceRegistration{ 238 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 239 ServiceName: "example-cache", 240 Namespace: "default", 241 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 242 Datacenter: "dc1", 243 JobID: "example", 244 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 245 Tags: []string{"foo"}, 246 Address: "192.168.13.13", 247 Port: 23813, 248 }, 249 serviceReg2: &ServiceRegistration{ 250 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 251 ServiceName: "example-cache", 252 Namespace: "platform", 253 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 254 Datacenter: "dc1", 255 JobID: "example", 256 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 257 Tags: []string{"foo"}, 258 Address: "192.168.13.13", 259 Port: 23813, 260 }, 261 expectedOutput: false, 262 name: "namespace not equal", 263 }, 264 { 265 serviceReg1: &ServiceRegistration{ 266 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 267 ServiceName: "example-cache", 268 Namespace: "default", 269 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 270 Datacenter: "dc1", 271 JobID: "example", 272 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 273 Tags: []string{"foo"}, 274 Address: "192.168.13.13", 275 Port: 23813, 276 }, 277 serviceReg2: &ServiceRegistration{ 278 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 279 ServiceName: "example-cache", 280 Namespace: "default", 281 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 282 Datacenter: "dc1", 283 JobID: "example", 284 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 285 Tags: []string{"foo"}, 286 Address: "10.10.13.13", 287 Port: 23813, 288 }, 289 expectedOutput: false, 290 name: "address not equal", 291 }, 292 { 293 serviceReg1: &ServiceRegistration{ 294 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 295 ServiceName: "example-cache", 296 Namespace: "default", 297 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 298 Datacenter: "dc1", 299 JobID: "example", 300 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 301 Tags: []string{"foo"}, 302 Address: "192.168.13.13", 303 Port: 23813, 304 }, 305 serviceReg2: &ServiceRegistration{ 306 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 307 ServiceName: "example-cache", 308 Namespace: "default", 309 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 310 Datacenter: "dc1", 311 JobID: "example", 312 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 313 Tags: []string{"foo"}, 314 Address: "192.168.13.13", 315 Port: 33813, 316 }, 317 expectedOutput: false, 318 name: "port not equal", 319 }, 320 { 321 serviceReg1: &ServiceRegistration{ 322 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 323 ServiceName: "example-cache", 324 Namespace: "default", 325 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 326 Datacenter: "dc1", 327 JobID: "example", 328 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 329 Tags: []string{"foo"}, 330 Address: "192.168.13.13", 331 Port: 23813, 332 }, 333 serviceReg2: &ServiceRegistration{ 334 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 335 ServiceName: "example-cache", 336 Namespace: "default", 337 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 338 Datacenter: "dc1", 339 JobID: "example", 340 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 341 Tags: []string{"canary"}, 342 Address: "192.168.13.13", 343 Port: 23813, 344 }, 345 expectedOutput: false, 346 name: "tags not equal", 347 }, 348 { 349 serviceReg1: &ServiceRegistration{ 350 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 351 ServiceName: "example-cache", 352 Namespace: "default", 353 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 354 Datacenter: "dc1", 355 JobID: "example", 356 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 357 Tags: []string{"foo"}, 358 Address: "192.168.13.13", 359 Port: 23813, 360 }, 361 serviceReg2: &ServiceRegistration{ 362 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 363 ServiceName: "example-cache", 364 Namespace: "default", 365 NodeID: "17a6d1c0-811e-2ca9-ded0-3d5d6a54904c", 366 Datacenter: "dc1", 367 JobID: "example", 368 AllocID: "2873cf75-42e5-7c45-ca1c-415f3e18be3d", 369 Tags: []string{"foo"}, 370 Address: "192.168.13.13", 371 Port: 23813, 372 }, 373 expectedOutput: true, 374 name: "both equal", 375 }, 376 } 377 378 for _, tc := range testCases { 379 t.Run(tc.name, func(t *testing.T) { 380 actualOutput := tc.serviceReg1.Equal(tc.serviceReg2) 381 require.Equal(t, tc.expectedOutput, actualOutput) 382 }) 383 } 384 } 385 386 func TestServiceRegistration_GetID(t *testing.T) { 387 testCases := []struct { 388 inputServiceRegistration *ServiceRegistration 389 expectedOutput string 390 name string 391 }{ 392 { 393 inputServiceRegistration: nil, 394 expectedOutput: "", 395 name: "nil input", 396 }, 397 { 398 inputServiceRegistration: &ServiceRegistration{ 399 ID: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 400 }, 401 expectedOutput: "_nomad-task-2873cf75-42e5-7c45-ca1c-415f3e18be3d-group-cache-example-cache-db", 402 name: "generic input 1", 403 }, 404 } 405 406 for _, tc := range testCases { 407 t.Run(tc.name, func(t *testing.T) { 408 actualOutput := tc.inputServiceRegistration.GetID() 409 require.Equal(t, tc.expectedOutput, actualOutput) 410 }) 411 } 412 } 413 414 func TestServiceRegistration_GetNamespace(t *testing.T) { 415 testCases := []struct { 416 inputServiceRegistration *ServiceRegistration 417 expectedOutput string 418 name string 419 }{ 420 { 421 inputServiceRegistration: nil, 422 expectedOutput: "", 423 name: "nil input", 424 }, 425 { 426 inputServiceRegistration: &ServiceRegistration{ 427 Namespace: "platform", 428 }, 429 expectedOutput: "platform", 430 name: "generic input 1", 431 }, 432 } 433 434 for _, tc := range testCases { 435 t.Run(tc.name, func(t *testing.T) { 436 actualOutput := tc.inputServiceRegistration.GetNamespace() 437 require.Equal(t, tc.expectedOutput, actualOutput) 438 }) 439 } 440 } 441 442 func TestServiceRegistrationListRequest_StaleReadSupport(t *testing.T) { 443 req := &ServiceRegistrationListRequest{} 444 require.True(t, req.IsRead()) 445 } 446 447 func TestServiceRegistrationByNameRequest_StaleReadSupport(t *testing.T) { 448 req := &ServiceRegistrationByNameRequest{} 449 require.True(t, req.IsRead()) 450 } 451 452 func TestServiceRegistration_HashWith(t *testing.T) { 453 a := ServiceRegistration{ 454 Address: "10.0.0.1", 455 Port: 9999, 456 } 457 458 // same service, same key -> same hash 459 must.Eq(t, a.HashWith("aaa"), a.HashWith("aaa")) 460 461 // same service, different key -> different hash 462 must.NotEq(t, a.HashWith("aaa"), a.HashWith("bbb")) 463 464 b := ServiceRegistration{ 465 Address: "10.0.0.2", 466 Port: 9998, 467 } 468 469 // different service, same key -> different hash 470 must.NotEq(t, a.HashWith("aaa"), b.HashWith("aaa")) 471 472 // different service, different key -> different hash 473 must.NotEq(t, a.HashWith("aaa"), b.HashWith("bbb")) 474 }