Skip to content

Commit 200219a

Browse files
committed
improve: PrimaryToSecondayMapper test improvements
Signed-off-by: Attila Mészáros <[email protected]>
1 parent 86603d9 commit 200219a

File tree

6 files changed

+65
-18
lines changed

6 files changed

+65
-18
lines changed

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Cluster.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
@Group("sample.javaoperatorsdk")
1010
@Version("v1")
1111
@ShortNames("clu")
12-
public class Cluster extends CustomResource<Void, Void> implements Namespaced {}
12+
public class Cluster extends CustomResource<ClusterSpec, Void> implements Namespaced {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.baseapi.primarytosecondary;
2+
3+
public class ClusterSpec {
4+
5+
private String clusterValue;
6+
7+
public String getClusterValue() {
8+
return clusterValue;
9+
}
10+
11+
public void setClusterValue(String clusterValue) {
12+
this.clusterValue = clusterValue;
13+
}
14+
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Job.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,4 @@
99
@Group("sample.javaoperatorsdk")
1010
@Version("v1")
1111
@ShortNames("cjo")
12-
public class Job extends CustomResource<JobSpec, Void> implements Namespaced {}
12+
public class Job extends CustomResource<JobSpec, JobStatus> implements Namespaced {}

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/JobReconciler.java

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,26 +38,37 @@ public JobReconciler(boolean addPrimaryToSecondaryMapper) {
3838

3939
@Override
4040
public UpdateControl<Job> reconcile(Job resource, Context<Job> context) {
41-
41+
Cluster cluster;
4242
if (!getResourceDirectlyFromCache) {
4343
// this is only possible when there is primary to secondary mapper
44-
context
45-
.getSecondaryResource(Cluster.class)
46-
.orElseThrow(() -> new IllegalStateException("Secondary resource should be present"));
44+
cluster =
45+
context
46+
.getSecondaryResource(Cluster.class)
47+
.orElseThrow(() -> new IllegalStateException("Secondary resource should be present"));
4748
} else {
4849
// reading the resource from cache as alternative, works without primary to secondary mapper
4950
var informerEventSource =
5051
(InformerEventSource<Cluster, Job>)
5152
context.eventSourceRetriever().getEventSourceFor(Cluster.class);
52-
informerEventSource
53-
.get(
54-
new ResourceID(
55-
resource.getSpec().getClusterName(), resource.getMetadata().getNamespace()))
56-
.orElseThrow(
57-
() -> new IllegalStateException("Secondary resource cannot be read from cache"));
53+
cluster =
54+
informerEventSource
55+
.get(
56+
new ResourceID(
57+
resource.getSpec().getClusterName(), resource.getMetadata().getNamespace()))
58+
.orElseThrow(
59+
() -> new IllegalStateException("Secondary resource cannot be read from cache"));
60+
}
61+
if (resource.getStatus() == null) {
62+
resource.setStatus(new JobStatus());
5863
}
5964
numberOfExecutions.addAndGet(1);
60-
return UpdateControl.noUpdate();
65+
// copy a value to job status, to we can test triggering
66+
if (!cluster.getSpec().getClusterValue().equals(resource.getStatus().getValueFromCluster())) {
67+
resource.getStatus().setValueFromCluster(cluster.getSpec().getClusterValue());
68+
return UpdateControl.patchStatus(resource);
69+
} else {
70+
return UpdateControl.noUpdate();
71+
}
6172
}
6273

6374
@Override
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.javaoperatorsdk.operator.baseapi.primarytosecondary;
2+
3+
public class JobStatus {
4+
5+
private String valueFromCluster;
6+
7+
public String getValueFromCluster() {
8+
return valueFromCluster;
9+
}
10+
11+
public void setValueFromCluster(String valueFromCluster) {
12+
this.valueFromCluster = valueFromCluster;
13+
}
14+
}

operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryIT.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,9 @@ class PrimaryToSecondaryIT {
1616
public static final String CLUSTER_NAME = "cluster1";
1717
public static final int MIN_DELAY = 150;
1818

19+
public static final String CLUSTER_VALUE = "clusterValue";
20+
public static final String JOB_1 = "job1";
21+
1922
@RegisterExtension
2023
LocallyRunOperatorExtension operator =
2124
LocallyRunOperatorExtension.builder()
@@ -32,15 +35,18 @@ void readsSecondaryInManyToOneCases() throws InterruptedException {
3235
await()
3336
.pollDelay(Duration.ofMillis(300))
3437
.untilAsserted(
35-
() ->
36-
assertThat(
37-
operator.getReconcilerOfType(JobReconciler.class).getNumberOfExecutions())
38-
.isEqualTo(1));
38+
() -> {
39+
assertThat(operator.getReconcilerOfType(JobReconciler.class).getNumberOfExecutions())
40+
.isEqualTo(1);
41+
var job = operator.get(Job.class, JOB_1);
42+
assertThat(job.getStatus()).isNotNull();
43+
assertThat(job.getStatus().getValueFromCluster()).isEqualTo(CLUSTER_VALUE);
44+
});
3945
}
4046

4147
public static Job job() {
4248
var job = new Job();
43-
job.setMetadata(new ObjectMetaBuilder().withName("job1").build());
49+
job.setMetadata(new ObjectMetaBuilder().withName(JOB_1).build());
4450
job.setSpec(new JobSpec());
4551
job.getSpec().setClusterName(CLUSTER_NAME);
4652
return job;
@@ -49,6 +55,8 @@ public static Job job() {
4955
public static Cluster cluster() {
5056
Cluster cluster = new Cluster();
5157
cluster.setMetadata(new ObjectMetaBuilder().withName(CLUSTER_NAME).build());
58+
cluster.setSpec(new ClusterSpec());
59+
cluster.getSpec().setClusterValue(CLUSTER_VALUE);
5260
return cluster;
5361
}
5462
}

0 commit comments

Comments
 (0)