From 17353876f881b6ff4b3dd5c7771c9184f9d50571 Mon Sep 17 00:00:00 2001 From: yarinkos Date: Sun, 6 Aug 2023 21:05:21 +0300 Subject: [PATCH 1/4] feat(): validate toplevel size --- .../processing/dependent/workflow/DefaultWorkflow.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java index b25de43bb7..e223a2384f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java @@ -79,6 +79,9 @@ private Map toMap(Set node } map.put(node.getName(), node); } + if (topLevelResources.size() <= 0 ){ + throw new IllegalStateException("Top level dependent resources set size must be bigger than 0 ."); + } return map; } From cd0c372cf7e7817592db6c2d614132d20b996a37 Mon Sep 17 00:00:00 2001 From: yarinkos Date: Sun, 6 Aug 2023 21:35:19 +0300 Subject: [PATCH 2/4] format DefaultWorkflow.java --- .../processing/dependent/workflow/DefaultWorkflow.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java index e223a2384f..f127acbfd6 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java @@ -79,9 +79,9 @@ private Map toMap(Set node } map.put(node.getName(), node); } - if (topLevelResources.size() <= 0 ){ - throw new IllegalStateException("Top level dependent resources set size must be bigger than 0 ."); - } + if (topLevelResources.size() == 0) { + throw new IllegalStateException("Top level dependent resources set size must be bigger than 0 ."); + } return map; } From 2d862fed65c543c2e91b01760faa89375929d876 Mon Sep 17 00:00:00 2001 From: yarinkos Date: Mon, 7 Aug 2023 12:53:21 +0300 Subject: [PATCH 3/4] fix():elaborate top level exception --- .../processing/dependent/workflow/DefaultWorkflow.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java index f127acbfd6..b2b8716470 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java @@ -80,8 +80,9 @@ private Map toMap(Set node map.put(node.getName(), node); } if (topLevelResources.size() == 0) { - throw new IllegalStateException("Top level dependent resources set size must be bigger than 0 ."); - } + throw new IllegalStateException( + "No top-level dependent resources found. This might indicate a cyclic Set of DependentResourceNode has been provided."); + } return map; } From f5e68598e989f129dca9d54711b486523322b7cb Mon Sep 17 00:00:00 2001 From: yarinkos Date: Mon, 7 Aug 2023 14:36:20 +0300 Subject: [PATCH 4/4] Update WorkflowTest.java --- .../dependent/workflow/WorkflowTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java index 49f1274fa8..bc6ab8515f 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java @@ -14,6 +14,7 @@ import io.javaoperatorsdk.operator.sample.simple.TestCustomResource; import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertThrows; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; @@ -24,6 +25,22 @@ class WorkflowTest { ExecutorService executorService = Executors.newCachedThreadPool(); + @Test + void zeroTopLevelDRShouldThrowException() { + var dr1 = mock(DependentResource.class); + var dr2 = mock(DependentResource.class); + var dr3 = mock(DependentResource.class); + + var cyclicWorkflowBuilderSetup = new WorkflowBuilder() + .addDependentResource(dr1).dependsOn() + .addDependentResource(dr2).dependsOn(dr1) + .addDependentResource(dr3).dependsOn(dr2) + .addDependentResource(dr1).dependsOn(dr2); + + assertThrows(IllegalStateException.class, + cyclicWorkflowBuilderSetup::build); + } + @Test void calculatesTopLevelResources() { var dr1 = mock(DependentResource.class);