Skip to content

Commit 8b3394c

Browse files
authored
improve: Integration test for dependent in different namespace (#1924)
1 parent f976c5c commit 8b3394c

File tree

5 files changed

+166
-0
lines changed

5 files changed

+166
-0
lines changed
Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package io.javaoperatorsdk.operator;
2+
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.dependentdifferentnamespace.ConfigMapDependentResource;
10+
import io.javaoperatorsdk.operator.sample.dependentdifferentnamespace.DependentDifferentNamespaceCustomResource;
11+
import io.javaoperatorsdk.operator.sample.dependentdifferentnamespace.DependentDifferentNamespaceReconciler;
12+
import io.javaoperatorsdk.operator.sample.dependentdifferentnamespace.DependentDifferentNamespaceSpec;
13+
14+
import static io.javaoperatorsdk.operator.sample.dependentdifferentnamespace.ConfigMapDependentResource.KEY;
15+
import static org.assertj.core.api.Assertions.assertThat;
16+
import static org.awaitility.Awaitility.await;
17+
18+
class DependentDifferentNamespaceIT {
19+
20+
public static final String TEST_1 = "different-ns-test1";
21+
public static final String INITIAL_VALUE = "initial_value";
22+
public static final String CHANGED_VALUE = "changed_value";
23+
24+
@RegisterExtension
25+
LocallyRunOperatorExtension extension =
26+
LocallyRunOperatorExtension.builder()
27+
.withReconciler(DependentDifferentNamespaceReconciler.class)
28+
.build();
29+
30+
@Test
31+
void managesCRUDOperationsForDependentInDifferentNamespace() {
32+
var resource = extension.create(testResource());
33+
34+
await().untilAsserted(() -> {
35+
var cm = getDependentConfigMap();
36+
assertThat(cm).isNotNull();
37+
assertThat(cm.getData()).containsEntry(KEY, INITIAL_VALUE);
38+
});
39+
40+
resource.getSpec().setValue(CHANGED_VALUE);
41+
resource = extension.replace(resource);
42+
43+
await().untilAsserted(() -> {
44+
var cm = getDependentConfigMap();
45+
assertThat(cm.getData()).containsEntry(KEY, CHANGED_VALUE);
46+
});
47+
48+
extension.delete(resource);
49+
await().untilAsserted(() -> {
50+
var cm = getDependentConfigMap();
51+
assertThat(cm).isNull();
52+
});
53+
}
54+
55+
private ConfigMap getDependentConfigMap() {
56+
return extension.getKubernetesClient().configMaps()
57+
.inNamespace(ConfigMapDependentResource.NAMESPACE)
58+
.withName(TEST_1).get();
59+
}
60+
61+
DependentDifferentNamespaceCustomResource testResource() {
62+
var res = new DependentDifferentNamespaceCustomResource();
63+
res.setMetadata(new ObjectMetaBuilder()
64+
.withName(TEST_1)
65+
.build());
66+
res.setSpec(new DependentDifferentNamespaceSpec());
67+
res.getSpec().setValue(INITIAL_VALUE);
68+
return res;
69+
}
70+
71+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package io.javaoperatorsdk.operator.sample.dependentdifferentnamespace;
2+
3+
import java.util.HashMap;
4+
5+
import io.fabric8.kubernetes.api.model.ConfigMap;
6+
import io.fabric8.kubernetes.api.model.ObjectMeta;
7+
import io.javaoperatorsdk.operator.api.reconciler.Context;
8+
import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource;
9+
10+
public class ConfigMapDependentResource extends
11+
CRUDNoGCKubernetesDependentResource<ConfigMap, DependentDifferentNamespaceCustomResource> {
12+
13+
public static final String KEY = "key";
14+
15+
public static final String NAMESPACE = "default";
16+
17+
public ConfigMapDependentResource() {
18+
super(ConfigMap.class);
19+
}
20+
21+
@Override
22+
protected ConfigMap desired(DependentDifferentNamespaceCustomResource primary,
23+
Context<DependentDifferentNamespaceCustomResource> context) {
24+
25+
ConfigMap configMap = new ConfigMap();
26+
configMap.setMetadata(new ObjectMeta());
27+
configMap.getMetadata().setName(primary.getMetadata().getName());
28+
configMap.getMetadata().setNamespace(NAMESPACE);
29+
HashMap<String, String> data = new HashMap<>();
30+
data.put(KEY, primary.getSpec().getValue());
31+
configMap.setData(data);
32+
return configMap;
33+
}
34+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javaoperatorsdk.operator.sample.dependentdifferentnamespace;
2+
3+
import io.fabric8.kubernetes.api.model.Namespaced;
4+
import io.fabric8.kubernetes.client.CustomResource;
5+
import io.fabric8.kubernetes.model.annotation.Group;
6+
import io.fabric8.kubernetes.model.annotation.ShortNames;
7+
import io.fabric8.kubernetes.model.annotation.Version;
8+
9+
@Group("sample.javaoperatorsdk")
10+
@Version("v1")
11+
@ShortNames("ddn")
12+
public class DependentDifferentNamespaceCustomResource
13+
extends CustomResource<DependentDifferentNamespaceSpec, Void>
14+
implements Namespaced {
15+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.javaoperatorsdk.operator.sample.dependentdifferentnamespace;
2+
3+
import java.util.concurrent.atomic.AtomicInteger;
4+
5+
import io.javaoperatorsdk.operator.api.reconciler.*;
6+
import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent;
7+
import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider;
8+
9+
@ControllerConfiguration(
10+
dependents = {
11+
@Dependent(type = ConfigMapDependentResource.class),
12+
})
13+
public class DependentDifferentNamespaceReconciler
14+
implements Reconciler<DependentDifferentNamespaceCustomResource>,
15+
TestExecutionInfoProvider {
16+
17+
private final AtomicInteger numberOfExecutions = new AtomicInteger(0);
18+
19+
@Override
20+
public UpdateControl<DependentDifferentNamespaceCustomResource> reconcile(
21+
DependentDifferentNamespaceCustomResource resource,
22+
Context<DependentDifferentNamespaceCustomResource> context) {
23+
numberOfExecutions.addAndGet(1);
24+
return UpdateControl.noUpdate();
25+
}
26+
27+
public int getNumberOfExecutions() {
28+
return numberOfExecutions.get();
29+
}
30+
31+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.javaoperatorsdk.operator.sample.dependentdifferentnamespace;
2+
3+
public class DependentDifferentNamespaceSpec {
4+
5+
private String value;
6+
7+
public String getValue() {
8+
return value;
9+
}
10+
11+
public DependentDifferentNamespaceSpec setValue(String value) {
12+
this.value = value;
13+
return this;
14+
}
15+
}

0 commit comments

Comments
 (0)