|
1 | 1 | package meta |
2 | 2 |
|
3 | 3 | import ( |
4 | | - "fmt" |
5 | 4 | "strings" |
6 | 5 | "testing" |
7 | 6 | "time" |
@@ -406,102 +405,80 @@ func TestGetGracefullyPausedTime(t *testing.T) { |
406 | 405 | }) |
407 | 406 | } |
408 | 407 | } |
409 | | -func TestCalculateReleaseName_Deterministic(t *testing.T) { |
410 | | - obj := unstructured.Unstructured{} |
411 | | - obj.SetName("my-resource") |
412 | | - obj.SetGroupVersionKind(schema.GroupVersionKind{ |
413 | | - Group: "test.group", |
414 | | - Version: "v1", |
415 | | - Kind: "MyKind", |
416 | | - }) |
417 | | - obj.SetUID(types.UID("5a47edd9-c710-4b4b-b5ea-b6cdf9fc1f58")) |
418 | | - |
419 | | - r1 := CalculateReleaseName(&obj) |
420 | | - r2 := CalculateReleaseName(&obj) |
421 | | - fmt.Println(r1) |
422 | | - fmt.Println(r2) |
423 | | - |
424 | | - if r1 == "" { |
425 | | - t.Fatalf("CalculateReleaseName returned empty string") |
426 | | - } |
427 | | - if r1 != r2 { |
428 | | - t.Fatalf("CalculateReleaseName not deterministic: %q vs %q", r1, r2) |
429 | | - } |
430 | | - if !strings.HasPrefix(r1, "my-resource-") { |
431 | | - t.Fatalf("CalculateReleaseName result %q does not have expected prefix %q", r1, "my-resource-") |
432 | | - } |
433 | | -} |
434 | | - |
435 | | -func TestCalculateReleaseName_DifferentGVKProducesDifferentHash(t *testing.T) { |
436 | | - name := "same-name" |
437 | | - |
438 | | - obj1 := unstructured.Unstructured{} |
439 | | - obj1.SetName(name) |
440 | | - obj1.SetGroupVersionKind(schema.GroupVersionKind{ |
441 | | - Group: "group.one", |
442 | | - Version: "v1", |
443 | | - Kind: "KindA", |
444 | | - }) |
445 | | - obj1.SetUID(types.UID("5a47edd9-c710-4b4b-b5ea-b6cdf9fc1f58")) |
446 | | - |
447 | | - obj2 := unstructured.Unstructured{} |
448 | | - obj2.SetName(name) |
449 | | - obj2.SetGroupVersionKind(schema.GroupVersionKind{ |
450 | | - Group: "group.two", |
451 | | - Version: "v1", |
452 | | - Kind: "KindA", |
453 | | - }) |
454 | | - obj2.SetUID(types.UID("b3d6f4e2-1c2d-4e5f-9a6b-7c8d9e0f1a2b")) |
455 | | - |
456 | | - r1 := CalculateReleaseName(&obj1) |
457 | | - r2 := CalculateReleaseName(&obj2) |
458 | | - |
459 | | - if r1 == r2 { |
460 | | - t.Fatalf("Expected different release names for different GVKs but got same: %q", r1) |
| 408 | +func TestCalculateReleaseName(t *testing.T) { |
| 409 | + tests := []struct { |
| 410 | + name string |
| 411 | + objName string |
| 412 | + uid string |
| 413 | + safeReleaseName bool |
| 414 | + expectedPrefix string |
| 415 | + isDeterministic bool |
| 416 | + }{ |
| 417 | + { |
| 418 | + name: "Deterministic with UID and safeReleaseName", |
| 419 | + objName: "my-resource", |
| 420 | + uid: "5a47edd9-c710-4b4b-b5ea-b6cdf9fc1f58", |
| 421 | + safeReleaseName: true, |
| 422 | + expectedPrefix: "my-resource-", |
| 423 | + isDeterministic: true, |
| 424 | + }, |
| 425 | + { |
| 426 | + name: "Deterministic without safeReleaseName", |
| 427 | + objName: "simple-name", |
| 428 | + uid: "5a47edd9-c710-4b4b-b5ea-b6cdf9fc1f58", |
| 429 | + safeReleaseName: false, |
| 430 | + expectedPrefix: "simple-name", |
| 431 | + isDeterministic: true, |
| 432 | + }, |
| 433 | + { |
| 434 | + name: "Non-deterministic when UID is missing and safeReleaseName is true", |
| 435 | + objName: "no-uid-resource", |
| 436 | + uid: "", |
| 437 | + safeReleaseName: true, |
| 438 | + expectedPrefix: "no-uid-resource-", |
| 439 | + isDeterministic: false, |
| 440 | + }, |
461 | 441 | } |
462 | | -} |
463 | | - |
464 | | -func TestCalculateReleaseName_NameIncludedAndUniqueForDifferentNames(t *testing.T) { |
465 | | - gvk := schema.GroupVersionKind{Group: "example.io", Version: "v1", Kind: "Example"} |
466 | | - objA := unstructured.Unstructured{} |
467 | | - objA.SetName("alpha") |
468 | | - objA.SetGroupVersionKind(gvk) |
469 | | - objA.SetUID(types.UID("aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa")) |
470 | 442 |
|
471 | | - objB := unstructured.Unstructured{} |
472 | | - objB.SetName("beta") |
473 | | - objB.SetGroupVersionKind(gvk) |
474 | | - objB.SetUID(types.UID("bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb")) |
475 | | - |
476 | | - ra := CalculateReleaseName(&objA) |
477 | | - rb := CalculateReleaseName(&objB) |
| 443 | + for _, tt := range tests { |
| 444 | + t.Run(tt.name, func(t *testing.T) { |
| 445 | + obj := &unstructured.Unstructured{} |
| 446 | + obj.SetName(tt.objName) |
| 447 | + if tt.uid != "" { |
| 448 | + obj.SetUID(types.UID(tt.uid)) |
| 449 | + } |
478 | 450 |
|
479 | | - if !strings.HasPrefix(ra, "alpha-") { |
480 | | - t.Fatalf("Release name %q does not start with expected prefix %q", ra, "alpha-") |
481 | | - } |
482 | | - if !strings.HasPrefix(rb, "beta-") { |
483 | | - t.Fatalf("Release name %q does not start with expected prefix %q", rb, "beta-") |
484 | | - } |
485 | | - if ra == rb { |
486 | | - t.Fatalf("Expected different release names for different resource names but got same: %q", ra) |
487 | | - } |
488 | | -} |
| 451 | + // First execution |
| 452 | + r1 := CalculateReleaseName(obj, tt.safeReleaseName) |
| 453 | + // Second execution to check determinism |
| 454 | + r2 := CalculateReleaseName(obj, tt.safeReleaseName) |
489 | 455 |
|
490 | | -func TestCalculateReleaseName_UIDNotFound(t *testing.T) { |
491 | | - obj := unstructured.Unstructured{} |
492 | | - obj.SetName("no-uid-resource") |
493 | | - obj.SetGroupVersionKind(schema.GroupVersionKind{ |
494 | | - Group: "test.group", |
495 | | - Version: "v1", |
496 | | - Kind: "NoUIDKind", |
497 | | - }) |
498 | | - // Not setting UID |
| 456 | + // 1. Basic validation |
| 457 | + if r1 == "" { |
| 458 | + t.Fatal("CalculateReleaseName returned an empty string") |
| 459 | + } |
499 | 460 |
|
500 | | - releaseName := CalculateReleaseName(&obj) |
| 461 | + // 2. Prefix validation |
| 462 | + if !strings.HasPrefix(r1, tt.expectedPrefix) { |
| 463 | + t.Errorf("Expected prefix %q, got %q", tt.expectedPrefix, r1) |
| 464 | + } |
501 | 465 |
|
502 | | - fmt.Println(releaseName) |
| 466 | + // 3. Determinism validation |
| 467 | + if tt.isDeterministic { |
| 468 | + if r1 != r2 { |
| 469 | + t.Errorf("Result should be deterministic but changed: %q vs %q", r1, r2) |
| 470 | + } |
| 471 | + } else { |
| 472 | + // For non-deterministic cases, we expect them to be different |
| 473 | + if r1 == r2 { |
| 474 | + t.Errorf("Result should be random but was identical: %q", r1) |
| 475 | + } |
| 476 | + } |
503 | 477 |
|
504 | | - if !strings.HasPrefix(releaseName, "no-uid-resource-") { |
505 | | - t.Fatalf("CalculateReleaseName result %q does not have expected prefix %q", releaseName, "no-uid-resource-") |
| 478 | + // 4. Special case: safeReleaseName = false should return EXACTLY the name |
| 479 | + if !tt.safeReleaseName && r1 != tt.objName { |
| 480 | + t.Errorf("Expected exact name %q, got %q", tt.objName, r1) |
| 481 | + } |
| 482 | + }) |
506 | 483 | } |
507 | 484 | } |
0 commit comments