github.com/cilium/cilium@v1.16.2/pkg/bgpv1/manager/reconcilerv2/peer_advertisements_test.go (about) 1 // SPDX-License-Identifier: Apache-2.0 2 // Copyright Authors of Cilium 3 4 package reconcilerv2 5 6 import ( 7 "testing" 8 9 "github.com/sirupsen/logrus" 10 "github.com/stretchr/testify/require" 11 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 12 "k8s.io/utils/ptr" 13 14 "github.com/cilium/cilium/pkg/bgpv1/manager/store" 15 "github.com/cilium/cilium/pkg/k8s/apis/cilium.io/v2alpha1" 16 slimv1 "github.com/cilium/cilium/pkg/k8s/slim/k8s/apis/meta/v1" 17 ) 18 19 var ( 20 peerAdvertTestLogger = logrus.WithField("unit_test", "advertisements") 21 ) 22 23 // test fixtures 24 var ( 25 redPodCIDRAdvert = v2alpha1.BGPAdvertisement{ 26 AdvertisementType: v2alpha1.BGPPodCIDRAdvert, 27 Attributes: &v2alpha1.BGPAttributes{ 28 Communities: &v2alpha1.BGPCommunities{ 29 Standard: []v2alpha1.BGPStandardCommunity{ 30 "65000:100", 31 }, 32 }, 33 }, 34 } 35 36 redPodIPPoolAdvert = v2alpha1.BGPAdvertisement{ 37 AdvertisementType: v2alpha1.BGPCiliumPodIPPoolAdvert, 38 // CiliumPodIPPool selector is not set for this test 39 Attributes: &v2alpha1.BGPAttributes{ 40 Communities: &v2alpha1.BGPCommunities{ 41 Standard: []v2alpha1.BGPStandardCommunity{ 42 "65000:200", 43 }, 44 }, 45 }, 46 } 47 48 redServiceLBAdvert = v2alpha1.BGPAdvertisement{ 49 AdvertisementType: v2alpha1.BGPServiceAdvert, 50 Service: &v2alpha1.BGPServiceOptions{ 51 Addresses: []v2alpha1.BGPServiceAddressType{ 52 v2alpha1.BGPLoadBalancerIPAddr, 53 }, 54 }, 55 Attributes: &v2alpha1.BGPAttributes{ 56 Communities: &v2alpha1.BGPCommunities{ 57 Standard: []v2alpha1.BGPStandardCommunity{ 58 "65000:300", 59 }, 60 }, 61 }, 62 } 63 64 redAdvert = &v2alpha1.CiliumBGPAdvertisement{ 65 ObjectMeta: metav1.ObjectMeta{ 66 Name: "red-podCIDR-advertisement", 67 Labels: map[string]string{ 68 "advertise": "red_bgp", 69 }, 70 }, 71 Spec: v2alpha1.CiliumBGPAdvertisementSpec{ 72 Advertisements: []v2alpha1.BGPAdvertisement{ 73 redPodCIDRAdvert, 74 redPodIPPoolAdvert, 75 redServiceLBAdvert, 76 }, 77 }, 78 } 79 80 redAdvertWithSelector = func(selector *slimv1.LabelSelector) *v2alpha1.CiliumBGPAdvertisement { 81 cpy := redAdvert.DeepCopy() 82 for i := range cpy.Spec.Advertisements { 83 cpy.Spec.Advertisements[i].Selector = selector 84 } 85 return cpy 86 } 87 88 bluePodCIDRAdvert = v2alpha1.BGPAdvertisement{ 89 AdvertisementType: v2alpha1.BGPPodCIDRAdvert, 90 Attributes: &v2alpha1.BGPAttributes{ 91 Communities: &v2alpha1.BGPCommunities{ 92 Standard: []v2alpha1.BGPStandardCommunity{ 93 "65355:100", 94 }, 95 }, 96 }, 97 } 98 bluePodIPPoolAdvert = v2alpha1.BGPAdvertisement{ 99 AdvertisementType: v2alpha1.BGPCiliumPodIPPoolAdvert, 100 // CiliumPodIPPool selector is not set for this test 101 Attributes: &v2alpha1.BGPAttributes{ 102 Communities: &v2alpha1.BGPCommunities{ 103 Standard: []v2alpha1.BGPStandardCommunity{ 104 "65355:200", 105 }, 106 }, 107 }, 108 } 109 blueServicePodAdvert = v2alpha1.BGPAdvertisement{ 110 AdvertisementType: v2alpha1.BGPServiceAdvert, 111 Service: &v2alpha1.BGPServiceOptions{ 112 Addresses: []v2alpha1.BGPServiceAddressType{ 113 v2alpha1.BGPLoadBalancerIPAddr, 114 }, 115 }, 116 Attributes: &v2alpha1.BGPAttributes{ 117 Communities: &v2alpha1.BGPCommunities{ 118 Standard: []v2alpha1.BGPStandardCommunity{ 119 "65355:300", 120 }, 121 }, 122 }, 123 } 124 125 blueAdvert = &v2alpha1.CiliumBGPAdvertisement{ 126 ObjectMeta: metav1.ObjectMeta{ 127 Name: "blue-podCIDR-advertisement", 128 Labels: map[string]string{ 129 "advertise": "blue_bgp", 130 }, 131 }, 132 Spec: v2alpha1.CiliumBGPAdvertisementSpec{ 133 Advertisements: []v2alpha1.BGPAdvertisement{ 134 bluePodCIDRAdvert, 135 bluePodIPPoolAdvert, 136 blueServicePodAdvert, 137 }, 138 }, 139 } 140 141 blueAdvertWithSelector = func(selector *slimv1.LabelSelector) *v2alpha1.CiliumBGPAdvertisement { 142 cpy := blueAdvert.DeepCopy() 143 for i := range cpy.Spec.Advertisements { 144 cpy.Spec.Advertisements[i].Selector = selector 145 } 146 return cpy 147 } 148 149 // red peer config 150 redPeerConfig = &v2alpha1.CiliumBGPPeerConfig{ 151 ObjectMeta: metav1.ObjectMeta{ 152 Name: "peer-config-red", 153 }, 154 Spec: v2alpha1.CiliumBGPPeerConfigSpec{ 155 Families: []v2alpha1.CiliumBGPFamilyWithAdverts{ 156 { 157 CiliumBGPFamily: v2alpha1.CiliumBGPFamily{ 158 Afi: "ipv4", 159 Safi: "unicast", 160 }, 161 Advertisements: &slimv1.LabelSelector{ 162 MatchLabels: map[string]string{ 163 "advertise": "red_bgp", 164 }, 165 }, 166 }, 167 { 168 CiliumBGPFamily: v2alpha1.CiliumBGPFamily{ 169 Afi: "ipv6", 170 Safi: "unicast", 171 }, 172 Advertisements: &slimv1.LabelSelector{ 173 MatchLabels: map[string]string{ 174 "advertise": "red_bgp", 175 }, 176 }, 177 }, 178 }, 179 }, 180 } 181 182 // red peer config - v4 183 redPeerConfigV4 = &v2alpha1.CiliumBGPPeerConfig{ 184 ObjectMeta: metav1.ObjectMeta{ 185 Name: "peer-config-red-v4", 186 }, 187 Spec: v2alpha1.CiliumBGPPeerConfigSpec{ 188 Families: []v2alpha1.CiliumBGPFamilyWithAdverts{ 189 { 190 CiliumBGPFamily: v2alpha1.CiliumBGPFamily{ 191 Afi: "ipv4", 192 Safi: "unicast", 193 }, 194 Advertisements: &slimv1.LabelSelector{ 195 MatchLabels: map[string]string{ 196 "advertise": "red_bgp", 197 }, 198 }, 199 }, 200 }, 201 }, 202 } 203 204 // blue peer config 205 bluePeerConfig = &v2alpha1.CiliumBGPPeerConfig{ 206 ObjectMeta: metav1.ObjectMeta{ 207 Name: "peer-config-blue", 208 }, 209 Spec: v2alpha1.CiliumBGPPeerConfigSpec{ 210 Families: []v2alpha1.CiliumBGPFamilyWithAdverts{ 211 { 212 CiliumBGPFamily: v2alpha1.CiliumBGPFamily{ 213 Afi: "ipv4", 214 Safi: "unicast", 215 }, 216 Advertisements: &slimv1.LabelSelector{ 217 MatchLabels: map[string]string{ 218 "advertise": "blue_bgp", 219 }, 220 }, 221 }, 222 { 223 CiliumBGPFamily: v2alpha1.CiliumBGPFamily{ 224 Afi: "ipv6", 225 Safi: "unicast", 226 }, 227 Advertisements: &slimv1.LabelSelector{ 228 MatchLabels: map[string]string{ 229 "advertise": "blue_bgp", 230 }, 231 }, 232 }, 233 }, 234 }, 235 } 236 237 // peer configuration 238 redPeer65001 = v2alpha1.CiliumBGPNodePeer{ 239 Name: "red-peer-65001", 240 PeerAddress: ptr.To[string]("10.10.10.1"), 241 PeerConfigRef: &v2alpha1.PeerConfigReference{ 242 Group: "cilium.io", 243 Kind: "CiliumBGPPeerConfig", 244 Name: "peer-config-red", 245 }, 246 } 247 248 bluePeer65001 = v2alpha1.CiliumBGPNodePeer{ 249 Name: "blue-peer-65001", 250 PeerAddress: ptr.To[string]("10.10.10.2"), 251 PeerConfigRef: &v2alpha1.PeerConfigReference{ 252 Group: "cilium.io", 253 Kind: "CiliumBGPPeerConfig", 254 Name: "peer-config-blue", 255 }, 256 } 257 ) 258 259 func Test_GetAdvertisements(t *testing.T) { 260 tests := []struct { 261 name string 262 peerConfig []*v2alpha1.CiliumBGPPeerConfig 263 advertisements []*v2alpha1.CiliumBGPAdvertisement 264 reqAdvertTypes []v2alpha1.BGPAdvertisementType 265 reqBGPNodeInstance *v2alpha1.CiliumBGPNodeInstance 266 expectedError bool 267 expectedAdverts PeerAdvertisements 268 }{ 269 { 270 name: "Peer config does not exist for peer in BGPNodeInstance", 271 peerConfig: []*v2alpha1.CiliumBGPPeerConfig{}, 272 advertisements: []*v2alpha1.CiliumBGPAdvertisement{ 273 redAdvert, 274 }, 275 reqBGPNodeInstance: &v2alpha1.CiliumBGPNodeInstance{ 276 Name: "bgp-65001", 277 LocalASN: ptr.To[int64](65001), 278 Peers: []v2alpha1.CiliumBGPNodePeer{ 279 { 280 Name: "red-peer-65001", 281 PeerConfigRef: &v2alpha1.PeerConfigReference{ 282 Group: "cilium.io", 283 Kind: "CiliumBGPPeerConfig", 284 Name: "peer-config-red", 285 }, 286 }, 287 }, 288 }, 289 reqAdvertTypes: []v2alpha1.BGPAdvertisementType{v2alpha1.BGPPodCIDRAdvert}, 290 expectedAdverts: map[string]PeerFamilyAdvertisements{}, 291 }, 292 { 293 name: "Expecting PodCIDR advertisement for single peer", 294 peerConfig: []*v2alpha1.CiliumBGPPeerConfig{ 295 redPeerConfig, 296 bluePeerConfig, 297 }, 298 advertisements: []*v2alpha1.CiliumBGPAdvertisement{ 299 redAdvert, 300 blueAdvert, 301 }, 302 reqBGPNodeInstance: &v2alpha1.CiliumBGPNodeInstance{ 303 Name: "bgp-65001", 304 LocalASN: ptr.To[int64](65001), 305 Peers: []v2alpha1.CiliumBGPNodePeer{ 306 { 307 Name: "red-peer-65001", 308 PeerConfigRef: &v2alpha1.PeerConfigReference{ 309 Group: "cilium.io", 310 Kind: "CiliumBGPPeerConfig", 311 Name: "peer-config-red", 312 }, 313 }, 314 }, 315 }, 316 reqAdvertTypes: []v2alpha1.BGPAdvertisementType{v2alpha1.BGPPodCIDRAdvert}, 317 expectedAdverts: map[string]PeerFamilyAdvertisements{ 318 "red-peer-65001": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 319 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 320 {Afi: "ipv6", Safi: "unicast"}: {redPodCIDRAdvert}, 321 }, 322 }, 323 }, 324 { 325 name: "Expecting PodCIDR advertisement for dual peers", 326 peerConfig: []*v2alpha1.CiliumBGPPeerConfig{ 327 redPeerConfig, 328 bluePeerConfig, 329 }, 330 advertisements: []*v2alpha1.CiliumBGPAdvertisement{ 331 redAdvert, 332 blueAdvert, 333 }, 334 reqBGPNodeInstance: &v2alpha1.CiliumBGPNodeInstance{ 335 Name: "bgp-65001", 336 LocalASN: ptr.To[int64](65001), 337 Peers: []v2alpha1.CiliumBGPNodePeer{ 338 { 339 Name: "red-peer-65001", 340 PeerConfigRef: &v2alpha1.PeerConfigReference{ 341 Group: "cilium.io", 342 Kind: "CiliumBGPPeerConfig", 343 Name: "peer-config-red", 344 }, 345 }, 346 { 347 Name: "blue-peer-65001", 348 PeerConfigRef: &v2alpha1.PeerConfigReference{ 349 Group: "cilium.io", 350 Kind: "CiliumBGPPeerConfig", 351 Name: "peer-config-blue", 352 }, 353 }, 354 }, 355 }, 356 reqAdvertTypes: []v2alpha1.BGPAdvertisementType{v2alpha1.BGPPodCIDRAdvert}, 357 expectedAdverts: map[string]PeerFamilyAdvertisements{ 358 "red-peer-65001": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 359 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 360 {Afi: "ipv6", Safi: "unicast"}: {redPodCIDRAdvert}, 361 }, 362 "blue-peer-65001": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 363 {Afi: "ipv4", Safi: "unicast"}: {bluePodCIDRAdvert}, 364 {Afi: "ipv6", Safi: "unicast"}: {bluePodCIDRAdvert}, 365 }, 366 }, 367 }, 368 { 369 name: "Expecting no advertisement, unknown label", 370 peerConfig: []*v2alpha1.CiliumBGPPeerConfig{ 371 redPeerConfig, 372 bluePeerConfig, 373 }, 374 advertisements: []*v2alpha1.CiliumBGPAdvertisement{ 375 // redAdvert, red advertisement not present for this test case 376 blueAdvert, 377 }, 378 reqBGPNodeInstance: &v2alpha1.CiliumBGPNodeInstance{ 379 Name: "bgp-65001", 380 LocalASN: ptr.To[int64](65001), 381 Peers: []v2alpha1.CiliumBGPNodePeer{ 382 { 383 Name: "red-peer-65001", 384 PeerConfigRef: &v2alpha1.PeerConfigReference{ 385 Group: "cilium.io", 386 Kind: "CiliumBGPPeerConfig", 387 Name: "peer-config-red", 388 }, 389 }, 390 }, 391 }, 392 reqAdvertTypes: []v2alpha1.BGPAdvertisementType{v2alpha1.BGPPodCIDRAdvert}, 393 expectedAdverts: map[string]PeerFamilyAdvertisements{ 394 "red-peer-65001": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 395 {Afi: "ipv4", Safi: "unicast"}: nil, // empty advertisement 396 {Afi: "ipv6", Safi: "unicast"}: nil, // empty advertisement 397 }, 398 }, 399 }, 400 { 401 name: "Expecting PodCIDR and Service advertisement for single peer", 402 peerConfig: []*v2alpha1.CiliumBGPPeerConfig{ 403 redPeerConfig, 404 bluePeerConfig, 405 }, 406 advertisements: []*v2alpha1.CiliumBGPAdvertisement{ 407 redAdvert, 408 blueAdvert, 409 }, 410 reqBGPNodeInstance: &v2alpha1.CiliumBGPNodeInstance{ 411 Name: "bgp-65001", 412 LocalASN: ptr.To[int64](65001), 413 Peers: []v2alpha1.CiliumBGPNodePeer{ 414 { 415 Name: "red-peer-65001", 416 PeerConfigRef: &v2alpha1.PeerConfigReference{ 417 Group: "cilium.io", 418 Kind: "CiliumBGPPeerConfig", 419 Name: "peer-config-red", 420 }, 421 }, 422 }, 423 }, 424 reqAdvertTypes: []v2alpha1.BGPAdvertisementType{v2alpha1.BGPPodCIDRAdvert, v2alpha1.BGPServiceAdvert}, 425 expectedAdverts: map[string]PeerFamilyAdvertisements{ 426 "red-peer-65001": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 427 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert, redServiceLBAdvert}, 428 {Afi: "ipv6", Safi: "unicast"}: {redPodCIDRAdvert, redServiceLBAdvert}, 429 }, 430 }, 431 }, 432 { 433 name: "Expecting PodCIDR and Service advertisement for dual peers", 434 peerConfig: []*v2alpha1.CiliumBGPPeerConfig{ 435 redPeerConfig, 436 bluePeerConfig, 437 }, 438 advertisements: []*v2alpha1.CiliumBGPAdvertisement{ 439 redAdvert, 440 blueAdvert, 441 }, 442 reqBGPNodeInstance: &v2alpha1.CiliumBGPNodeInstance{ 443 Name: "bgp-65001", 444 LocalASN: ptr.To[int64](65001), 445 Peers: []v2alpha1.CiliumBGPNodePeer{ 446 { 447 Name: "red-peer-65001", 448 PeerConfigRef: &v2alpha1.PeerConfigReference{ 449 Group: "cilium.io", 450 Kind: "CiliumBGPPeerConfig", 451 Name: "peer-config-red", 452 }, 453 }, 454 { 455 Name: "blue-peer-65001", 456 PeerConfigRef: &v2alpha1.PeerConfigReference{ 457 Group: "cilium.io", 458 Kind: "CiliumBGPPeerConfig", 459 Name: "peer-config-blue", 460 }, 461 }, 462 }, 463 }, 464 reqAdvertTypes: []v2alpha1.BGPAdvertisementType{v2alpha1.BGPPodCIDRAdvert, v2alpha1.BGPServiceAdvert}, 465 expectedAdverts: map[string]PeerFamilyAdvertisements{ 466 "red-peer-65001": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 467 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert, redServiceLBAdvert}, 468 {Afi: "ipv6", Safi: "unicast"}: {redPodCIDRAdvert, redServiceLBAdvert}, 469 }, 470 "blue-peer-65001": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 471 {Afi: "ipv4", Safi: "unicast"}: {bluePodCIDRAdvert, blueServicePodAdvert}, 472 {Afi: "ipv6", Safi: "unicast"}: {bluePodCIDRAdvert, blueServicePodAdvert}, 473 }, 474 }, 475 }, 476 } 477 478 for _, tt := range tests { 479 t.Run(tt.name, func(t *testing.T) { 480 req := require.New(t) 481 params := PeerAdvertisementIn{ 482 Logger: peerAdvertTestLogger, 483 PeerConfigStore: store.InitMockStore[*v2alpha1.CiliumBGPPeerConfig](tt.peerConfig), 484 AdvertStore: store.InitMockStore[*v2alpha1.CiliumBGPAdvertisement](tt.advertisements), 485 } 486 487 r := NewCiliumPeerAdvertisement(params) 488 489 advertisements, err := r.GetConfiguredAdvertisements(tt.reqBGPNodeInstance, tt.reqAdvertTypes...) 490 if tt.expectedError { 491 req.Error(err) 492 return 493 } else { 494 req.NoError(err) 495 } 496 497 req.Equal(tt.expectedAdverts, advertisements) 498 }) 499 } 500 } 501 502 // Test_PeerAdvertisementsEqual tests the equality of two PeerAdvertisements 503 func Test_PeerAdvertisementsEqual(t *testing.T) { 504 tests := []struct { 505 name string 506 peerAdvert1 PeerAdvertisements 507 peerAdvert2 PeerAdvertisements 508 expectedEqual bool 509 }{ 510 { 511 name: "Empty PeerAdvertisements", 512 peerAdvert1: PeerAdvertisements{}, 513 peerAdvert2: PeerAdvertisements{}, 514 expectedEqual: true, 515 }, 516 { 517 name: "Nil PeerAdvertisements", 518 peerAdvert1: nil, 519 peerAdvert2: PeerAdvertisements{}, 520 expectedEqual: true, 521 }, 522 { 523 name: "Empty FamilyAdvertisements in peers", 524 peerAdvert1: PeerAdvertisements{ 525 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{}, 526 }, 527 peerAdvert2: PeerAdvertisements{ 528 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{}, 529 }, 530 expectedEqual: true, 531 }, 532 { 533 name: "Nil FamilyAdvertisements in peers", 534 peerAdvert1: PeerAdvertisements{ 535 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{}, 536 }, 537 peerAdvert2: PeerAdvertisements{ 538 "peer-1": nil, 539 }, 540 expectedEqual: true, 541 }, 542 { 543 name: "Equal FamilyAdvertisements in peers", 544 peerAdvert1: PeerAdvertisements{ 545 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 546 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 547 {Afi: "ipv6", Safi: "unicast"}: {bluePodCIDRAdvert}, 548 }, 549 }, 550 peerAdvert2: PeerAdvertisements{ 551 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 552 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 553 {Afi: "ipv6", Safi: "unicast"}: {bluePodCIDRAdvert}, 554 }, 555 }, 556 expectedEqual: true, 557 }, 558 { 559 name: "Unequal length in FamilyAdvertisements in peers", 560 peerAdvert1: PeerAdvertisements{ 561 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 562 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 563 {Afi: "ipv6", Safi: "unicast"}: {bluePodCIDRAdvert}, 564 }, 565 }, 566 peerAdvert2: PeerAdvertisements{ 567 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 568 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 569 }, 570 }, 571 expectedEqual: false, 572 }, 573 { 574 name: "Unequal value in FamilyAdvertisements in peers", 575 peerAdvert1: PeerAdvertisements{ 576 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 577 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 578 {Afi: "ipv6", Safi: "unicast"}: {bluePodCIDRAdvert}, 579 }, 580 }, 581 peerAdvert2: PeerAdvertisements{ 582 "peer-1": map[v2alpha1.CiliumBGPFamily][]v2alpha1.BGPAdvertisement{ 583 {Afi: "ipv4", Safi: "unicast"}: {redPodCIDRAdvert}, 584 {Afi: "ipv6", Safi: "unicast"}: {redPodCIDRAdvert}, 585 }, 586 }, 587 expectedEqual: false, 588 }, 589 } 590 591 for _, tt := range tests { 592 t.Run(tt.name, func(t *testing.T) { 593 req := require.New(t) 594 equal := PeerAdvertisementsEqual(tt.peerAdvert1, tt.peerAdvert2) 595 req.Equal(tt.expectedEqual, equal) 596 }) 597 } 598 }