|
8 | 8 |
|
9 | 9 | import io.fabric8.kubernetes.api.model.Secret;
|
10 | 10 | import io.javaoperatorsdk.operator.MockKubernetesClient;
|
| 11 | +import io.javaoperatorsdk.operator.OperatorException; |
11 | 12 | import io.javaoperatorsdk.operator.api.config.BaseConfigurationService;
|
12 | 13 | import io.javaoperatorsdk.operator.api.config.ConfigurationService;
|
13 | 14 | import io.javaoperatorsdk.operator.api.config.MockControllerConfiguration;
|
|
23 | 24 | import io.javaoperatorsdk.operator.sample.simple.TestCustomResource;
|
24 | 25 |
|
25 | 26 | import static io.javaoperatorsdk.operator.api.monitoring.Metrics.NOOP;
|
| 27 | +import static io.javaoperatorsdk.operator.processing.Controller.CLEANER_NOT_SUPPORTED_ON_ALL_EVENT_ERROR_MESSAGE; |
| 28 | +import static io.javaoperatorsdk.operator.processing.Controller.MANAGED_WORKFLOWS_NOT_SUPPORTED_TRIGGER_RECONCILER_ON_ALL_EVENT_ERROR_MESSAGE; |
26 | 29 | import static org.assertj.core.api.Assertions.assertThat;
|
| 30 | +import static org.junit.jupiter.api.Assertions.assertThrows; |
27 | 31 | import static org.mockito.ArgumentMatchers.any;
|
28 | 32 | import static org.mockito.Mockito.mock;
|
29 | 33 | import static org.mockito.Mockito.never;
|
@@ -76,6 +80,54 @@ void usesFinalizerIfThereIfReconcilerImplementsCleaner() {
|
76 | 80 | assertThat(controller.useFinalizer()).isTrue();
|
77 | 81 | }
|
78 | 82 |
|
| 83 | + @Test |
| 84 | + void cleanerNotAllowedWithTriggerOnAllEventEnabled() { |
| 85 | + Reconciler reconciler = mock(Reconciler.class, withSettings().extraInterfaces(Cleaner.class)); |
| 86 | + final var configuration = MockControllerConfiguration.forResource(Secret.class); |
| 87 | + when(configuration.getConfigurationService()).thenReturn(new BaseConfigurationService()); |
| 88 | + when(configuration.triggerReconcilerOnAllEvent()).thenReturn(true); |
| 89 | + |
| 90 | + var exception = |
| 91 | + assertThrows( |
| 92 | + OperatorException.class, |
| 93 | + () -> |
| 94 | + new Controller<Secret>( |
| 95 | + reconciler, configuration, MockKubernetesClient.client(Secret.class))); |
| 96 | + |
| 97 | + assertThat(exception.getMessage()).isEqualTo(CLEANER_NOT_SUPPORTED_ON_ALL_EVENT_ERROR_MESSAGE); |
| 98 | + } |
| 99 | + |
| 100 | + @Test |
| 101 | + void managedWorkflowNotAllowedWithOnAllEventEnabled() { |
| 102 | + Reconciler reconciler = mock(Reconciler.class); |
| 103 | + final var configuration = MockControllerConfiguration.forResource(Secret.class); |
| 104 | + |
| 105 | + var configurationService = mock(ConfigurationService.class); |
| 106 | + var mockWorkflowFactory = mock(ManagedWorkflowFactory.class); |
| 107 | + var mockManagedWorkflow = mock(ManagedWorkflow.class); |
| 108 | + |
| 109 | + when(configuration.getConfigurationService()).thenReturn(configurationService); |
| 110 | + var workflowSpec = mock(WorkflowSpec.class); |
| 111 | + when(configuration.getWorkflowSpec()).thenReturn(Optional.of(workflowSpec)); |
| 112 | + when(configurationService.getMetrics()).thenReturn(NOOP); |
| 113 | + when(configurationService.getWorkflowFactory()).thenReturn(mockWorkflowFactory); |
| 114 | + when(mockWorkflowFactory.workflowFor(any())).thenReturn(mockManagedWorkflow); |
| 115 | + var managedWorkflowMock = workflow(true); |
| 116 | + when(mockManagedWorkflow.resolve(any(), any())).thenReturn(managedWorkflowMock); |
| 117 | + |
| 118 | + when(configuration.triggerReconcilerOnAllEvent()).thenReturn(true); |
| 119 | + |
| 120 | + var exception = |
| 121 | + assertThrows( |
| 122 | + OperatorException.class, |
| 123 | + () -> |
| 124 | + new Controller<Secret>( |
| 125 | + reconciler, configuration, MockKubernetesClient.client(Secret.class))); |
| 126 | + |
| 127 | + assertThat(exception.getMessage()) |
| 128 | + .isEqualTo(MANAGED_WORKFLOWS_NOT_SUPPORTED_TRIGGER_RECONCILER_ON_ALL_EVENT_ERROR_MESSAGE); |
| 129 | + } |
| 130 | + |
79 | 131 | @ParameterizedTest
|
80 | 132 | @CsvSource({
|
81 | 133 | "true, true, true, false",
|
@@ -132,6 +184,7 @@ private Workflow workflow(boolean hasCleaner) {
|
132 | 184 | var workflow = mock(Workflow.class);
|
133 | 185 | when(workflow.cleanup(any(), any())).thenReturn(mock(WorkflowCleanupResult.class));
|
134 | 186 | when(workflow.hasCleaner()).thenReturn(hasCleaner);
|
| 187 | + when(workflow.isEmpty()).thenReturn(false); |
135 | 188 | return workflow;
|
136 | 189 | }
|
137 | 190 | }
|
0 commit comments