Skip to content

Commit d2fdf38

Browse files
authored
fix: standalone workflows now fail on top-level cycles (#1997)
1 parent f936a51 commit d2fdf38

File tree

2 files changed

+21
-0
lines changed
  • operator-framework-core/src

2 files changed

+21
-0
lines changed

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

+4
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,10 @@ private Map<String, DependentResourceNode> toMap(Set<DependentResourceNode> node
7979
}
8080
map.put(node.getName(), node);
8181
}
82+
if (topLevelResources.size() == 0) {
83+
throw new IllegalStateException(
84+
"No top-level dependent resources found. This might indicate a cyclic Set of DependentResourceNode has been provided.");
85+
}
8286
return map;
8387
}
8488

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

+17
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
1515

1616
import static org.assertj.core.api.Assertions.assertThat;
17+
import static org.junit.Assert.assertThrows;
1718
import static org.junit.jupiter.api.Assertions.assertFalse;
1819
import static org.junit.jupiter.api.Assertions.assertTrue;
1920
import static org.mockito.Mockito.mock;
@@ -24,6 +25,22 @@ class WorkflowTest {
2425

2526
ExecutorService executorService = Executors.newCachedThreadPool();
2627

28+
@Test
29+
void zeroTopLevelDRShouldThrowException() {
30+
var dr1 = mock(DependentResource.class);
31+
var dr2 = mock(DependentResource.class);
32+
var dr3 = mock(DependentResource.class);
33+
34+
var cyclicWorkflowBuilderSetup = new WorkflowBuilder<TestCustomResource>()
35+
.addDependentResource(dr1).dependsOn()
36+
.addDependentResource(dr2).dependsOn(dr1)
37+
.addDependentResource(dr3).dependsOn(dr2)
38+
.addDependentResource(dr1).dependsOn(dr2);
39+
40+
assertThrows(IllegalStateException.class,
41+
cyclicWorkflowBuilderSetup::build);
42+
}
43+
2744
@Test
2845
void calculatesTopLevelResources() {
2946
var dr1 = mock(DependentResource.class);

0 commit comments

Comments
 (0)