@@ -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 ) {
@@ -1967,11 +1968,14 @@ func TestIsSupportedPodLevelResource(t *testing.T) {
1967
1968
func TestAggregateContainerRequestsAndLimits (t * testing.T ) {
1968
1969
restartAlways := v1 .ContainerRestartPolicyAlways
1969
1970
cases := []struct {
1970
- containers []v1.Container
1971
- initContainers []v1.Container
1972
- name string
1973
- expectedRequests v1.ResourceList
1974
- expectedLimits v1.ResourceList
1971
+ options PodResourcesOptions
1972
+ containers []v1.Container
1973
+ containerStatuses []v1.ContainerStatus
1974
+ initContainers []v1.Container
1975
+ initContainerStatuses []v1.ContainerStatus
1976
+ name string
1977
+ expectedRequests v1.ResourceList
1978
+ expectedLimits v1.ResourceList
1975
1979
}{
1976
1980
{
1977
1981
name : "one container with limits" ,
@@ -2135,20 +2139,74 @@ func TestAggregateContainerRequestsAndLimits(t *testing.T) {
2135
2139
v1 .ResourceName (v1 .ResourceCPU ): resource .MustParse ("17" ),
2136
2140
},
2137
2141
},
2142
+ {
2143
+ name : "regularcontainers with empty requests, but status with non-empty requests" ,
2144
+ options : PodResourcesOptions {UseStatusResources : true },
2145
+ containers : []v1.Container {
2146
+ {
2147
+ Name : "container-1" ,
2148
+ Resources : v1.ResourceRequirements {},
2149
+ },
2150
+ },
2151
+ containerStatuses : []v1.ContainerStatus {
2152
+ {
2153
+ Name : "container-1" ,
2154
+ Resources : & v1.ResourceRequirements {
2155
+ Requests : v1.ResourceList {
2156
+ v1 .ResourceCPU : resource .MustParse ("2" ),
2157
+ },
2158
+ },
2159
+ },
2160
+ },
2161
+ expectedRequests : v1.ResourceList {
2162
+ v1 .ResourceCPU : resource .MustParse ("2" ),
2163
+ },
2164
+ expectedLimits : v1.ResourceList {},
2165
+ },
2166
+ {
2167
+ name : "always-restart init containers with empty requests, but status with non-empty requests" ,
2168
+ options : PodResourcesOptions {UseStatusResources : true },
2169
+ initContainers : []v1.Container {
2170
+ {
2171
+ Name : "container-1" ,
2172
+ RestartPolicy : ptr.To [v1.ContainerRestartPolicy ](v1 .ContainerRestartPolicyAlways ),
2173
+ Resources : v1.ResourceRequirements {},
2174
+ },
2175
+ },
2176
+ initContainerStatuses : []v1.ContainerStatus {
2177
+ {
2178
+ Name : "container-1" ,
2179
+ Resources : & v1.ResourceRequirements {
2180
+ Requests : v1.ResourceList {
2181
+ v1 .ResourceCPU : resource .MustParse ("2" ),
2182
+ },
2183
+ },
2184
+ },
2185
+ },
2186
+ expectedRequests : v1.ResourceList {
2187
+ v1 .ResourceCPU : resource .MustParse ("2" ),
2188
+ },
2189
+ expectedLimits : v1.ResourceList {},
2190
+ },
2138
2191
}
2139
2192
2140
2193
for idx , tc := range cases {
2141
- testPod := & v1.Pod {Spec : v1.PodSpec {Containers : tc .containers , InitContainers : tc .initContainers }}
2142
- resRequests := AggregateContainerRequests (testPod , PodResourcesOptions {})
2143
- resLimits := AggregateContainerLimits (testPod , PodResourcesOptions {})
2194
+ t .Run (tc .name , func (t * testing.T ) {
2195
+ testPod := & v1.Pod {
2196
+ Spec : v1.PodSpec {Containers : tc .containers , InitContainers : tc .initContainers },
2197
+ Status : v1.PodStatus {ContainerStatuses : tc .containerStatuses , InitContainerStatuses : tc .initContainerStatuses },
2198
+ }
2199
+ resRequests := AggregateContainerRequests (testPod , tc .options )
2200
+ resLimits := AggregateContainerLimits (testPod , tc .options )
2144
2201
2145
- if ! equality .Semantic .DeepEqual (tc .expectedRequests , resRequests ) {
2146
- t .Errorf ("test case failure[%d]: %v, requests:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedRequests , resRequests )
2147
- }
2202
+ if ! equality .Semantic .DeepEqual (tc .expectedRequests , resRequests ) {
2203
+ t .Errorf ("test case failure[%d]: %v, requests:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedRequests , resRequests )
2204
+ }
2148
2205
2149
- if ! equality .Semantic .DeepEqual (tc .expectedLimits , resLimits ) {
2150
- t .Errorf ("test case failure[%d]: %v, limits:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedLimits , resLimits )
2151
- }
2206
+ if ! equality .Semantic .DeepEqual (tc .expectedLimits , resLimits ) {
2207
+ t .Errorf ("test case failure[%d]: %v, limits:\n expected:\t %v\n got\t \t %v" , idx , tc .name , tc .expectedLimits , resLimits )
2208
+ }
2209
+ })
2152
2210
}
2153
2211
}
2154
2212
0 commit comments