@@ -23,6 +23,7 @@ import (
23
23
v1 "k8s.io/api/core/v1"
24
24
"k8s.io/apimachinery/pkg/api/equality"
25
25
"k8s.io/apimachinery/pkg/api/resource"
26
+ "k8s.io/utils/ptr"
26
27
)
27
28
28
29
func TestPodRequestsAndLimits (t * testing.T ) {
@@ -2019,11 +2020,14 @@ func TestIsSupportedPodLevelResource(t *testing.T) {
2019
2020
func TestAggregateContainerRequestsAndLimits (t * testing.T ) {
2020
2021
restartAlways := v1 .ContainerRestartPolicyAlways
2021
2022
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
2027
2031
}{
2028
2032
{
2029
2033
name : "one container with limits" ,
@@ -2187,20 +2191,74 @@ func TestAggregateContainerRequestsAndLimits(t *testing.T) {
2187
2191
v1 .ResourceName (v1 .ResourceCPU ): resource .MustParse ("17" ),
2188
2192
},
2189
2193
},
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
+ },
2190
2243
}
2191
2244
2192
2245
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 )
2196
2253
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
+ }
2200
2257
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
+ })
2204
2262
}
2205
2263
}
2206
2264
0 commit comments