From b04ca79445e9a88722e7884daaa5eef36b26c3c1 Mon Sep 17 00:00:00 2001 From: Brian Pursley Date: Sat, 8 Apr 2023 18:55:45 -0400 Subject: [PATCH] Add unit tests showing the effect of unlimited containers when calculating pod limits. This behavior is surprising to some users (see kubectl issues #1110 and #1385), who expect that an unlimited container will result in an unlimited pod, but that is not how PodLimits() works, as it ignores any containers that do not specify limits when calculating the pod limits. This commit adds unit tests that confirm this behavior. --- pkg/api/v1/resource/helpers_test.go | 61 +++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/pkg/api/v1/resource/helpers_test.go b/pkg/api/v1/resource/helpers_test.go index 74820b52c45..7f658b725a2 100644 --- a/pkg/api/v1/resource/helpers_test.go +++ b/pkg/api/v1/resource/helpers_test.go @@ -984,6 +984,67 @@ func TestPodResourceLimits(t *testing.T) { }, }, }, + { + description: "no limited containers should result in no limits for the pod", + expectedLimits: v1.ResourceList{}, + initContainers: []v1.Container{}, + containers: []v1.Container{ + { + // Unlimited container + }, + }, + }, + { + description: "one limited and one unlimited container should result in the limited container's limits for the pod", + expectedLimits: v1.ResourceList{ + v1.ResourceCPU: resource.MustParse("2"), + v1.ResourceMemory: resource.MustParse("2Gi"), + }, + initContainers: []v1.Container{}, + containers: []v1.Container{ + { + Resources: v1.ResourceRequirements{ + Limits: v1.ResourceList{ + v1.ResourceCPU: resource.MustParse("2"), + v1.ResourceMemory: resource.MustParse("2Gi"), + }, + }, + }, + { + // Unlimited container + }, + }, + }, + { + description: "one limited and one unlimited init container should result in the limited init container's limits for the pod", + expectedLimits: v1.ResourceList{ + v1.ResourceCPU: resource.MustParse("2"), + v1.ResourceMemory: resource.MustParse("2Gi"), + }, + initContainers: []v1.Container{ + { + Resources: v1.ResourceRequirements{ + Limits: v1.ResourceList{ + v1.ResourceCPU: resource.MustParse("2"), + v1.ResourceMemory: resource.MustParse("2Gi"), + }, + }, + }, + { + // Unlimited init container + }, + }, + containers: []v1.Container{ + { + Resources: v1.ResourceRequirements{ + Limits: v1.ResourceList{ + v1.ResourceCPU: resource.MustParse("1"), + v1.ResourceMemory: resource.MustParse("1Gi"), + }, + }, + }, + }, + }, } for _, tc := range testCases { p := &v1.Pod{