Skip to content

Commit 2fab478

Browse files
committed
wip
1 parent a2eb3ca commit 2fab478

File tree

5 files changed

+76
-5
lines changed

5 files changed

+76
-5
lines changed

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ public WorkflowReconcileExecutor(Workflow<P> workflow, P primary, Context<P> con
3333
this.workflow = workflow;
3434
}
3535

36-
public void reconcile() {
36+
public synchronized void reconcile() {
3737
for (DependentResourceNode dependentResourceNode : workflow.getTopLevelDependentResources()) {
3838
submitForReconcile(dependentResourceNode);
3939
}
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package io.javaoperatorsdk.operator.processing.dependent.workflow.builder;
22

3+
import io.fabric8.kubernetes.api.model.HasMetadata;
34
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
45
import io.javaoperatorsdk.operator.processing.dependent.workflow.DependentResourceNode;
56
import io.javaoperatorsdk.operator.processing.dependent.workflow.DependsOnRelation;
67

7-
public class DependentBuilder {
8+
public class DependentBuilder<P extends HasMetadata> {
89

9-
private final WorkflowBuilder workflowBuilder;
10+
private final WorkflowBuilder<P> workflowBuilder;
1011
private final DependentResourceNode node;
1112

12-
public DependentBuilder(WorkflowBuilder workflowBuilder, DependentResourceNode node) {
13+
public DependentBuilder(WorkflowBuilder<P> workflowBuilder, DependentResourceNode node) {
1314
this.workflowBuilder = workflowBuilder;
1415
this.node = node;
1516
}
@@ -20,4 +21,8 @@ public DependentBuilder dependsOn(DependentResource<?, ?> dependentResource) {
2021
return this;
2122
}
2223

24+
public WorkflowBuilder<P> build() {
25+
return workflowBuilder;
26+
}
27+
2328
}

operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/builder/WorkflowBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ public class WorkflowBuilder<P extends HasMetadata> {
1414

1515
private List<DependentResourceNode> dependentResourceNodes = new ArrayList<>();
1616

17-
public DependentBuilder addDependent(DependentResource<?, ?> dependentResource) {
17+
public DependentBuilder addDependent(DependentResource<?, P> dependentResource) {
1818
DependentResourceNode node = new DependentResourceNode(dependentResource);
1919
dependentResourceNodes.add(node);
2020
return new DependentBuilder(this, node);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package io.javaoperatorsdk.operator.processing.dependent.workflow;
2+
3+
import java.util.List;
4+
5+
import org.assertj.core.api.AbstractAssert;
6+
7+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
8+
9+
public class ExecutionListAssert
10+
extends AbstractAssert<ExecutionListAssert, List<DependentResource<?, ?>>> {
11+
12+
public ExecutionListAssert(List<DependentResource<?, ?>> dependentResources) {
13+
super(dependentResources, ExecutionListAssert.class);
14+
}
15+
16+
public static ExecutionListAssert assertThat(List<DependentResource<?, ?>> actual) {
17+
return new ExecutionListAssert(actual);
18+
}
19+
20+
21+
22+
}

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java

+44
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,39 @@
11
package io.javaoperatorsdk.operator.processing.dependent.workflow;
22

3+
import java.util.ArrayList;
4+
import java.util.Collections;
5+
import java.util.List;
6+
import java.util.Optional;
7+
38
import org.junit.jupiter.api.Test;
49

10+
import io.javaoperatorsdk.operator.api.reconciler.Context;
11+
import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource;
12+
import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult;
13+
import io.javaoperatorsdk.operator.processing.dependent.workflow.builder.WorkflowBuilder;
14+
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
15+
16+
import static io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult.resourceCreated;
517
import static org.junit.jupiter.api.Assertions.*;
618

719
class WorkflowTest {
820

21+
public static final String VALUE = "value";
22+
private List<DependentResource<?, ?>> dependentResourceExecutions =
23+
Collections.synchronizedList(new ArrayList<>());
24+
925
@Test
1026
void reconcileTopLevelResources() {
27+
var dr1 = new TestDependent();
28+
var dr2 = new TestDependent();
29+
Workflow<TestCustomResource> workflow = new WorkflowBuilder<TestCustomResource>()
30+
.addDependent(dr1).build()
31+
.addDependent(dr2).build()
32+
.build();
33+
34+
workflow.reconcile(new TestCustomResource(), null);
1135

36+
// assertThat(dependentResourceExecutions).hasSize(2);
1237
}
1338

1439
@Test
@@ -26,4 +51,23 @@ void diamondShareWorkflowReconcile() {
2651

2752
}
2853

54+
private class TestDependent implements DependentResource<String, TestCustomResource> {
55+
@Override
56+
public ReconcileResult<String> reconcile(TestCustomResource primary,
57+
Context<TestCustomResource> context) {
58+
dependentResourceExecutions.add(this);
59+
return ReconcileResult.resourceCreated(VALUE);
60+
}
61+
62+
@Override
63+
public Class<String> resourceType() {
64+
return String.class;
65+
}
66+
67+
@Override
68+
public Optional<String> getSecondaryResource(TestCustomResource primary) {
69+
return Optional.of(VALUE);
70+
}
71+
}
72+
2973
}

0 commit comments

Comments
 (0)