1111import io .fabric8 .kubernetes .api .model .HasMetadata ;
1212import io .fabric8 .kubernetes .api .model .ObjectMeta ;
1313import io .fabric8 .kubernetes .client .CustomResource ;
14+ import io .javaoperatorsdk .operator .MockKubernetesClient ;
1415import io .javaoperatorsdk .operator .TestUtils ;
1516import io .javaoperatorsdk .operator .api .config .Cloner ;
1617import io .javaoperatorsdk .operator .api .config .ConfigurationService ;
1718import io .javaoperatorsdk .operator .api .config .ControllerConfiguration ;
19+ import io .javaoperatorsdk .operator .api .config .ExecutorServiceManager ;
20+ import io .javaoperatorsdk .operator .api .config .RetryConfiguration ;
1821import io .javaoperatorsdk .operator .api .monitoring .Metrics ;
1922import io .javaoperatorsdk .operator .api .reconciler .*;
2023import io .javaoperatorsdk .operator .processing .Controller ;
@@ -37,37 +40,43 @@ class ReconciliationDispatcherTest {
3740 private ReconciliationDispatcher <TestCustomResource > reconciliationDispatcher ;
3841 private final Reconciler <TestCustomResource > reconciler = mock (Reconciler .class ,
3942 withSettings ().extraInterfaces (ErrorStatusHandler .class ));
40- private final ControllerConfiguration <TestCustomResource > configuration =
41- mock (ControllerConfiguration .class );
4243 private final ConfigurationService configService = mock (ConfigurationService .class );
4344 private final CustomResourceFacade <TestCustomResource > customResourceFacade =
4445 mock (ReconciliationDispatcher .CustomResourceFacade .class );
4546
4647 @ BeforeEach
4748 void setup () {
49+ ExecutorServiceManager .useTestInstance ();
4850 testCustomResource = TestUtils .testCustomResource ();
4951 reconciliationDispatcher =
50- init (testCustomResource , reconciler , configuration , customResourceFacade );
52+ init (testCustomResource , reconciler , null , customResourceFacade , true );
5153 }
5254
5355 private <R extends HasMetadata > ReconciliationDispatcher <R > init (R customResource ,
5456 Reconciler <R > reconciler , ControllerConfiguration <R > configuration ,
55- CustomResourceFacade <R > customResourceFacade ) {
56- when (configuration .getFinalizer ()).thenReturn (DEFAULT_FINALIZER );
57+ CustomResourceFacade <R > customResourceFacade , boolean useFinalizer ) {
58+ configuration = configuration == null ? mock (ControllerConfiguration .class ) : configuration ;
59+ final var finalizer = useFinalizer ? DEFAULT_FINALIZER : Constants .NO_FINALIZER ;
60+ when (configuration .getFinalizer ()).thenReturn (finalizer );
5761 when (configuration .useFinalizer ()).thenCallRealMethod ();
5862 when (configuration .getName ()).thenReturn ("EventDispatcherTestController" );
59- when (configService .getMetrics ()).thenReturn (Metrics .NOOP );
63+ when (configuration .getResourceClass ()).thenReturn ((Class <R >) customResource .getClass ());
64+ when (configuration .getRetryConfiguration ()).thenReturn (RetryConfiguration .DEFAULT );
6065 when (configuration .getConfigurationService ()).thenReturn (configService );
66+
67+ when (configService .getMetrics ()).thenReturn (Metrics .NOOP );
6168 when (configService .getResourceCloner ()).thenReturn (new Cloner () {
6269 @ Override
63- public <R extends HasMetadata > R clone (R object ) {
70+
71+ public <R extends HasMetadata > R clone (R object ) {
6472 return object ;
6573 }
6674 });
6775 when (reconciler .cleanup (eq (customResource ), any ()))
6876 .thenReturn (DeleteControl .defaultDelete ());
69- Controller <R > controller =
70- new Controller <>(reconciler , configuration , null );
77+ Controller <R > controller = new Controller <>(reconciler , configuration ,
78+ MockKubernetesClient .client (customResource .getClass ()));
79+ controller .start ();
7180
7281 return new ReconciliationDispatcher <>(controller , customResourceFacade );
7382 }
@@ -144,10 +153,12 @@ void callsDeleteIfObjectHasFinalizerAndMarkedForDelete() {
144153 */
145154 @ Test
146155 void callDeleteOnControllerIfMarkedForDeletionWhenNoFinalizerIsConfigured () {
147- configureToNotUseFinalizer ();
156+ final ReconciliationDispatcher <TestCustomResource > dispatcher =
157+ init (testCustomResource , reconciler ,
158+ null , customResourceFacade , false );
148159 markForDeletion (testCustomResource );
149160
150- reconciliationDispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
161+ dispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
151162
152163 verify (reconciler ).cleanup (eq (testCustomResource ), any ());
153164 }
@@ -161,23 +172,13 @@ void doNotCallDeleteIfMarkedForDeletionWhenFinalizerHasAlreadyBeenRemoved() {
161172 verify (reconciler , never ()).cleanup (eq (testCustomResource ), any ());
162173 }
163174
164- private void configureToNotUseFinalizer () {
165- ControllerConfiguration <HasMetadata > configuration =
166- mock (ControllerConfiguration .class );
167- when (configuration .getName ()).thenReturn ("EventDispatcherTestController" );
168- when (configService .getMetrics ()).thenReturn (Metrics .NOOP );
169- when (configuration .getConfigurationService ()).thenReturn (configService );
170- when (configuration .useFinalizer ()).thenReturn (false );
171- reconciliationDispatcher =
172- new ReconciliationDispatcher (new Controller (reconciler , configuration , null ),
173- customResourceFacade );
174- }
175-
176175 @ Test
177176 void doesNotAddFinalizerIfConfiguredNotTo () {
178- configureToNotUseFinalizer ();
177+ final ReconciliationDispatcher <TestCustomResource > dispatcher =
178+ init (testCustomResource , reconciler ,
179+ null , customResourceFacade , false );
179180
180- reconciliationDispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
181+ dispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
181182
182183 assertEquals (0 , testCustomResource .getMetadata ().getFinalizers ().size ());
183184 }
@@ -316,7 +317,7 @@ void setObservedGenerationForStatusIfNeeded() {
316317 ControllerConfiguration <ObservedGenCustomResource > config =
317318 mock (ControllerConfiguration .class );
318319 CustomResourceFacade <ObservedGenCustomResource > facade = mock (CustomResourceFacade .class );
319- var dispatcher = init (observedGenResource , reconciler , config , facade );
320+ var dispatcher = init (observedGenResource , reconciler , config , facade , true );
320321
321322 when (config .isGenerationAware ()).thenReturn (true );
322323 when (reconciler .reconcile (any (), any ()))
@@ -341,7 +342,7 @@ void updatesObservedGenerationOnNoUpdateUpdateControl() {
341342 when (reconciler .reconcile (any (), any ()))
342343 .thenReturn (UpdateControl .noUpdate ());
343344 when (facade .updateStatus (observedGenResource )).thenReturn (observedGenResource );
344- var dispatcher = init (observedGenResource , reconciler , config , facade );
345+ var dispatcher = init (observedGenResource , reconciler , config , facade , true );
345346
346347 PostExecutionControl <ObservedGenCustomResource > control = dispatcher .handleExecution (
347348 executionScopeWithCREvent (observedGenResource ));
0 commit comments