Skip to content

Commit db49292

Browse files
committed
integration test
Signed-off-by: Attila Mészáros <csviri@gmail.com>
1 parent c87015d commit db49292

File tree

3 files changed

+85
-7
lines changed

3 files changed

+85
-7
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ private SecondaryToPrimaryMapper<R> getSecondaryToPrimaryMapper() {
8888
return (SecondaryToPrimaryMapper<R>) this;
8989
} else if (garbageCollected) {
9090
return Mappers.fromOwnerReference();
91-
} else if (useDefaultAnnotationsToIdentifyPrimary()) {
91+
} else if (useAnnotationsToIdentifyPrimary()) {
9292
return Mappers.fromDefaultAnnotations();
9393
} else {
9494
throw new OperatorException("Provide a SecondaryToPrimaryMapper to associate " +
@@ -238,7 +238,7 @@ protected Resource<R> prepare(R desired, P primary, String actionName) {
238238
protected void addReferenceHandlingMetadata(R desired, P primary) {
239239
if (addOwnerReference()) {
240240
desired.addOwnerReference(primary);
241-
} else if (useDefaultAnnotationsToIdentifyPrimary()) {
241+
} else if (useAnnotationsToIdentifyPrimary()) {
242242
addSecondaryToPrimaryMapperAnnotations(desired, primary);
243243
}
244244
}
@@ -269,8 +269,8 @@ protected InformerEventSource<R, P> createEventSource(EventSourceContext<P> cont
269269
return eventSource().orElseThrow();
270270
}
271271

272-
private boolean useDefaultAnnotationsToIdentifyPrimary() {
273-
return !(this instanceof SecondaryToPrimaryMapper) && !garbageCollected && isCreatable();
272+
private boolean useAnnotationsToIdentifyPrimary() {
273+
return !garbageCollected && isCreatable();
274274
}
275275

276276
protected void addSecondaryToPrimaryMapperAnnotations(R desired, P primary) {
Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,72 @@
11
package io.javaoperatorsdk.operator;
22

3-
public class DependentCustomMappingAnnotationIT {
3+
import org.junit.jupiter.api.Test;
4+
import org.junit.jupiter.api.extension.RegisterExtension;
5+
6+
import io.fabric8.kubernetes.api.model.ConfigMap;
7+
import io.fabric8.kubernetes.api.model.ObjectMetaBuilder;
8+
import io.javaoperatorsdk.operator.junit.LocallyRunOperatorExtension;
9+
import io.javaoperatorsdk.operator.sample.dependentcustommappingannotation.CustomMappingConfigMapDependentResource;
10+
import io.javaoperatorsdk.operator.sample.dependentcustommappingannotation.DependentCustomMappingCustomResource;
11+
import io.javaoperatorsdk.operator.sample.dependentcustommappingannotation.DependentCustomMappingReconciler;
12+
import io.javaoperatorsdk.operator.sample.dependentcustommappingannotation.DependentCustomMappingSpec;
13+
14+
import static io.javaoperatorsdk.operator.sample.dependentcustommappingannotation.CustomMappingConfigMapDependentResource.CUSTOM_NAMESPACE_KEY;
15+
import static io.javaoperatorsdk.operator.sample.dependentcustommappingannotation.CustomMappingConfigMapDependentResource.CUSTOM_NAME_KEY;
16+
import static org.assertj.core.api.Assertions.assertThat;
17+
import static org.awaitility.Awaitility.await;
18+
19+
class DependentCustomMappingAnnotationIT {
20+
21+
public static final String INITIAL_VALUE = "initial value";
22+
public static final String CHANGED_VALUE = "changed value";
23+
public static final String TEST_RESOURCE_NAME = "test1";
24+
25+
@RegisterExtension
26+
LocallyRunOperatorExtension extension =
27+
LocallyRunOperatorExtension.builder()
28+
.withReconciler(DependentCustomMappingReconciler.class)
29+
.build();
30+
31+
32+
@Test
33+
void testCustomMappingAnnotationForDependent() {
34+
var cr = extension.create(testResource());
35+
assertConfigMapData(INITIAL_VALUE);
36+
37+
cr.getSpec().setValue(CHANGED_VALUE);
38+
cr = extension.replace(cr);
39+
assertConfigMapData(CHANGED_VALUE);
40+
41+
extension.delete(cr);
42+
43+
await().untilAsserted(()->{
44+
var resource = extension.get(ConfigMap.class, TEST_RESOURCE_NAME);
45+
assertThat(resource).isNull();
46+
});
47+
}
48+
49+
private void assertConfigMapData(String val) {
50+
await().untilAsserted(() -> {
51+
var resource = extension.get(ConfigMap.class, TEST_RESOURCE_NAME);
52+
assertThat(resource).isNotNull();
53+
assertThat(resource.getMetadata().getAnnotations())
54+
.containsKey(CUSTOM_NAME_KEY)
55+
.containsKey(CUSTOM_NAMESPACE_KEY);
56+
assertThat(resource.getData()).containsEntry(CustomMappingConfigMapDependentResource.KEY,
57+
INITIAL_VALUE);
58+
});
59+
}
60+
61+
62+
DependentCustomMappingCustomResource testResource() {
63+
var dr = new DependentCustomMappingCustomResource();
64+
dr.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build());
65+
dr.setSpec(new DependentCustomMappingSpec());
66+
dr.getSpec().setValue(INITIAL_VALUE);
67+
68+
return dr;
69+
}
70+
71+
472
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/sample/dependentcustommappingannotation/CustomMappingConfigMapDependentResource.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,12 @@ public class CustomMappingConfigMapDependentResource
1616
extends CRUDNoGCKubernetesDependentResource<ConfigMap, DependentCustomMappingCustomResource>
1717
implements SecondaryToPrimaryMapper<ConfigMap> {
1818

19+
public static final String CUSTOM_NAME_KEY = "customNameKey";
20+
public static final String CUSTOM_NAMESPACE_KEY = "customNamespaceKey";
21+
public static final String KEY = "key";
22+
1923
private SecondaryToPrimaryMapper<ConfigMap> mapper =
20-
Mappers.fromAnnotation("customNameKey", "customNamespaceKey");
24+
Mappers.fromAnnotation(CUSTOM_NAME_KEY, CUSTOM_NAMESPACE_KEY);
2125

2226
public CustomMappingConfigMapDependentResource() {
2327
super(ConfigMap.class);
@@ -31,12 +35,18 @@ protected ConfigMap desired(DependentCustomMappingCustomResource primary,
3135
.withName(primary.getMetadata().getName())
3236
.withNamespace(primary.getMetadata().getNamespace())
3337
.build())
34-
.withData(Map.of("key", "val"))
38+
.withData(Map.of(KEY, primary.getSpec().getValue()))
3539
.build();
3640
}
3741

3842
@Override
3943
public Set<ResourceID> toPrimaryResourceIDs(ConfigMap resource) {
4044
return mapper.toPrimaryResourceIDs(resource);
4145
}
46+
47+
@Override
48+
protected void addSecondaryToPrimaryMapperAnnotations(ConfigMap desired,
49+
DependentCustomMappingCustomResource primary) {
50+
addSecondaryToPrimaryMapperAnnotations(desired, primary, CUSTOM_NAME_KEY, CUSTOM_NAMESPACE_KEY);
51+
}
4252
}

0 commit comments

Comments
 (0)