Skip to content

Commit 9616c74

Browse files
committed
unit test
Signed-off-by: Attila Mészáros <[email protected]>
1 parent c2d039f commit 9616c74

File tree

1 file changed

+66
-0
lines changed
  • operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing

1 file changed

+66
-0
lines changed

operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,33 @@
11
package io.javaoperatorsdk.operator.processing;
22

3+
import java.util.Optional;
4+
35
import org.junit.jupiter.api.Test;
6+
import org.junit.jupiter.params.ParameterizedTest;
7+
import org.junit.jupiter.params.provider.CsvSource;
48

59
import io.fabric8.kubernetes.api.model.Secret;
610
import io.javaoperatorsdk.operator.MockKubernetesClient;
711
import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
812
import io.javaoperatorsdk.operator.api.config.ConfigurationService;
913
import io.javaoperatorsdk.operator.api.config.MockControllerConfiguration;
14+
import io.javaoperatorsdk.operator.api.config.workflow.WorkflowSpec;
1015
import io.javaoperatorsdk.operator.api.reconciler.Cleaner;
16+
import io.javaoperatorsdk.operator.api.reconciler.DefaultContext;
17+
import io.javaoperatorsdk.operator.api.reconciler.DeleteControl;
1118
import io.javaoperatorsdk.operator.api.reconciler.Reconciler;
19+
import io.javaoperatorsdk.operator.processing.dependent.workflow.ManagedWorkflow;
20+
import io.javaoperatorsdk.operator.processing.dependent.workflow.ManagedWorkflowFactory;
21+
import io.javaoperatorsdk.operator.processing.dependent.workflow.Workflow;
22+
import io.javaoperatorsdk.operator.processing.dependent.workflow.WorkflowCleanupResult;
1223
import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
1324

25+
import static io.javaoperatorsdk.operator.api.monitoring.Metrics.NOOP;
1426
import static org.assertj.core.api.Assertions.assertThat;
27+
import static org.mockito.ArgumentMatchers.any;
1528
import static org.mockito.Mockito.mock;
1629
import static org.mockito.Mockito.never;
30+
import static org.mockito.Mockito.times;
1731
import static org.mockito.Mockito.verify;
1832
import static org.mockito.Mockito.when;
1933
import static org.mockito.Mockito.withSettings;
@@ -61,4 +75,56 @@ void usesFinalizerIfThereIfReconcilerImplementsCleaner() {
6175

6276
assertThat(controller.useFinalizer()).isTrue();
6377
}
78+
79+
@ParameterizedTest
80+
@CsvSource({
81+
"true, true, true, false",
82+
"true, true, false, true",
83+
"false, true, true, true",
84+
"false, true, false, true",
85+
"true, false, true, false",
86+
})
87+
void callsCleanupOnWorkflowWhenHasCleanerAndReconcilerIsNotCleaner(boolean reconcilerIsCleaner,
88+
boolean workflowIsCleaner,
89+
boolean isExplicitWorkflowInvocation,
90+
boolean workflowCleanerExecuted) throws Exception {
91+
Reconciler reconciler = mock(Reconciler.class);
92+
if (reconcilerIsCleaner) {
93+
reconciler = mock(Reconciler.class, withSettings().extraInterfaces(Cleaner.class));
94+
}
95+
96+
final var configuration = MockControllerConfiguration.forResource(Secret.class);
97+
98+
if (reconciler instanceof Cleaner<?> cleaner) {
99+
when(cleaner.cleanup(any(), any())).thenReturn(DeleteControl.noFinalizerRemoval());
100+
}
101+
102+
var configurationService = mock(ConfigurationService.class);
103+
var mockWorkflowFactory = mock(ManagedWorkflowFactory.class);
104+
var mockManagedWorkflow = mock(ManagedWorkflow.class);
105+
106+
when(configuration.getConfigurationService()).thenReturn(configurationService);
107+
var workflowSpec = mock(WorkflowSpec.class);
108+
when(workflowSpec.isExplicitInvocation()).thenReturn(isExplicitWorkflowInvocation);
109+
when(configuration.getWorkflowSpec()).thenReturn(Optional.of(workflowSpec));
110+
when(configurationService.getMetrics()).thenReturn(NOOP);
111+
when(configurationService.getWorkflowFactory()).thenReturn(mockWorkflowFactory);
112+
when(mockWorkflowFactory.workflowFor(any())).thenReturn(mockManagedWorkflow);
113+
var managedWorkflowMock = workflow(workflowIsCleaner);
114+
when(mockManagedWorkflow.resolve(any(), any())).thenReturn(managedWorkflowMock);
115+
116+
final var controller = new Controller<Secret>(reconciler, configuration,
117+
MockKubernetesClient.client(Secret.class));
118+
119+
controller.cleanup(new Secret(), new DefaultContext<>(null, controller, new Secret()));
120+
121+
verify(managedWorkflowMock, times(workflowCleanerExecuted ? 1 : 0)).cleanup(any(), any());
122+
}
123+
124+
private Workflow workflow(boolean hasCleaner) {
125+
var workflow = mock(Workflow.class);
126+
when(workflow.cleanup(any(), any())).thenReturn(mock(WorkflowCleanupResult.class));
127+
when(workflow.hasCleaner()).thenReturn(hasCleaner);
128+
return workflow;
129+
}
64130
}

0 commit comments

Comments
 (0)