@@ -25607,7 +25607,7 @@ func TestValidateSELinuxChangePolicy(t *testing.T) {
25607
25607
25608
25608
func TestValidatePodResize(t *testing.T) {
25609
25609
mkPod := func(req, lim core.ResourceList, tweaks ...podtest.Tweak) *core.Pod {
25610
- return podtest.MakePod("pod", append(tweaks,
25610
+ allTweaks := [] podtest.Tweak{
25611
25611
podtest.SetContainers(
25612
25612
podtest.MakeContainer(
25613
25613
"container",
@@ -25619,11 +25619,14 @@ func TestValidatePodResize(t *testing.T) {
25619
25619
),
25620
25620
),
25621
25621
),
25622
- )...)
25622
+ }
25623
+ // Prepend the SetContainers call so TweakContainers can be used.
25624
+ allTweaks = append(allTweaks, tweaks...)
25625
+ return podtest.MakePod("pod", allTweaks...)
25623
25626
}
25624
25627
25625
25628
mkPodWithInitContainers := func(req, lim core.ResourceList, restartPolicy core.ContainerRestartPolicy, tweaks ...podtest.Tweak) *core.Pod {
25626
- return podtest.MakePod("pod", append(tweaks,
25629
+ allTweaks := [] podtest.Tweak{
25627
25630
podtest.SetInitContainers(
25628
25631
podtest.MakeContainer(
25629
25632
"container",
@@ -25636,7 +25639,18 @@ func TestValidatePodResize(t *testing.T) {
25636
25639
podtest.SetContainerRestartPolicy(restartPolicy),
25637
25640
),
25638
25641
),
25639
- )...)
25642
+ }
25643
+ // Prepend the SetInitContainers call so TweakContainers can be used.
25644
+ allTweaks = append(allTweaks, tweaks...)
25645
+ return podtest.MakePod("pod", allTweaks...)
25646
+ }
25647
+
25648
+ resizePolicy := func(resource core.ResourceName, policy core.ResourceResizeRestartPolicy) podtest.Tweak {
25649
+ return podtest.TweakContainers(podtest.SetContainerResizePolicy(
25650
+ core.ContainerResizePolicy{
25651
+ ResourceName: resource,
25652
+ RestartPolicy: policy,
25653
+ }))
25640
25654
}
25641
25655
25642
25656
tests := []struct {
@@ -25667,14 +25681,14 @@ func TestValidatePodResize(t *testing.T) {
25667
25681
new: podtest.MakePod("pod",
25668
25682
podtest.SetContainers(podtest.MakeContainer("container",
25669
25683
podtest.SetContainerResources(core.ResourceRequirements{
25670
- Limits: getResources("100m", "100Mi ", "", ""),
25684
+ Limits: getResources("100m", "200Mi ", "", ""),
25671
25685
}))),
25672
25686
podtest.SetPodResources(&core.ResourceRequirements{Limits: getResources("100m", "200Mi", "", "")}),
25673
25687
),
25674
25688
old: podtest.MakePod("pod",
25675
25689
podtest.SetContainers(podtest.MakeContainer("container",
25676
25690
podtest.SetContainerResources(core.ResourceRequirements{
25677
- Limits: getResources("100m", "200Mi ", "", ""),
25691
+ Limits: getResources("100m", "100Mi ", "", ""),
25678
25692
}))),
25679
25693
podtest.SetPodResources(&core.ResourceRequirements{Limits: getResources("100m", "200Mi", "", "")}),
25680
25694
),
@@ -25793,9 +25807,24 @@ func TestValidatePodResize(t *testing.T) {
25793
25807
new: mkPod(core.ResourceList{}, getResources("200m", "0", "1Gi", "")),
25794
25808
err: "",
25795
25809
}, {
25796
- test: "memory limit change",
25810
+ test: "memory limit increase",
25811
+ old: mkPod(core.ResourceList{}, getResources("100m", "100Mi", "", "")),
25812
+ new: mkPod(core.ResourceList{}, getResources("100m", "200Mi", "", "")),
25813
+ err: "",
25814
+ }, {
25815
+ test: "no restart policy: memory limit decrease",
25797
25816
old: mkPod(core.ResourceList{}, getResources("100m", "200Mi", "", "")),
25798
25817
new: mkPod(core.ResourceList{}, getResources("100m", "100Mi", "", "")),
25818
+ err: "memory limits cannot be decreased",
25819
+ }, {
25820
+ test: "restart NotRequired: memory limit decrease",
25821
+ old: mkPod(core.ResourceList{}, getResources("100m", "200Mi", "", ""), resizePolicy("memory", core.NotRequired)),
25822
+ new: mkPod(core.ResourceList{}, getResources("100m", "100Mi", "", ""), resizePolicy("memory", core.NotRequired)),
25823
+ err: "memory limits cannot be decreased",
25824
+ }, {
25825
+ test: "RestartContainer: memory limit decrease",
25826
+ old: mkPod(core.ResourceList{}, getResources("100m", "200Mi", "", ""), resizePolicy("memory", core.RestartContainer)),
25827
+ new: mkPod(core.ResourceList{}, getResources("100m", "100Mi", "", ""), resizePolicy("memory", core.RestartContainer)),
25799
25828
err: "",
25800
25829
}, {
25801
25830
test: "storage limit change",
@@ -25824,13 +25853,13 @@ func TestValidatePodResize(t *testing.T) {
25824
25853
err: "",
25825
25854
}, {
25826
25855
test: "Pod QoS unchanged, burstable -> burstable",
25827
- old: mkPod(getResources("200m", "200Mi ", "1Gi", ""), getResources("400m", "400Mi ", "2Gi", "")),
25828
- new: mkPod(getResources("100m", "100Mi ", "1Gi", ""), getResources("200m", "200Mi ", "2Gi", "")),
25856
+ old: mkPod(getResources("200m", "100Mi ", "1Gi", ""), getResources("400m", "200Mi ", "2Gi", "")),
25857
+ new: mkPod(getResources("100m", "200Mi ", "1Gi", ""), getResources("200m", "400Mi ", "2Gi", "")),
25829
25858
err: "",
25830
25859
}, {
25831
25860
test: "Pod QoS unchanged, burstable -> burstable, add limits",
25832
25861
old: mkPod(getResources("100m", "100Mi", "", ""), core.ResourceList{}),
25833
- new: mkPod(getResources("100m", "100Mi", "", ""), getResources("200m", "200Mi ", "", "")),
25862
+ new: mkPod(getResources("100m", "100Mi", "", ""), getResources("200m", "", "", "")),
25834
25863
err: "",
25835
25864
}, {
25836
25865
test: "Pod QoS unchanged, burstable -> burstable, add requests",
@@ -26005,9 +26034,24 @@ func TestValidatePodResize(t *testing.T) {
26005
26034
new: mkPodWithInitContainers(core.ResourceList{}, getResources("200m", "0", "1Gi", ""), core.ContainerRestartPolicyAlways),
26006
26035
err: "",
26007
26036
}, {
26008
- test: "memory limit change for sidecar containers",
26037
+ test: "memory limit increase for sidecar containers",
26038
+ old: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "100Mi", "", ""), core.ContainerRestartPolicyAlways),
26039
+ new: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "200Mi", "", ""), core.ContainerRestartPolicyAlways),
26040
+ err: "",
26041
+ }, {
26042
+ test: "memory limit decrease for sidecar containers, no resize policy",
26009
26043
old: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "200Mi", "", ""), core.ContainerRestartPolicyAlways),
26010
26044
new: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "100Mi", "", ""), core.ContainerRestartPolicyAlways),
26045
+ err: "memory limits cannot be decreased",
26046
+ }, {
26047
+ test: "memory limit decrease for sidecar containers, resize policy NotRequired",
26048
+ old: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "200Mi", "", ""), core.ContainerRestartPolicyAlways, resizePolicy(core.ResourceMemory, core.NotRequired)),
26049
+ new: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "100Mi", "", ""), core.ContainerRestartPolicyAlways, resizePolicy(core.ResourceMemory, core.NotRequired)),
26050
+ err: "memory limits cannot be decreased",
26051
+ }, {
26052
+ test: "memory limit decrease for sidecar containers, resize policy RestartContainer",
26053
+ old: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "200Mi", "", ""), core.ContainerRestartPolicyAlways, resizePolicy(core.ResourceMemory, core.RestartContainer)),
26054
+ new: mkPodWithInitContainers(core.ResourceList{}, getResources("100m", "100Mi", "", ""), core.ContainerRestartPolicyAlways, resizePolicy(core.ResourceMemory, core.RestartContainer)),
26011
26055
err: "",
26012
26056
}, {
26013
26057
test: "storage limit change for sidecar containers",
@@ -26033,42 +26077,44 @@ func TestValidatePodResize(t *testing.T) {
26033
26077
}
26034
26078
26035
26079
for _, test := range tests {
26036
- test.new.ObjectMeta.ResourceVersion = "1"
26037
- test.old.ObjectMeta.ResourceVersion = "1"
26038
-
26039
- // set required fields if old and new match and have no opinion on the value
26040
- if test.new.Name == "" && test.old.Name == "" {
26041
- test.new.Name = "name"
26042
- test.old.Name = "name"
26043
- }
26044
- if test.new.Namespace == "" && test.old.Namespace == "" {
26045
- test.new.Namespace = "namespace"
26046
- test.old.Namespace = "namespace"
26047
- }
26048
- if test.new.Spec.Containers == nil && test.old.Spec.Containers == nil {
26049
- test.new.Spec.Containers = []core.Container{{Name: "autoadded", Image: "image", TerminationMessagePolicy: "File", ImagePullPolicy: "Always"}}
26050
- test.old.Spec.Containers = []core.Container{{Name: "autoadded", Image: "image", TerminationMessagePolicy: "File", ImagePullPolicy: "Always"}}
26051
- }
26052
- if len(test.new.Spec.DNSPolicy) == 0 && len(test.old.Spec.DNSPolicy) == 0 {
26053
- test.new.Spec.DNSPolicy = core.DNSClusterFirst
26054
- test.old.Spec.DNSPolicy = core.DNSClusterFirst
26055
- }
26056
- if len(test.new.Spec.RestartPolicy) == 0 && len(test.old.Spec.RestartPolicy) == 0 {
26057
- test.new.Spec.RestartPolicy = "Always"
26058
- test.old.Spec.RestartPolicy = "Always"
26059
- }
26060
-
26061
- errs := ValidatePodResize(test.new, test.old, PodValidationOptions{})
26062
- if test.err == "" {
26063
- if len(errs) != 0 {
26064
- t.Errorf("unexpected invalid: %s (%+v)\nA: %+v\nB: %+v", test.test, errs, test.new, test.old)
26080
+ t.Run(test.test, func(t *testing.T) {
26081
+ test.new.ObjectMeta.ResourceVersion = "1"
26082
+ test.old.ObjectMeta.ResourceVersion = "1"
26083
+
26084
+ // set required fields if old and new match and have no opinion on the value
26085
+ if test.new.Name == "" && test.old.Name == "" {
26086
+ test.new.Name = "name"
26087
+ test.old.Name = "name"
26065
26088
}
26066
- } else {
26067
- if len(errs) == 0 {
26068
- t.Errorf("unexpected valid: %s\nA: %+v\nB: %+v", test.test, test.new, test.old)
26069
- } else if actualErr := errs.ToAggregate().Error(); !strings.Contains(actualErr, test.err) {
26070
- t.Errorf("unexpected error message: %s\nExpected error: %s\nActual error: %s", test.test, test.err, actualErr)
26089
+ if test.new.Namespace == "" && test.old.Namespace == "" {
26090
+ test.new.Namespace = "namespace"
26091
+ test.old.Namespace = "namespace"
26071
26092
}
26072
- }
26093
+ if test.new.Spec.Containers == nil && test.old.Spec.Containers == nil {
26094
+ test.new.Spec.Containers = []core.Container{{Name: "autoadded", Image: "image", TerminationMessagePolicy: "File", ImagePullPolicy: "Always"}}
26095
+ test.old.Spec.Containers = []core.Container{{Name: "autoadded", Image: "image", TerminationMessagePolicy: "File", ImagePullPolicy: "Always"}}
26096
+ }
26097
+ if len(test.new.Spec.DNSPolicy) == 0 && len(test.old.Spec.DNSPolicy) == 0 {
26098
+ test.new.Spec.DNSPolicy = core.DNSClusterFirst
26099
+ test.old.Spec.DNSPolicy = core.DNSClusterFirst
26100
+ }
26101
+ if len(test.new.Spec.RestartPolicy) == 0 && len(test.old.Spec.RestartPolicy) == 0 {
26102
+ test.new.Spec.RestartPolicy = "Always"
26103
+ test.old.Spec.RestartPolicy = "Always"
26104
+ }
26105
+
26106
+ errs := ValidatePodResize(test.new, test.old, PodValidationOptions{AllowSidecarResizePolicy: true})
26107
+ if test.err == "" {
26108
+ if len(errs) != 0 {
26109
+ t.Errorf("unexpected invalid: (%+v)\nA: %+v\nB: %+v", errs, test.new, test.old)
26110
+ }
26111
+ } else {
26112
+ if len(errs) == 0 {
26113
+ t.Errorf("unexpected valid:\nA: %+v\nB: %+v", test.new, test.old)
26114
+ } else if actualErr := errs.ToAggregate().Error(); !strings.Contains(actualErr, test.err) {
26115
+ t.Errorf("unexpected error message:\nExpected error: %s\nActual error: %s", test.err, actualErr)
26116
+ }
26117
+ }
26118
+ })
26073
26119
}
26074
26120
}
0 commit comments