test: cleanup validation tests

This commit is contained in:
Anish Shah 2024-10-25 17:55:30 -07:00
parent dc3c4ed559
commit 7ac302b47a
2 changed files with 204 additions and 380 deletions

View File

@ -5504,7 +5504,7 @@ func ValidatePodResize(newPod, oldPod *core.Pod, opts PodValidationOptions) fiel
// newPod.Spec.Containers[].Resources are allowed. // newPod.Spec.Containers[].Resources are allowed.
specPath := field.NewPath("spec") specPath := field.NewPath("spec")
if qos.GetPodQOS(oldPod) != qos.ComputePodQOS(newPod) { if qos.GetPodQOS(oldPod) != qos.ComputePodQOS(newPod) {
allErrs = append(allErrs, field.Invalid(specPath, newPod.Status.QOSClass, "Pod QOS Class must not change")) allErrs = append(allErrs, field.Invalid(specPath, newPod.Status.QOSClass, "Pod QOS Class may not change as a result of resizing"))
} }
// Ensure that only CPU and memory resources are mutable. // Ensure that only CPU and memory resources are mutable.
@ -5539,7 +5539,7 @@ func ValidatePodResize(newPod, oldPod *core.Pod, opts PodValidationOptions) fiel
} }
mungedPodSpec.Containers = newContainers mungedPodSpec.Containers = newContainers
if !apiequality.Semantic.DeepEqual(mungedPodSpec, oldPod.Spec) { if !apiequality.Semantic.DeepEqual(mungedPodSpec, oldPod.Spec) {
// This likely means that the user has made changes to CPU and Memory resources. // This likely means that the user has made changes to resources other than CPU and Memory.
specDiff := cmp.Diff(oldPod.Spec, mungedPodSpec) specDiff := cmp.Diff(oldPod.Spec, mungedPodSpec)
errs := field.Forbidden(specPath, fmt.Sprintf("pod resize may not change fields other than cpu and memory\n%v", specDiff)) errs := field.Forbidden(specPath, fmt.Sprintf("pod resize may not change fields other than cpu and memory\n%v", specDiff))
allErrs = append(allErrs, errs) allErrs = append(allErrs, errs)

View File

@ -7795,14 +7795,7 @@ func TestValidateResizePolicy(t *testing.T) {
} }
} }
func getResourceLimits(cpu, memory string) core.ResourceList { func getResources(cpu, memory, ephemeralStorage, persistentStorage string) core.ResourceList {
res := core.ResourceList{}
res[core.ResourceCPU] = resource.MustParse(cpu)
res[core.ResourceMemory] = resource.MustParse(memory)
return res
}
func getResources(cpu, memory, storage string) core.ResourceList {
res := core.ResourceList{} res := core.ResourceList{}
if cpu != "" { if cpu != "" {
res[core.ResourceCPU] = resource.MustParse(cpu) res[core.ResourceCPU] = resource.MustParse(cpu)
@ -7810,8 +7803,11 @@ func getResources(cpu, memory, storage string) core.ResourceList {
if memory != "" { if memory != "" {
res[core.ResourceMemory] = resource.MustParse(memory) res[core.ResourceMemory] = resource.MustParse(memory)
} }
if storage != "" { if ephemeralStorage != "" {
res[core.ResourceEphemeralStorage] = resource.MustParse(storage) res[core.ResourceEphemeralStorage] = resource.MustParse(ephemeralStorage)
}
if persistentStorage != "" {
res[core.ResourceStorage] = resource.MustParse(persistentStorage)
} }
return res return res
} }
@ -8945,7 +8941,7 @@ func TestValidateContainers(t *testing.T) {
Name: "abc-123", Name: "abc-123",
Image: "image", Image: "image",
Resources: core.ResourceRequirements{ Resources: core.ResourceRequirements{
Limits: getResourceLimits("-10", "0"), Limits: getResources("-10", "0", "", ""),
}, },
ImagePullPolicy: "IfNotPresent", ImagePullPolicy: "IfNotPresent",
TerminationMessagePolicy: "File", TerminationMessagePolicy: "File",
@ -8958,7 +8954,7 @@ func TestValidateContainers(t *testing.T) {
Name: "abc-123", Name: "abc-123",
Image: "image", Image: "image",
Resources: core.ResourceRequirements{ Resources: core.ResourceRequirements{
Requests: getResourceLimits("-10", "0"), Requests: getResources("-10", "0", "", ""),
}, },
ImagePullPolicy: "IfNotPresent", ImagePullPolicy: "IfNotPresent",
TerminationMessagePolicy: "File", TerminationMessagePolicy: "File",
@ -8971,7 +8967,7 @@ func TestValidateContainers(t *testing.T) {
Name: "abc-123", Name: "abc-123",
Image: "image", Image: "image",
Resources: core.ResourceRequirements{ Resources: core.ResourceRequirements{
Limits: getResourceLimits("0", "-10"), Limits: getResources("0", "-10", "", ""),
}, },
ImagePullPolicy: "IfNotPresent", ImagePullPolicy: "IfNotPresent",
TerminationMessagePolicy: "File", TerminationMessagePolicy: "File",
@ -8984,8 +8980,8 @@ func TestValidateContainers(t *testing.T) {
Name: "abc-123", Name: "abc-123",
Image: "image", Image: "image",
Resources: core.ResourceRequirements{ Resources: core.ResourceRequirements{
Limits: getResourceLimits("5", "3"), Limits: getResources("5", "3", "", ""),
Requests: getResourceLimits("6", "3"), Requests: getResources("6", "3", "", ""),
}, },
ImagePullPolicy: "IfNotPresent", ImagePullPolicy: "IfNotPresent",
TerminationMessagePolicy: "File", TerminationMessagePolicy: "File",
@ -9016,8 +9012,8 @@ func TestValidateContainers(t *testing.T) {
Name: "abc-123", Name: "abc-123",
Image: "image", Image: "image",
Resources: core.ResourceRequirements{ Resources: core.ResourceRequirements{
Limits: getResourceLimits("5", "3"), Limits: getResources("5", "3", "", ""),
Requests: getResourceLimits("6", "3"), Requests: getResources("6", "3", "", ""),
}, },
ImagePullPolicy: "IfNotPresent", ImagePullPolicy: "IfNotPresent",
TerminationMessagePolicy: "File", TerminationMessagePolicy: "File",
@ -9030,8 +9026,8 @@ func TestValidateContainers(t *testing.T) {
Name: "abc-123", Name: "abc-123",
Image: "image", Image: "image",
Resources: core.ResourceRequirements{ Resources: core.ResourceRequirements{
Limits: getResourceLimits("5", "3"), Limits: getResources("5", "3", "", ""),
Requests: getResourceLimits("5", "4"), Requests: getResources("5", "4", "", ""),
}, },
ImagePullPolicy: "IfNotPresent", ImagePullPolicy: "IfNotPresent",
TerminationMessagePolicy: "File", TerminationMessagePolicy: "File",
@ -12317,10 +12313,10 @@ func TestValidatePodUpdate(t *testing.T) {
) )
tests := []struct { tests := []struct {
new core.Pod
old core.Pod
err string
test string test string
old core.Pod
new core.Pod
err string
}{ }{
{new: *podtest.MakePod(""), old: *podtest.MakePod(""), err: "", test: "nothing"}, { {new: *podtest.MakePod(""), old: *podtest.MakePod(""), err: "", test: "nothing"}, {
new: *podtest.MakePod("foo"), new: *podtest.MakePod("foo"),
@ -12486,13 +12482,13 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "0", "1Gi"), Limits: getResources("200m", "0", "1Gi", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "0", "1Gi"), Limits: getResources("100m", "0", "1Gi", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12501,13 +12497,13 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "100Mi"), Limits: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "200Mi"), Limits: getResources("100m", "200Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12516,13 +12512,13 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "100Mi", "1Gi"), Limits: getResources("100m", "100Mi", "1Gi", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "100Mi", "2Gi"), Limits: getResources("100m", "100Mi", "2Gi", ""),
}))), }))),
), ),
err: "Forbidden: pod updates may not change fields other than", err: "Forbidden: pod updates may not change fields other than",
@ -12531,13 +12527,13 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "0"), Requests: getResources("100m", "0", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("200m", "0"), Requests: getResources("200m", "0", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12546,13 +12542,13 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("0", "200Mi"), Requests: getResources("0", "200Mi", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("0", "100Mi"), Requests: getResources("0", "100Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12561,13 +12557,13 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResources("100m", "0", "2Gi"), Requests: getResources("100m", "0", "2Gi", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResources("100m", "0", "1Gi"), Requests: getResources("100m", "0", "1Gi", ""),
}))), }))),
), ),
err: "Forbidden: pod updates may not change fields other than", err: "Forbidden: pod updates may not change fields other than",
@ -12576,15 +12572,15 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "400Mi", "1Gi"), Limits: getResources("200m", "400Mi", "1Gi", ""),
Requests: getResources("200m", "400Mi", "1Gi"), Requests: getResources("200m", "400Mi", "1Gi", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "100Mi", "1Gi"), Limits: getResources("100m", "100Mi", "1Gi", ""),
Requests: getResources("100m", "100Mi", "1Gi"), Requests: getResources("100m", "100Mi", "1Gi", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12593,15 +12589,15 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "200Mi", "2Gi"), Limits: getResources("200m", "200Mi", "2Gi", ""),
Requests: getResources("100m", "100Mi", "1Gi"), Requests: getResources("100m", "100Mi", "1Gi", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("400m", "400Mi", "2Gi"), Limits: getResources("400m", "400Mi", "2Gi", ""),
Requests: getResources("200m", "200Mi", "1Gi"), Requests: getResources("200m", "200Mi", "1Gi", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12610,14 +12606,14 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"), Limits: getResources("200m", "200Mi", "", ""),
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12626,14 +12622,14 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"), Limits: getResources("200m", "200Mi", "", ""),
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12642,14 +12638,14 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("400m", "", "1Gi"), Limits: getResources("400m", "", "1Gi", ""),
Requests: getResources("300m", "", "1Gi"), Requests: getResources("300m", "", "1Gi", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "500Mi", "1Gi"), Limits: getResources("200m", "500Mi", "1Gi", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12658,14 +12654,14 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("400m", "500Mi", "2Gi"), Limits: getResources("400m", "500Mi", "2Gi", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "300Mi", "2Gi"), Limits: getResources("200m", "300Mi", "2Gi", ""),
Requests: getResourceLimits("100m", "200Mi"), Requests: getResources("100m", "200Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12674,15 +12670,15 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"), Limits: getResources("200m", "200Mi", "", ""),
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "100Mi"), Limits: getResources("100m", "100Mi", "", ""),
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12691,14 +12687,14 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "100Mi"), Limits: getResources("100m", "100Mi", "", ""),
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -12707,8 +12703,8 @@ func TestValidatePodUpdate(t *testing.T) {
new: *podtest.MakePod("pod", new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"), Limits: getResources("200m", "200Mi", "", ""),
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
old: *podtest.MakePod("pod"), old: *podtest.MakePod("pod"),
@ -12719,8 +12715,8 @@ func TestValidatePodUpdate(t *testing.T) {
old: *podtest.MakePod("pod", old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container", podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{ podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"), Limits: getResources("200m", "200Mi", "", ""),
Requests: getResourceLimits("100m", "100Mi"), Requests: getResources("100m", "100Mi", "", ""),
}))), }))),
), ),
err: "spec: Forbidden: pod updates may not change fields", err: "spec: Forbidden: pod updates may not change fields",
@ -18692,33 +18688,6 @@ func TestValidateResourceNames(t *testing.T) {
} }
} }
func getResourceList(cpu, memory string) core.ResourceList {
res := core.ResourceList{}
if cpu != "" {
res[core.ResourceCPU] = resource.MustParse(cpu)
}
if memory != "" {
res[core.ResourceMemory] = resource.MustParse(memory)
}
return res
}
func getStorageResourceList(storage string) core.ResourceList {
res := core.ResourceList{}
if storage != "" {
res[core.ResourceStorage] = resource.MustParse(storage)
}
return res
}
func getLocalStorageResourceList(ephemeralStorage string) core.ResourceList {
res := core.ResourceList{}
if ephemeralStorage != "" {
res[core.ResourceEphemeralStorage] = resource.MustParse(ephemeralStorage)
}
return res
}
func TestValidateLimitRangeForLocalStorage(t *testing.T) { func TestValidateLimitRangeForLocalStorage(t *testing.T) {
testCases := []struct { testCases := []struct {
name string name string
@ -18728,16 +18697,16 @@ func TestValidateLimitRangeForLocalStorage(t *testing.T) {
spec: core.LimitRangeSpec{ spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePod, Type: core.LimitTypePod,
Max: getLocalStorageResourceList("10000Mi"), Max: getResources("", "", "10000Mi", ""),
Min: getLocalStorageResourceList("100Mi"), Min: getResources("", "", "100Mi", ""),
MaxLimitRequestRatio: getLocalStorageResourceList(""), MaxLimitRequestRatio: getResources("", "", "", ""),
}, { }, {
Type: core.LimitTypeContainer, Type: core.LimitTypeContainer,
Max: getLocalStorageResourceList("10000Mi"), Max: getResources("", "", "10000Mi", ""),
Min: getLocalStorageResourceList("100Mi"), Min: getResources("", "", "100Mi", ""),
Default: getLocalStorageResourceList("500Mi"), Default: getResources("", "", "500Mi", ""),
DefaultRequest: getLocalStorageResourceList("200Mi"), DefaultRequest: getResources("", "", "200Mi", ""),
MaxLimitRequestRatio: getLocalStorageResourceList(""), MaxLimitRequestRatio: getResources("", "", "", ""),
}}, }},
}, },
}, },
@ -18760,20 +18729,20 @@ func TestValidateLimitRange(t *testing.T) {
spec: core.LimitRangeSpec{ spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePod, Type: core.LimitTypePod,
Max: getResourceList("100m", "10000Mi"), Max: getResources("100m", "10000Mi", "", ""),
Min: getResourceList("5m", "100Mi"), Min: getResources("5m", "100Mi", "", ""),
MaxLimitRequestRatio: getResourceList("10", ""), MaxLimitRequestRatio: getResources("10", "", "", ""),
}, { }, {
Type: core.LimitTypeContainer, Type: core.LimitTypeContainer,
Max: getResourceList("100m", "10000Mi"), Max: getResources("100m", "10000Mi", "", ""),
Min: getResourceList("5m", "100Mi"), Min: getResources("5m", "100Mi", "", ""),
Default: getResourceList("50m", "500Mi"), Default: getResources("50m", "500Mi", "", ""),
DefaultRequest: getResourceList("10m", "200Mi"), DefaultRequest: getResources("10m", "200Mi", "", ""),
MaxLimitRequestRatio: getResourceList("10", ""), MaxLimitRequestRatio: getResources("10", "", "", ""),
}, { }, {
Type: core.LimitTypePersistentVolumeClaim, Type: core.LimitTypePersistentVolumeClaim,
Max: getStorageResourceList("10Gi"), Max: getResources("", "", "", "10Gi"),
Min: getStorageResourceList("5Gi"), Min: getResources("", "", "", "5Gi"),
}}, }},
}, },
}, { }, {
@ -18781,7 +18750,7 @@ func TestValidateLimitRange(t *testing.T) {
spec: core.LimitRangeSpec{ spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePersistentVolumeClaim, Type: core.LimitTypePersistentVolumeClaim,
Min: getStorageResourceList("5Gi"), Min: getResources("", "", "", "5Gi"),
}}, }},
}, },
}, { }, {
@ -18789,7 +18758,7 @@ func TestValidateLimitRange(t *testing.T) {
spec: core.LimitRangeSpec{ spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePersistentVolumeClaim, Type: core.LimitTypePersistentVolumeClaim,
Max: getStorageResourceList("10Gi"), Max: getResources("", "", "", "10Gi"),
}}, }},
}, },
}, { }, {
@ -18797,11 +18766,11 @@ func TestValidateLimitRange(t *testing.T) {
spec: core.LimitRangeSpec{ spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypeContainer, Type: core.LimitTypeContainer,
Max: getResourceList("100m", "10000T"), Max: getResources("100m", "10000T", "", ""),
Min: getResourceList("5m", "100Mi"), Min: getResources("5m", "100Mi", "", ""),
Default: getResourceList("50m", "500Mi"), Default: getResources("50m", "500Mi", "", ""),
DefaultRequest: getResourceList("10m", "200Mi"), DefaultRequest: getResources("10m", "200Mi", "", ""),
MaxLimitRequestRatio: getResourceList("10", ""), MaxLimitRequestRatio: getResources("10", "", "", ""),
}}, }},
}, },
}, { }, {
@ -18809,11 +18778,11 @@ func TestValidateLimitRange(t *testing.T) {
spec: core.LimitRangeSpec{ spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: "thirdparty.com/foo", Type: "thirdparty.com/foo",
Max: getResourceList("100m", "10000T"), Max: getResources("100m", "10000T", "", ""),
Min: getResourceList("5m", "100Mi"), Min: getResources("5m", "100Mi", "", ""),
Default: getResourceList("50m", "500Mi"), Default: getResources("50m", "500Mi", "", ""),
DefaultRequest: getResourceList("10m", "200Mi"), DefaultRequest: getResources("10m", "200Mi", "", ""),
MaxLimitRequestRatio: getResourceList("10", ""), MaxLimitRequestRatio: getResources("10", "", "", ""),
}}, }},
}, },
}, { }, {
@ -18821,11 +18790,11 @@ func TestValidateLimitRange(t *testing.T) {
spec: core.LimitRangeSpec{ spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: "thirdparty.com/foo", Type: "thirdparty.com/foo",
Max: getStorageResourceList("10000T"), Max: getResources("", "", "", "10000T"),
Min: getStorageResourceList("100Mi"), Min: getResources("", "", "", "100Mi"),
Default: getStorageResourceList("500Mi"), Default: getResources("", "", "", "500Mi"),
DefaultRequest: getStorageResourceList("200Mi"), DefaultRequest: getResources("", "", "", "200Mi"),
MaxLimitRequestRatio: getStorageResourceList(""), MaxLimitRequestRatio: getResources("", "", "", ""),
}}, }},
}, },
}, },
@ -18862,11 +18831,11 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePod, Type: core.LimitTypePod,
Max: getResourceList("100m", "10000m"), Max: getResources("100m", "10000m", "", ""),
Min: getResourceList("0m", "100m"), Min: getResources("0m", "100m", "", ""),
}, { }, {
Type: core.LimitTypePod, Type: core.LimitTypePod,
Min: getResourceList("0m", "100m"), Min: getResources("0m", "100m", "", ""),
}}, }},
}}, }},
"", "",
@ -18875,9 +18844,9 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePod, Type: core.LimitTypePod,
Max: getResourceList("100m", "10000m"), Max: getResources("100m", "10000m", "", ""),
Min: getResourceList("0m", "100m"), Min: getResources("0m", "100m", "", ""),
Default: getResourceList("10m", "100m"), Default: getResources("10m", "100m", "", ""),
}}, }},
}}, }},
"may not be specified when `type` is 'Pod'", "may not be specified when `type` is 'Pod'",
@ -18886,9 +18855,9 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePod, Type: core.LimitTypePod,
Max: getResourceList("100m", "10000m"), Max: getResources("100m", "10000m", "", ""),
Min: getResourceList("0m", "100m"), Min: getResources("0m", "100m", "", ""),
DefaultRequest: getResourceList("10m", "100m"), DefaultRequest: getResources("10m", "100m", "", ""),
}}, }},
}}, }},
"may not be specified when `type` is 'Pod'", "may not be specified when `type` is 'Pod'",
@ -18897,8 +18866,8 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePod, Type: core.LimitTypePod,
Max: getResourceList("10m", ""), Max: getResources("10m", "", "", ""),
Min: getResourceList("100m", ""), Min: getResources("100m", "", "", ""),
}}, }},
}}, }},
"min value 100m is greater than max value 10m", "min value 100m is greater than max value 10m",
@ -18907,9 +18876,9 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypeContainer, Type: core.LimitTypeContainer,
Max: getResourceList("1", ""), Max: getResources("1", "", "", ""),
Min: getResourceList("100m", ""), Min: getResources("100m", "", "", ""),
Default: getResourceList("2000m", ""), Default: getResources("2000m", "", "", ""),
}}, }},
}}, }},
"default value 2 is greater than max value 1", "default value 2 is greater than max value 1",
@ -18918,9 +18887,9 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypeContainer, Type: core.LimitTypeContainer,
Max: getResourceList("1", ""), Max: getResources("1", "", "", ""),
Min: getResourceList("100m", ""), Min: getResources("100m", "", "", ""),
DefaultRequest: getResourceList("2000m", ""), DefaultRequest: getResources("2000m", "", "", ""),
}}, }},
}}, }},
"default request value 2 is greater than max value 1", "default request value 2 is greater than max value 1",
@ -18929,10 +18898,10 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypeContainer, Type: core.LimitTypeContainer,
Max: getResourceList("2", ""), Max: getResources("2", "", "", ""),
Min: getResourceList("100m", ""), Min: getResources("100m", "", "", ""),
Default: getResourceList("500m", ""), Default: getResources("500m", "", "", ""),
DefaultRequest: getResourceList("800m", ""), DefaultRequest: getResources("800m", "", "", ""),
}}, }},
}}, }},
"default request value 800m is greater than default limit value 500m", "default request value 800m is greater than default limit value 500m",
@ -18941,7 +18910,7 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePod, Type: core.LimitTypePod,
MaxLimitRequestRatio: getResourceList("800m", ""), MaxLimitRequestRatio: getResources("800m", "", "", ""),
}}, }},
}}, }},
"ratio 800m is less than 1", "ratio 800m is less than 1",
@ -18950,9 +18919,9 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypeContainer, Type: core.LimitTypeContainer,
Max: getResourceList("", "2Gi"), Max: getResources("", "2Gi", "", ""),
Min: getResourceList("", "512Mi"), Min: getResources("", "512Mi", "", ""),
MaxLimitRequestRatio: getResourceList("", "10"), MaxLimitRequestRatio: getResources("", "10", "", ""),
}}, }},
}}, }},
"ratio 10 is greater than max/min = 4.000000", "ratio 10 is greater than max/min = 4.000000",
@ -18961,11 +18930,11 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: "foo", Type: "foo",
Max: getStorageResourceList("10000T"), Max: getResources("", "", "", "10000T"),
Min: getStorageResourceList("100Mi"), Min: getResources("", "", "", "100Mi"),
Default: getStorageResourceList("500Mi"), Default: getResources("", "", "", "500Mi"),
DefaultRequest: getStorageResourceList("200Mi"), DefaultRequest: getResources("", "", "", "200Mi"),
MaxLimitRequestRatio: getStorageResourceList(""), MaxLimitRequestRatio: getResources("", "", "", ""),
}}, }},
}}, }},
"must be a standard limit type or fully qualified", "must be a standard limit type or fully qualified",
@ -18982,8 +18951,8 @@ func TestValidateLimitRange(t *testing.T) {
core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{ core.LimitRange{ObjectMeta: metav1.ObjectMeta{Name: "abc", Namespace: "foo"}, Spec: core.LimitRangeSpec{
Limits: []core.LimitRangeItem{{ Limits: []core.LimitRangeItem{{
Type: core.LimitTypePersistentVolumeClaim, Type: core.LimitTypePersistentVolumeClaim,
Min: getStorageResourceList("10Gi"), Min: getResources("", "", "", "10Gi"),
Max: getStorageResourceList("1Gi"), Max: getResources("", "", "", "1Gi"),
}}, }},
}}, }},
"min value 10Gi is greater than max value 1Gi", "min value 10Gi is greater than max value 1Gi",
@ -25106,255 +25075,110 @@ func TestValidateSELinuxChangePolicy(t *testing.T) {
} }
func TestValidatePodResize(t *testing.T) { func TestValidatePodResize(t *testing.T) {
mkPod := func(req, lim core.ResourceList, tweaks ...podtest.TweakContainer) *core.Pod {
return podtest.MakePod("pod",
podtest.SetContainers(
podtest.MakeContainer(
"container",
append(tweaks,
podtest.SetContainerResources(
core.ResourceRequirements{
Requests: req,
Limits: lim,
},
),
)...,
),
),
)
}
tests := []struct { tests := []struct {
new core.Pod
old core.Pod
err string
test string test string
old *core.Pod
new *core.Pod
err string
}{ }{
{ {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "0", "1Gi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "0", "1Gi"),
}))),
),
err: "",
test: "cpu limit change", test: "cpu limit change",
}, { old: mkPod(core.ResourceList{}, getResources("100m", "0", "1Gi", "")),
new: *podtest.MakePod("pod", new: mkPod(core.ResourceList{}, getResources("200m", "0", "1Gi", "")),
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "100Mi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "200Mi"),
}))),
),
err: "", err: "",
}, {
test: "memory limit change", test: "memory limit change",
old: mkPod(core.ResourceList{}, getResources("100m", "200Mi", "", "")),
new: mkPod(core.ResourceList{}, getResources("100m", "100Mi", "", "")),
err: "",
}, { }, {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "100Mi", "1Gi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "100Mi", "2Gi"),
}))),
),
err: "spec: Forbidden: pod resize may not change fields other than cpu and memory",
test: "storage limit change", test: "storage limit change",
}, { old: mkPod(core.ResourceList{}, getResources("100m", "100Mi", "2Gi", "")),
new: *podtest.MakePod("pod", new: mkPod(core.ResourceList{}, getResources("100m", "100Mi", "1Gi", "")),
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "0"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("200m", "0"),
}))),
),
err: "",
test: "cpu request change",
}, {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("0", "200Mi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("0", "100Mi"),
}))),
),
err: "",
test: "memory request change",
}, {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResources("100m", "0", "2Gi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResources("100m", "0", "1Gi"),
}))),
),
err: "spec: Forbidden: pod resize may not change fields other than cpu and memory", err: "spec: Forbidden: pod resize may not change fields other than cpu and memory",
}, {
test: "cpu request change",
old: mkPod(getResources("200m", "0", "", ""), core.ResourceList{}),
new: mkPod(getResources("100m", "0", "", ""), core.ResourceList{}),
err: "",
}, {
test: "memory request change",
old: mkPod(getResources("0", "100Mi", "", ""), core.ResourceList{}),
new: mkPod(getResources("0", "200Mi", "", ""), core.ResourceList{}),
err: "",
}, {
test: "storage request change", test: "storage request change",
old: mkPod(getResources("100m", "0", "1Gi", ""), core.ResourceList{}),
new: mkPod(getResources("100m", "0", "2Gi", ""), core.ResourceList{}),
err: "spec: Forbidden: pod resize may not change fields other than cpu and memory",
}, { }, {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "400Mi", "1Gi"),
Requests: getResources("200m", "400Mi", "1Gi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("100m", "100Mi", "1Gi"),
Requests: getResources("100m", "100Mi", "1Gi"),
}))),
),
err: "",
test: "Pod QoS unchanged, guaranteed -> guaranteed", test: "Pod QoS unchanged, guaranteed -> guaranteed",
}, { old: mkPod(getResources("100m", "100Mi", "1Gi", ""), getResources("100m", "100Mi", "1Gi", "")),
new: *podtest.MakePod("pod", new: mkPod(getResources("200m", "400Mi", "1Gi", ""), getResources("200m", "400Mi", "1Gi", "")),
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "200Mi", "2Gi"),
Requests: getResources("100m", "100Mi", "1Gi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("400m", "400Mi", "2Gi"),
Requests: getResources("200m", "200Mi", "1Gi"),
}))),
),
err: "", err: "",
}, {
test: "Pod QoS unchanged, burstable -> burstable", test: "Pod QoS unchanged, burstable -> burstable",
}, { old: mkPod(getResources("200m", "200Mi", "1Gi", ""), getResources("400m", "400Mi", "2Gi", "")),
new: *podtest.MakePod("pod", new: mkPod(getResources("100m", "100Mi", "1Gi", ""), getResources("200m", "200Mi", "2Gi", "")),
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"),
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
err: "", err: "",
}, {
test: "Pod QoS unchanged, burstable -> burstable, add limits", test: "Pod QoS unchanged, burstable -> burstable, add limits",
}, { old: mkPod(getResources("100m", "100Mi", "", ""), core.ResourceList{}),
new: *podtest.MakePod("pod", new: mkPod(getResources("100m", "100Mi", "", ""), getResources("200m", "200Mi", "", "")),
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"),
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
err: "", err: "",
}, {
test: "Pod QoS unchanged, burstable -> burstable, remove limits", test: "Pod QoS unchanged, burstable -> burstable, remove limits",
}, { old: mkPod(getResources("100m", "100Mi", "", ""), getResources("200m", "200Mi", "", "")),
new: *podtest.MakePod("pod", new: mkPod(getResources("100m", "100Mi", "", ""), core.ResourceList{}),
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("400m", "", "1Gi"),
Requests: getResources("300m", "", "1Gi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "500Mi", "1Gi"),
}))),
),
err: "", err: "",
}, {
test: "Pod QoS unchanged, burstable -> burstable, add requests", test: "Pod QoS unchanged, burstable -> burstable, add requests",
}, { old: mkPod(core.ResourceList{}, getResources("200m", "500Mi", "1Gi", "")),
new: *podtest.MakePod("pod", new: mkPod(getResources("300m", "", "", ""), getResources("400m", "", "1Gi", "")),
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("400m", "500Mi", "2Gi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResources("200m", "300Mi", "2Gi"),
Requests: getResourceLimits("100m", "200Mi"),
}))),
),
err: "", err: "",
}, {
test: "Pod QoS unchanged, burstable -> burstable, remove requests", test: "Pod QoS unchanged, burstable -> burstable, remove requests",
old: mkPod(getResources("100m", "200Mi", "", ""), getResources("200m", "300Mi", "2Gi", "")),
new: mkPod(core.ResourceList{}, getResources("400m", "500Mi", "2Gi", "")),
err: "",
}, { }, {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"),
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "100Mi"),
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
err: "Pod QOS Class must not change",
test: "Pod QoS change, guaranteed -> burstable", test: "Pod QoS change, guaranteed -> burstable",
old: mkPod(getResources("100m", "100Mi", "", ""), getResources("100m", "100Mi", "", "")),
new: mkPod(getResources("100m", "100Mi", "", ""), getResources("200m", "200Mi", "", "")),
err: "Pod QOS Class may not change as a result of resizing",
}, { }, {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("100m", "100Mi"),
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
err: "Pod QOS Class must not change",
test: "Pod QoS change, burstable -> guaranteed", test: "Pod QoS change, burstable -> guaranteed",
old: mkPod(getResources("100m", "100Mi", "", ""), core.ResourceList{}),
new: mkPod(getResources("100m", "100Mi", "", ""), getResources("100m", "100Mi", "", "")),
err: "Pod QOS Class may not change as a result of resizing",
}, { }, {
new: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"),
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
old: *podtest.MakePod("pod"),
err: "Pod QOS Class must not change",
test: "Pod QoS change, besteffort -> burstable", test: "Pod QoS change, besteffort -> burstable",
old: mkPod(core.ResourceList{}, core.ResourceList{}),
new: mkPod(getResources("100m", "100Mi", "", ""), getResources("200m", "200Mi", "", "")),
err: "Pod QOS Class may not change as a result of resizing",
}, { }, {
new: *podtest.MakePod("pod"),
old: *podtest.MakePod("pod",
podtest.SetContainers(podtest.MakeContainer("container",
podtest.SetContainerResources(core.ResourceRequirements{
Limits: getResourceLimits("200m", "200Mi"),
Requests: getResourceLimits("100m", "100Mi"),
}))),
),
err: "Pod QOS Class must not change",
test: "Pod QoS change, burstable -> besteffort", test: "Pod QoS change, burstable -> besteffort",
old: mkPod(getResources("100m", "100Mi", "", ""), getResources("200m", "200Mi", "", "")),
new: mkPod(core.ResourceList{}, core.ResourceList{}),
err: "Pod QOS Class may not change as a result of resizing",
}, },
} }
@ -25384,7 +25208,7 @@ func TestValidatePodResize(t *testing.T) {
test.old.Spec.RestartPolicy = "Always" test.old.Spec.RestartPolicy = "Always"
} }
errs := ValidatePodResize(&test.new, &test.old, PodValidationOptions{}) errs := ValidatePodResize(test.new, test.old, PodValidationOptions{})
if test.err == "" { if test.err == "" {
if len(errs) != 0 { if len(errs) != 0 {
t.Errorf("unexpected invalid: %s (%+v)\nA: %+v\nB: %+v", test.test, errs, test.new, test.old) t.Errorf("unexpected invalid: %s (%+v)\nA: %+v\nB: %+v", test.test, errs, test.new, test.old)