@@ -23,6 +23,7 @@ import (
2323 v1 "k8s.io/api/core/v1"
2424 "k8s.io/apimachinery/pkg/api/equality"
2525 "k8s.io/apimachinery/pkg/api/resource"
26+ "k8s.io/utils/ptr"
2627)
2728
2829func TestPodRequestsAndLimits (t * testing.T ) {
@@ -2019,11 +2020,14 @@ func TestIsSupportedPodLevelResource(t *testing.T) {
20192020func TestAggregateContainerRequestsAndLimits (t * testing.T ) {
20202021 restartAlways := v1 .ContainerRestartPolicyAlways
20212022 cases := []struct {
2022- containers []v1.Container
2023- initContainers []v1.Container
2024- name string
2025- expectedRequests v1.ResourceList
2026- expectedLimits v1.ResourceList
2023+ options PodResourcesOptions
2024+ containers []v1.Container
2025+ containerStatuses []v1.ContainerStatus
2026+ initContainers []v1.Container
2027+ initContainerStatuses []v1.ContainerStatus
2028+ name string
2029+ expectedRequests v1.ResourceList
2030+ expectedLimits v1.ResourceList
20272031 }{
20282032 {
20292033 name : "one container with limits" ,
@@ -2187,20 +2191,74 @@ func TestAggregateContainerRequestsAndLimits(t *testing.T) {
21872191 v1 .ResourceName (v1 .ResourceCPU ): resource .MustParse ("17" ),
21882192 },
21892193 },
2194+ {
2195+ name : "regularcontainers with empty requests, but status with non-empty requests" ,
2196+ options : PodResourcesOptions {UseStatusResources : true },
2197+ containers : []v1.Container {
2198+ {
2199+ Name : "container-1" ,
2200+ Resources : v1.ResourceRequirements {},
2201+ },
2202+ },
2203+ containerStatuses : []v1.ContainerStatus {
2204+ {
2205+ Name : "container-1" ,
2206+ Resources : & v1.ResourceRequirements {
2207+ Requests : v1.ResourceList {
2208+ v1 .ResourceCPU : resource .MustParse ("2" ),
2209+ },
2210+ },
2211+ },
2212+ },
2213+ expectedRequests : v1.ResourceList {
2214+ v1 .ResourceCPU : resource .MustParse ("2" ),
2215+ },
2216+ expectedLimits : v1.ResourceList {},
2217+ },
2218+ {
2219+ name : "always-restart init containers with empty requests, but status with non-empty requests" ,
2220+ options : PodResourcesOptions {UseStatusResources : true },
2221+ initContainers : []v1.Container {
2222+ {
2223+ Name : "container-1" ,
2224+ RestartPolicy : ptr.To [v1.ContainerRestartPolicy ](v1 .ContainerRestartPolicyAlways ),
2225+ Resources : v1.ResourceRequirements {},
2226+ },
2227+ },
2228+ initContainerStatuses : []v1.ContainerStatus {
2229+ {
2230+ Name : "container-1" ,
2231+ Resources : & v1.ResourceRequirements {
2232+ Requests : v1.ResourceList {
2233+ v1 .ResourceCPU : resource .MustParse ("2" ),
2234+ },
2235+ },
2236+ },
2237+ },
2238+ expectedRequests : v1.ResourceList {
2239+ v1 .ResourceCPU : resource .MustParse ("2" ),
2240+ },
2241+ expectedLimits : v1.ResourceList {},
2242+ },
21902243 }
21912244
21922245 for idx , tc := range cases {
2193- testPod := & v1.Pod {Spec : v1.PodSpec {Containers : tc .containers , InitContainers : tc .initContainers }}
2194- resRequests := AggregateContainerRequests (testPod , PodResourcesOptions {})
2195- resLimits := AggregateContainerLimits (testPod , PodResourcesOptions {})
2246+ t .Run (tc .name , func (t * testing.T ) {
2247+ testPod := & v1.Pod {
2248+ Spec : v1.PodSpec {Containers : tc .containers , InitContainers : tc .initContainers },
2249+ Status : v1.PodStatus {ContainerStatuses : tc .containerStatuses , InitContainerStatuses : tc .initContainerStatuses },
2250+ }
2251+ resRequests := AggregateContainerRequests (testPod , tc .options )
2252+ resLimits := AggregateContainerLimits (testPod , tc .options )
21962253
2197- if ! equality .Semantic .DeepEqual (tc .expectedRequests , resRequests ) {
2198- t .Errorf ("test case failure[%d]: %v, requests:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedRequests , resRequests )
2199- }
2254+ if ! equality .Semantic .DeepEqual (tc .expectedRequests , resRequests ) {
2255+ t .Errorf ("test case failure[%d]: %v, requests:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedRequests , resRequests )
2256+ }
22002257
2201- if ! equality .Semantic .DeepEqual (tc .expectedLimits , resLimits ) {
2202- t .Errorf ("test case failure[%d]: %v, limits:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedLimits , resLimits )
2203- }
2258+ if ! equality .Semantic .DeepEqual (tc .expectedLimits , resLimits ) {
2259+ t .Errorf ("test case failure[%d]: %v, limits:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedLimits , resLimits )
2260+ }
2261+ })
22042262 }
22052263}
22062264
0 commit comments