github.com/operator-framework/operator-lifecycle-manager@v0.30.0/pkg/controller/registry/resolver/cache/operators_test.go (about) 1 package cache 2 3 import ( 4 "testing" 5 6 "github.com/stretchr/testify/require" 7 8 opregistry "github.com/operator-framework/operator-registry/pkg/registry" 9 ) 10 11 func TestGVKStringToProvidedAPISet(t *testing.T) { 12 tests := []struct { 13 name string 14 in string 15 want APISet 16 }{ 17 { 18 name: "EmptyString/EmptySet", 19 in: "", 20 want: make(APISet), 21 }, 22 { 23 name: "Garbage/EmptySet", 24 in: ",,,,,alkjahsdfjlh!@#$%", 25 want: make(APISet), 26 }, 27 { 28 name: "SingleBadGVK/EmptySet", 29 in: "this-is.not-good", 30 want: make(APISet), 31 }, 32 { 33 name: "MultipleBadGVK/EmptySet", 34 in: "this-is.not-good,thisisnoteither", 35 want: make(APISet), 36 }, 37 { 38 name: "SingleGoodGVK/SingleAPI", 39 in: "Goose.v1alpha1.birds.com", 40 want: APISet{ 41 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}: {}, 42 }, 43 }, 44 { 45 name: "MutlipleGoodGVK/MultipleAPIs", 46 in: "Goose.v1alpha1.birds.com,Moose.v1alpha1.mammals.com", 47 want: APISet{ 48 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}: {}, 49 opregistry.APIKey{Group: "mammals.com", Version: "v1alpha1", Kind: "Moose"}: {}, 50 }, 51 }, 52 { 53 name: "SingleGoodGVK/SingleBadGVK/SingleAPI", 54 in: "Goose.v1alpha1.birds.com,Moose.v1alpha1", 55 want: APISet{ 56 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}: {}, 57 }, 58 }, 59 { 60 name: "MultipleGoodGVK/MultipleBadGVK/MultipleAPIs", 61 in: "Goose.v1alpha1.birds.com,Moose.v1alpha1,Goat,Egret.v1beta1.birds.com", 62 want: APISet{ 63 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}: {}, 64 opregistry.APIKey{Group: "birds.com", Version: "v1beta1", Kind: "Egret"}: {}, 65 }, 66 }, 67 } 68 69 for _, tt := range tests { 70 t.Run(tt.name, func(t *testing.T) { 71 require.EqualValues(t, tt.want, GVKStringToProvidedAPISet(tt.in)) 72 }) 73 } 74 } 75 func TestAPIKeyToGVKString(t *testing.T) { 76 tests := []struct { 77 name string 78 in opregistry.APIKey 79 want string 80 }{ 81 { 82 name: "EmptyAPIKey", 83 in: opregistry.APIKey{}, 84 want: "..", 85 }, 86 { 87 name: "BadAPIKey", 88 in: opregistry.APIKey{Group: "birds. ", Version: "-"}, 89 want: ".-.birds. ", 90 }, 91 { 92 name: "GoodAPIKey", 93 in: opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}, 94 want: "Goose.v1alpha1.birds.com", 95 }, 96 } 97 98 for _, tt := range tests { 99 t.Run(tt.name, func(t *testing.T) { 100 require.Equal(t, tt.want, APIKeyToGVKString(tt.in)) 101 }) 102 } 103 } 104 105 func TestAPISetString(t *testing.T) { 106 tests := []struct { 107 name string 108 in APISet 109 want string 110 }{ 111 { 112 name: "EmptySet", 113 in: make(APISet), 114 want: "", 115 }, 116 { 117 name: "OneAPI", 118 in: APISet{ 119 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}: {}, 120 }, 121 want: "Goose.v1alpha1.birds.com", 122 }, 123 { 124 name: "MutipleAPIs", 125 in: APISet{ 126 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}: {}, 127 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Egret"}: {}, 128 }, 129 want: "Egret.v1alpha1.birds.com,Goose.v1alpha1.birds.com", 130 }, 131 { 132 name: "MutipleAPIs/OneBad", 133 in: APISet{ 134 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1"}: {}, 135 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Goose"}: {}, 136 opregistry.APIKey{Group: "birds.com", Version: "v1alpha1", Kind: "Egret"}: {}, 137 }, 138 want: ".v1alpha1.birds.com,Egret.v1alpha1.birds.com,Goose.v1alpha1.birds.com", 139 }, 140 } 141 142 for _, tt := range tests { 143 t.Run(tt.name, func(t *testing.T) { 144 require.Equal(t, tt.want, tt.in.String()) 145 }) 146 } 147 } 148 149 func TestAPISetUnion(t *testing.T) { 150 type input struct { 151 left APISet 152 right []APISet 153 } 154 tests := []struct { 155 name string 156 in input 157 want APISet 158 }{ 159 { 160 name: "EmptyLeft/NilRight/EmptySet", 161 in: input{ 162 left: make(APISet), 163 right: nil, 164 }, 165 want: make(APISet), 166 }, 167 { 168 name: "EmptyLeft/OneEmptyRight/EmptySet", 169 in: input{ 170 left: make(APISet), 171 right: []APISet{ 172 {}, 173 }, 174 }, 175 want: make(APISet), 176 }, 177 { 178 name: "EmptyLeft/OneRight/OneFromRight", 179 in: input{ 180 left: make(APISet), 181 right: []APISet{ 182 { 183 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 184 }, 185 }, 186 }, 187 want: APISet{ 188 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 189 }, 190 }, 191 { 192 name: "OneLeft/EmptyRight/OneFromLeft", 193 in: input{ 194 left: APISet{ 195 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 196 }, 197 right: []APISet{ 198 {}, 199 }, 200 }, 201 want: APISet{ 202 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 203 }, 204 }, 205 { 206 name: "MultipleLeft/MultipleRight/AllFromLeftAndRight", 207 in: input{ 208 left: APISet{ 209 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 210 opregistry.APIKey{Group: "Egret", Version: "v1beta1", Kind: "birds.com"}: {}, 211 }, 212 right: []APISet{ 213 { 214 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 215 opregistry.APIKey{Group: "Egret", Version: "v1beta1", Kind: "birds.com"}: {}, 216 opregistry.APIKey{Group: "Crow", Version: "v1beta1", Kind: "birds.com"}: {}, 217 }, 218 { 219 // Empty APISet for good measure 220 }, 221 { 222 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 223 opregistry.APIKey{Group: "Cow", Version: "v1alpha1", Kind: "mammals.com"}: {}, 224 opregistry.APIKey{Group: "Egret", Version: "v1beta1", Kind: "birds.com"}: {}, 225 opregistry.APIKey{Group: "Crow", Version: "v1beta1", Kind: "birds.com"}: {}, 226 }, 227 { 228 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 229 opregistry.APIKey{Group: "Cow", Version: "v1alpha1", Kind: "mammals.com"}: {}, 230 opregistry.APIKey{Group: "Goat", Version: "v1beta1", Kind: "mammals.com"}: {}, 231 }, 232 }, 233 }, 234 want: APISet{ 235 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 236 opregistry.APIKey{Group: "Egret", Version: "v1beta1", Kind: "birds.com"}: {}, 237 opregistry.APIKey{Group: "Crow", Version: "v1beta1", Kind: "birds.com"}: {}, 238 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 239 opregistry.APIKey{Group: "Cow", Version: "v1alpha1", Kind: "mammals.com"}: {}, 240 opregistry.APIKey{Group: "Goat", Version: "v1beta1", Kind: "mammals.com"}: {}, 241 }, 242 }, 243 } 244 245 for _, tt := range tests { 246 t.Run(tt.name, func(t *testing.T) { 247 require.EqualValues(t, tt.want, tt.in.left.Union(tt.in.right...)) 248 }) 249 } 250 } 251 252 func TestAPISetIntersection(t *testing.T) { 253 type input struct { 254 left APISet 255 right []APISet 256 } 257 tests := []struct { 258 name string 259 in input 260 want APISet 261 }{ 262 { 263 name: "EmptyLeft/NilRight/EmptySet", 264 in: input{ 265 left: make(APISet), 266 right: nil, 267 }, 268 want: make(APISet), 269 }, 270 { 271 name: "EmptyLeft/OneEmptyRight/EmptySet", 272 in: input{ 273 left: make(APISet), 274 right: []APISet{ 275 {}, 276 }, 277 }, 278 want: make(APISet), 279 }, 280 { 281 name: "EmptyLeft/OneRight/EmptySet", 282 in: input{ 283 left: make(APISet), 284 right: []APISet{ 285 { 286 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 287 }, 288 }, 289 }, 290 want: make(APISet), 291 }, 292 { 293 name: "OneLeft/EmptyRight/NoIntersection", 294 in: input{ 295 left: APISet{ 296 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 297 }, 298 right: []APISet{ 299 {}, 300 }, 301 }, 302 want: make(APISet), 303 }, 304 { 305 name: "OneLeft/TwoRight/OneIntersection", 306 in: input{ 307 left: APISet{ 308 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 309 }, 310 right: []APISet{ 311 { 312 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 313 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 314 }, 315 }, 316 }, 317 want: APISet{ 318 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 319 }, 320 }, 321 { 322 name: "OneLeft/TwoRight/SingleSet/OneIntersection", 323 in: input{ 324 left: APISet{ 325 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 326 }, 327 right: []APISet{ 328 { 329 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 330 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 331 }, 332 }, 333 }, 334 want: APISet{ 335 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 336 }, 337 }, 338 { 339 name: "TwoLeft/OneRight/SingleSet/OneIntersection", 340 in: input{ 341 left: APISet{ 342 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 343 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 344 }, 345 right: []APISet{ 346 { 347 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 348 }, 349 }, 350 }, 351 want: APISet{ 352 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 353 }, 354 }, 355 { 356 name: "OneLeft/TwoRight/SeparateSets/OneIntersection", 357 in: input{ 358 left: APISet{ 359 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 360 }, 361 right: []APISet{ 362 { 363 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 364 }, 365 { 366 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 367 }, 368 }, 369 }, 370 want: APISet{ 371 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 372 }, 373 }, 374 { 375 name: "OneLeft/TwoRight/SeparateSets/NoIntersection", 376 in: input{ 377 left: APISet{ 378 opregistry.APIKey{Group: "Egret", Version: "v1alpha1", Kind: "birds.com"}: {}, 379 }, 380 right: []APISet{ 381 { 382 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 383 }, 384 { 385 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 386 }, 387 }, 388 }, 389 want: make(APISet), 390 }, 391 { 392 name: "MultipleLeft/MultipleRight/SeparateSets/SomeIntersection", 393 in: input{ 394 left: APISet{ 395 opregistry.APIKey{Group: "Egret", Version: "v1alpha1", Kind: "birds.com"}: {}, 396 opregistry.APIKey{Group: "Hippo", Version: "v1alpha1", Kind: "mammals.com"}: {}, 397 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 398 }, 399 right: []APISet{ 400 { 401 opregistry.APIKey{Group: "Hippo", Version: "v1alpha1", Kind: "mammals.com"}: {}, 402 }, 403 { 404 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 405 }, 406 { 407 opregistry.APIKey{Group: "Goat", Version: "v1alpha1", Kind: "mammals.com"}: {}, 408 }, 409 { 410 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 411 }, 412 }, 413 }, 414 want: APISet{ 415 opregistry.APIKey{Group: "Hippo", Version: "v1alpha1", Kind: "mammals.com"}: {}, 416 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 417 }, 418 }, 419 } 420 421 for _, tt := range tests { 422 t.Run(tt.name, func(t *testing.T) { 423 require.EqualValues(t, tt.want, tt.in.left.Intersection(tt.in.right...)) 424 }) 425 } 426 } 427 428 func TestAPISetDifference(t *testing.T) { 429 type input struct { 430 left APISet 431 right APISet 432 } 433 tests := []struct { 434 name string 435 in input 436 want APISet 437 }{ 438 { 439 name: "EmptySet", 440 in: input{ 441 left: make(APISet), 442 right: make(APISet), 443 }, 444 want: make(APISet), 445 }, 446 { 447 name: "OneLeft/EmptyRight/LeftIsDifference", 448 in: input{ 449 left: APISet{ 450 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 451 }, 452 right: make(APISet), 453 }, 454 want: APISet{ 455 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 456 }, 457 }, 458 { 459 name: "EmptyLeft/OneRight/NoDifference", 460 in: input{ 461 left: make(APISet), 462 right: APISet{ 463 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 464 }, 465 }, 466 want: make(APISet), 467 }, 468 { 469 name: "OneLeft/OneRight/NoDifference", 470 in: input{ 471 left: APISet{ 472 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 473 }, 474 right: APISet{ 475 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 476 }, 477 }, 478 want: make(APISet), 479 }, 480 { 481 name: "MultipleLeft/MultipleRight/NoDifference", 482 in: input{ 483 left: APISet{ 484 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 485 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 486 }, 487 right: APISet{ 488 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 489 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 490 }, 491 }, 492 want: make(APISet), 493 }, 494 { 495 name: "MultipleLeft/MultipleRight/SingleDifference", 496 in: input{ 497 left: APISet{ 498 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 499 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 500 opregistry.APIKey{Group: "Goat", Version: "v1alpha1", Kind: "mammals.com"}: {}, 501 }, 502 right: APISet{ 503 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 504 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 505 }, 506 }, 507 want: APISet{ 508 opregistry.APIKey{Group: "Goat", Version: "v1alpha1", Kind: "mammals.com"}: {}, 509 }, 510 }, 511 { 512 name: "MultipleLeft/MultipleRight/SomeDifference", 513 in: input{ 514 left: APISet{ 515 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 516 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 517 opregistry.APIKey{Group: "Goat", Version: "v1alpha1", Kind: "mammals.com"}: {}, 518 }, 519 right: APISet{ 520 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 521 opregistry.APIKey{Group: "Gopher", Version: "v1alpha2", Kind: "mammals.com"}: {}, 522 }, 523 }, 524 want: APISet{ 525 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 526 opregistry.APIKey{Group: "Goat", Version: "v1alpha1", Kind: "mammals.com"}: {}, 527 }, 528 }, 529 { 530 name: "MultipleLeft/MultipleRight/AllLeftDifference", 531 in: input{ 532 left: APISet{ 533 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 534 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 535 opregistry.APIKey{Group: "Goat", Version: "v1alpha1", Kind: "mammals.com"}: {}, 536 }, 537 right: APISet{ 538 opregistry.APIKey{Group: "Giraffe", Version: "v1alpha1", Kind: "mammals.com"}: {}, 539 opregistry.APIKey{Group: "Gopher", Version: "v1alpha2", Kind: "mammals.com"}: {}, 540 opregistry.APIKey{Group: "Bison", Version: "v1beta1", Kind: "mammals.com"}: {}, 541 }, 542 }, 543 want: APISet{ 544 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 545 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 546 opregistry.APIKey{Group: "Goat", Version: "v1alpha1", Kind: "mammals.com"}: {}, 547 }, 548 }, 549 } 550 551 for _, tt := range tests { 552 t.Run(tt.name, func(t *testing.T) { 553 require.EqualValues(t, tt.want, tt.in.left.Difference(tt.in.right)) 554 }) 555 } 556 } 557 558 func TestAPISetIsSubset(t *testing.T) { 559 type input struct { 560 left APISet 561 right APISet 562 } 563 tests := []struct { 564 name string 565 in input 566 want bool 567 }{ 568 { 569 name: "EmptySet", 570 in: input{ 571 left: make(APISet), 572 right: make(APISet), 573 }, 574 want: true, 575 }, 576 { 577 name: "Same", 578 in: input{ 579 left: APISet{ 580 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 581 }, 582 right: APISet{ 583 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 584 }, 585 }, 586 want: true, 587 }, 588 { 589 name: "IsSubset", 590 in: input{ 591 left: APISet{ 592 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 593 }, 594 right: APISet{ 595 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 596 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 597 }, 598 }, 599 want: true, 600 }, 601 { 602 name: "NotSubset", 603 in: input{ 604 left: APISet{ 605 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 606 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 607 }, 608 right: APISet{ 609 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 610 }, 611 }, 612 want: false, 613 }, 614 { 615 name: "NotSubset/EmptyRight", 616 in: input{ 617 left: APISet{ 618 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 619 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 620 }, 621 right: make(APISet), 622 }, 623 want: false, 624 }, 625 } 626 627 for _, tt := range tests { 628 t.Run(tt.name, func(t *testing.T) { 629 require.Equal(t, tt.want, tt.in.left.IsSubset(tt.in.right)) 630 }) 631 } 632 } 633 634 func TestStripPlural(t *testing.T) { 635 tests := []struct { 636 name string 637 in APISet 638 want APISet 639 }{ 640 { 641 name: "EmptySet", 642 in: make(APISet), 643 want: make(APISet), 644 }, 645 { 646 name: "NilSet", 647 in: nil, 648 want: make(APISet), 649 }, 650 { 651 name: "OnePluralToRemove", 652 in: APISet{ 653 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com", Plural: "Geese"}: {}, 654 }, 655 want: APISet{ 656 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 657 }, 658 }, 659 { 660 name: "MultiplePluralsToRemove", 661 in: APISet{ 662 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com", Plural: "Geese"}: {}, 663 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com", Plural: "Moose"}: {}, 664 }, 665 want: APISet{ 666 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 667 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 668 }, 669 }, 670 { 671 name: "NoPluralsToRemove", 672 in: APISet{ 673 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 674 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 675 }, 676 want: APISet{ 677 opregistry.APIKey{Group: "Goose", Version: "v1alpha1", Kind: "birds.com"}: {}, 678 opregistry.APIKey{Group: "Moose", Version: "v1alpha1", Kind: "mammals.com"}: {}, 679 }, 680 }, 681 } 682 683 for _, tt := range tests { 684 t.Run(tt.name, func(t *testing.T) { 685 require.EqualValues(t, tt.want, tt.in.StripPlural()) 686 }) 687 } 688 } 689 690 func TestCatalogKey_String(t *testing.T) { 691 type fields struct { 692 Name string 693 Namespace string 694 } 695 tests := []struct { 696 name string 697 fields fields 698 want string 699 }{ 700 { 701 name: "catalogkey", 702 fields: fields{Name: "test", Namespace: "namespace"}, 703 want: "test/namespace", 704 }, 705 } 706 for _, tt := range tests { 707 t.Run(tt.name, func(t *testing.T) { 708 k := &SourceKey{ 709 Name: tt.fields.Name, 710 Namespace: tt.fields.Namespace, 711 } 712 if got := k.String(); got != tt.want { 713 t.Errorf("CatalogKey.String() = %v, want %v", got, tt.want) 714 } 715 }) 716 } 717 } 718 719 func TestOperatorSourceInfo_String(t *testing.T) { 720 type fields struct { 721 Package string 722 Channel string 723 CatalogSource string 724 CatalogSourceNamespace string 725 } 726 tests := []struct { 727 name string 728 fields fields 729 want string 730 }{ 731 { 732 name: "testString", 733 fields: fields{ 734 Package: "p", 735 Channel: "c", 736 CatalogSource: "s", 737 CatalogSourceNamespace: "n", 738 }, 739 want: "p/c in s/n", 740 }, 741 } 742 for _, tt := range tests { 743 t.Run(tt.name, func(t *testing.T) { 744 i := &OperatorSourceInfo{ 745 Package: tt.fields.Package, 746 Channel: tt.fields.Channel, 747 Catalog: SourceKey{Name: tt.fields.CatalogSource, Namespace: tt.fields.CatalogSourceNamespace}, 748 } 749 if got := i.String(); got != tt.want { 750 t.Errorf("OperatorSourceInfo.String() = %v, want %v", got, tt.want) 751 } 752 }) 753 } 754 }