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