Skip to content

Commit 012f87b

Browse files
committed
test: Add test cases with init containers to ResourceRequirementsSanitizerTest
Signed-off-by: David Sondermann <[email protected]>
1 parent f4c0f68 commit 012f87b

File tree

1 file changed

+59
-35
lines changed

1 file changed

+59
-35
lines changed

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizerTest.java

+59-35
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
import io.fabric8.kubernetes.api.model.HasMetadata;
1010
import io.fabric8.kubernetes.api.model.PodTemplateSpecBuilder;
1111
import io.fabric8.kubernetes.api.model.Quantity;
12+
import io.fabric8.kubernetes.api.model.apps.StatefulSet;
1213
import io.fabric8.kubernetes.api.model.apps.StatefulSetBuilder;
1314
import io.fabric8.kubernetes.client.KubernetesClient;
1415
import io.fabric8.kubernetes.client.utils.KubernetesSerialization;
@@ -19,6 +20,11 @@
1920
import static org.mockito.Mockito.mock;
2021
import static org.mockito.Mockito.verifyNoInteractions;
2122

23+
/**
24+
* Tests the {@link ResourceRequirementsSanitizer} with combinations of matching and mismatching K8s
25+
* resources, using a mix of containers and init containers, as well as resource requests and
26+
* limits.
27+
*/
2228
class ResourceRequirementsSanitizerTest {
2329

2430
private final Map<String, Object> actualMap = mock();
@@ -90,110 +96,128 @@ void testSanitizeResourceRequirements_whenResourceIsNull_doNothing() {
9096

9197
@Test
9298
void testSanitizeResourceRequirements_whenResourceSizeMismatch_doNothing() {
93-
final var actualMap = sanitizeRequestsAndLimits(
99+
final var actualMap = sanitizeRequestsAndLimits(ContainerType.CONTAINER,
94100
Map.of("cpu", new Quantity("2")),
95101
Map.of(),
96102
Map.of("cpu", new Quantity("4")),
97103
Map.of("cpu", new Quantity("4"), "memory", new Quantity("4Gi")));
98-
assertResources(actualMap, "requests")
104+
assertContainerResources(actualMap, "requests")
99105
.hasSize(1)
100106
.containsEntry("cpu", "2");
101-
assertResources(actualMap, "limits")
107+
assertContainerResources(actualMap, "limits")
102108
.hasSize(1)
103109
.containsEntry("cpu", "4");
104110
}
105111

106112
@Test
107113
void testSanitizeResourceRequirements_whenResourceKeyMismatch_doNothing() {
108-
final var actualMap = sanitizeRequestsAndLimits(
114+
final var actualMap = sanitizeRequestsAndLimits(ContainerType.INIT_CONTAINER,
109115
Map.of("cpu", new Quantity("2")),
110116
Map.of("memory", new Quantity("4Gi")),
111117
Map.of(),
112118
Map.of());
113-
assertResources(actualMap, "requests")
119+
assertInitContainerResources(actualMap, "requests")
114120
.hasSize(1)
115121
.containsEntry("cpu", "2");
116-
assertResources(actualMap, "limits").isNull();
122+
assertInitContainerResources(actualMap, "limits").isNull();
117123
}
118124

119125
@Test
120126
void testSanitizeResourceRequirements_whenResourcesHaveSameAmountAndFormat_doNothing() {
121-
final var actualMap = sanitizeRequestsAndLimits(
127+
final var actualMap = sanitizeRequestsAndLimits(ContainerType.CONTAINER,
122128
Map.of("memory", new Quantity("4Gi")),
123129
Map.of("memory", new Quantity("4Gi")),
124130
Map.of("cpu", new Quantity("2")),
125131
Map.of("cpu", new Quantity("2")));
126-
assertResources(actualMap, "requests")
132+
assertContainerResources(actualMap, "requests")
127133
.hasSize(1)
128134
.containsEntry("memory", "4Gi");
129-
assertResources(actualMap, "limits")
135+
assertContainerResources(actualMap, "limits")
130136
.hasSize(1)
131137
.containsEntry("cpu", "2");
132138
}
133139

134140
@Test
135141
void testSanitizeResourceRequirements_whenResourcesHaveNumericalAmountMismatch_doNothing() {
136-
final var actualMap = sanitizeRequestsAndLimits(
142+
final var actualMap = sanitizeRequestsAndLimits(ContainerType.INIT_CONTAINER,
137143
Map.of("cpu", new Quantity("2"), "memory", new Quantity("4Gi")),
138144
Map.of("cpu", new Quantity("4"), "memory", new Quantity("4Ti")),
139145
Map.of("cpu", new Quantity("2")),
140146
Map.of("cpu", new Quantity("4000m")));
141-
assertResources(actualMap, "requests")
147+
assertInitContainerResources(actualMap, "requests")
142148
.hasSize(2)
143149
.containsEntry("cpu", "2")
144150
.containsEntry("memory", "4Gi");
145-
assertResources(actualMap, "limits")
151+
assertInitContainerResources(actualMap, "limits")
146152
.hasSize(1)
147153
.containsEntry("cpu", "2");
148154
}
149155

150156
@Test
151157
void testSanitizeResourceRequirements_whenResourcesHaveAmountAndFormatMismatchWithSameNumericalAmount_thenSanitizeActualMap() {
152-
final var actualMap = sanitizeRequestsAndLimits(
158+
final var actualMap = sanitizeRequestsAndLimits(ContainerType.CONTAINER,
153159
Map.of("cpu", new Quantity("2"), "memory", new Quantity("4Gi")),
154160
Map.of("cpu", new Quantity("2000m"), "memory", new Quantity("4096Mi")),
155161
Map.of("cpu", new Quantity("4")),
156162
Map.of("cpu", new Quantity("4000m")));
157-
assertResources(actualMap, "requests")
163+
assertContainerResources(actualMap, "requests")
158164
.hasSize(2)
159165
.containsEntry("cpu", "2000m")
160166
.containsEntry("memory", "4096Mi");
161-
assertResources(actualMap, "limits")
167+
assertContainerResources(actualMap, "limits")
162168
.hasSize(1)
163169
.containsEntry("cpu", "4000m");
164170
}
165171

166172
@SuppressWarnings("unchecked")
167-
private Map<String, Object> sanitizeRequestsAndLimits(
173+
private Map<String, Object> sanitizeRequestsAndLimits(final ContainerType type,
168174
final Map<String, Quantity> actualRequests, final Map<String, Quantity> desiredRequests,
169175
final Map<String, Quantity> actualLimits, final Map<String, Quantity> desiredLimits) {
170-
final var actual = new StatefulSetBuilder().withNewSpec().withNewTemplate().withNewSpec()
171-
.addNewContainer()
172-
.withName("test")
173-
.withNewResources()
174-
.withRequests(actualRequests).withLimits(actualLimits)
175-
.endResources()
176-
.endContainer()
177-
.endSpec().endTemplate().endSpec().build();
178-
final var desired = new StatefulSetBuilder().withNewSpec().withNewTemplate().withNewSpec()
179-
.addNewContainer()
180-
.withName("test")
181-
.withNewResources()
182-
.withRequests(desiredRequests).withLimits(desiredLimits)
183-
.endResources()
184-
.endContainer()
185-
.endSpec().endTemplate().endSpec().build();
186-
176+
final var actual = createStatefulSet(type, actualRequests, actualLimits);
177+
final var desired = createStatefulSet(type, desiredRequests, desiredLimits);
187178
final var actualMap = serialization.convertValue(actual, Map.class);
188179
sanitizeResourceRequirements(actualMap,
189180
actual.getSpec().getTemplate(),
190181
desired.getSpec().getTemplate());
191182
return actualMap;
192183
}
193184

194-
private static MapAssert<String, Object> assertResources(final Map<String, Object> actualMap,
195-
final String resourceName) {
185+
private enum ContainerType {
186+
CONTAINER, INIT_CONTAINER,
187+
}
188+
189+
private static StatefulSet createStatefulSet(final ContainerType type,
190+
final Map<String, Quantity> requests, final Map<String, Quantity> limits) {
191+
var builder = new StatefulSetBuilder().withNewSpec().withNewTemplate().withNewSpec();
192+
if (type == ContainerType.CONTAINER) {
193+
builder = builder.addNewContainer()
194+
.withName("test")
195+
.withNewResources()
196+
.withRequests(requests)
197+
.withLimits(limits)
198+
.endResources()
199+
.endContainer();
200+
} else {
201+
builder = builder.addNewInitContainer()
202+
.withName("test")
203+
.withNewResources()
204+
.withRequests(requests)
205+
.withLimits(limits)
206+
.endResources()
207+
.endInitContainer();
208+
}
209+
return builder.endSpec().endTemplate().endSpec().build();
210+
}
211+
212+
private static MapAssert<String, Object> assertContainerResources(
213+
final Map<String, Object> actualMap, final String resourceName) {
196214
return assertThat(GenericKubernetesResource.<Map<String, Object>>get(actualMap,
197215
"spec", "template", "spec", "containers", 0, "resources", resourceName));
198216
}
217+
218+
private static MapAssert<String, Object> assertInitContainerResources(
219+
final Map<String, Object> actualMap, final String resourceName) {
220+
return assertThat(GenericKubernetesResource.<Map<String, Object>>get(actualMap,
221+
"spec", "template", "spec", "initContainers", 0, "resources", resourceName));
222+
}
199223
}

0 commit comments

Comments
 (0)