|
30 | 30 | },
|
31 | 31 | }
|
32 | 32 |
|
| 33 | + defaultEnvFromVars = []corev1.EnvFromSource{ |
| 34 | + { |
| 35 | + Prefix: "test", |
| 36 | + }, |
| 37 | + { |
| 38 | + ConfigMapRef: &corev1.ConfigMapEnvSource{ |
| 39 | + LocalObjectReference: corev1.LocalObjectReference{ |
| 40 | + Name: "configmapForTest", |
| 41 | + }, |
| 42 | + }, |
| 43 | + }, |
| 44 | + { |
| 45 | + SecretRef: &corev1.SecretEnvSource{ |
| 46 | + LocalObjectReference: corev1.LocalObjectReference{ |
| 47 | + Name: "secretForTest", |
| 48 | + }, |
| 49 | + }, |
| 50 | + }, |
| 51 | + } |
| 52 | + |
33 | 53 | defaultVolumeMounts = []corev1.VolumeMount{
|
34 | 54 | {
|
35 | 55 | Name: "foo",
|
@@ -526,6 +546,171 @@ func TestInjectEnvIntoDeployment(t *testing.T) {
|
526 | 546 | }
|
527 | 547 | }
|
528 | 548 |
|
| 549 | +func TestInjectEnvFromIntoDeployment(t *testing.T) { |
| 550 | + tests := []struct { |
| 551 | + name string |
| 552 | + podSpec *corev1.PodSpec |
| 553 | + envFromVar []corev1.EnvFromSource |
| 554 | + expected *corev1.PodSpec |
| 555 | + }{ |
| 556 | + { |
| 557 | + // PodSpec has one container and `EnvFrom` is empty. |
| 558 | + // Expected: All env variable(s) specified are injected. |
| 559 | + name: "WithContainerHasNoEnvFromVar", |
| 560 | + podSpec: &corev1.PodSpec{ |
| 561 | + Containers: []corev1.Container{ |
| 562 | + {}, |
| 563 | + }, |
| 564 | + }, |
| 565 | + envFromVar: defaultEnvFromVars, |
| 566 | + expected: &corev1.PodSpec{ |
| 567 | + Containers: []corev1.Container{ |
| 568 | + { |
| 569 | + EnvFrom: defaultEnvFromVars, |
| 570 | + }, |
| 571 | + }, |
| 572 | + }, |
| 573 | + }, |
| 574 | + { |
| 575 | + // PodSpec has one container and it has overlapping envFrom var(s). |
| 576 | + // Expected: existing duplicate env vars won't be appended in the envFrom. |
| 577 | + name: "WithContainerHasOverlappingEnvFromVar", |
| 578 | + podSpec: &corev1.PodSpec{ |
| 579 | + Containers: []corev1.Container{ |
| 580 | + { |
| 581 | + EnvFrom: []corev1.EnvFromSource{ |
| 582 | + { |
| 583 | + Prefix: "test", |
| 584 | + }, |
| 585 | + { |
| 586 | + ConfigMapRef: &corev1.ConfigMapEnvSource{ |
| 587 | + LocalObjectReference: corev1.LocalObjectReference{ |
| 588 | + Name: "configmapForTest", |
| 589 | + }, |
| 590 | + }, |
| 591 | + }, |
| 592 | + { |
| 593 | + SecretRef: &corev1.SecretEnvSource{ |
| 594 | + LocalObjectReference: corev1.LocalObjectReference{ |
| 595 | + Name: "secretForTest", |
| 596 | + }, |
| 597 | + }, |
| 598 | + }, |
| 599 | + }, |
| 600 | + }, |
| 601 | + }, |
| 602 | + }, |
| 603 | + envFromVar: defaultEnvFromVars, |
| 604 | + expected: &corev1.PodSpec{ |
| 605 | + Containers: []corev1.Container{ |
| 606 | + { |
| 607 | + EnvFrom: []corev1.EnvFromSource{ |
| 608 | + { |
| 609 | + Prefix: "test", |
| 610 | + }, |
| 611 | + { |
| 612 | + ConfigMapRef: &corev1.ConfigMapEnvSource{ |
| 613 | + LocalObjectReference: corev1.LocalObjectReference{ |
| 614 | + Name: "configmapForTest", |
| 615 | + }, |
| 616 | + }, |
| 617 | + }, |
| 618 | + { |
| 619 | + SecretRef: &corev1.SecretEnvSource{ |
| 620 | + LocalObjectReference: corev1.LocalObjectReference{ |
| 621 | + Name: "secretForTest", |
| 622 | + }, |
| 623 | + }, |
| 624 | + }, |
| 625 | + }, |
| 626 | + }, |
| 627 | + }, |
| 628 | + }, |
| 629 | + }, |
| 630 | + { |
| 631 | + // PodSpec has one container and it has non overlapping envFrom var(s). |
| 632 | + // Expected: existing non overlapping env vars are intact. |
| 633 | + name: "WithContainerHasNonOverlappingEnvFromVar", |
| 634 | + podSpec: &corev1.PodSpec{ |
| 635 | + Containers: []corev1.Container{ |
| 636 | + { |
| 637 | + EnvFrom: []corev1.EnvFromSource{ |
| 638 | + { |
| 639 | + Prefix: "foo", |
| 640 | + }, |
| 641 | + }, |
| 642 | + }, |
| 643 | + }, |
| 644 | + }, |
| 645 | + envFromVar: defaultEnvFromVars, |
| 646 | + expected: &corev1.PodSpec{ |
| 647 | + Containers: []corev1.Container{ |
| 648 | + { |
| 649 | + EnvFrom: append([]corev1.EnvFromSource{ |
| 650 | + { |
| 651 | + Prefix: "foo", |
| 652 | + }, |
| 653 | + }, defaultEnvFromVars...), |
| 654 | + }, |
| 655 | + }, |
| 656 | + }, |
| 657 | + }, |
| 658 | + { |
| 659 | + // PodSpec has more than one container(s) |
| 660 | + // Expected: All container(s) should be updated as expected. |
| 661 | + name: "WithMultipleContainers", |
| 662 | + podSpec: &corev1.PodSpec{ |
| 663 | + Containers: []corev1.Container{ |
| 664 | + {}, |
| 665 | + { |
| 666 | + EnvFrom: []corev1.EnvFromSource{ |
| 667 | + { |
| 668 | + Prefix: "foo", |
| 669 | + }, |
| 670 | + }, |
| 671 | + }, |
| 672 | + { |
| 673 | + EnvFrom: []corev1.EnvFromSource{ |
| 674 | + { |
| 675 | + Prefix: "bar", |
| 676 | + }, |
| 677 | + }, |
| 678 | + }, |
| 679 | + }, |
| 680 | + }, |
| 681 | + envFromVar: defaultEnvFromVars, |
| 682 | + expected: &corev1.PodSpec{ |
| 683 | + Containers: []corev1.Container{ |
| 684 | + { |
| 685 | + EnvFrom: defaultEnvFromVars, |
| 686 | + }, |
| 687 | + { |
| 688 | + EnvFrom: append([]corev1.EnvFromSource{ |
| 689 | + { |
| 690 | + Prefix: "foo", |
| 691 | + }, |
| 692 | + }, defaultEnvFromVars...), |
| 693 | + }, |
| 694 | + { |
| 695 | + EnvFrom: append([]corev1.EnvFromSource{ |
| 696 | + { |
| 697 | + Prefix: "bar", |
| 698 | + }, |
| 699 | + }, defaultEnvFromVars...), |
| 700 | + }, |
| 701 | + }, |
| 702 | + }, |
| 703 | + }, |
| 704 | + } |
| 705 | + |
| 706 | + for _, tt := range tests { |
| 707 | + t.Run(tt.name, func(t *testing.T) { |
| 708 | + inject.InjectEnvFromIntoDeployment(tt.podSpec, tt.envFromVar) |
| 709 | + assert.Equal(t, tt.expected, tt.podSpec) |
| 710 | + }) |
| 711 | + } |
| 712 | +} |
| 713 | + |
529 | 714 | func TestInjectTolerationsIntoDeployment(t *testing.T) {
|
530 | 715 | tests := []struct {
|
531 | 716 | name string
|
|
0 commit comments