1010import io .fabric8 .kubernetes .api .model .HasMetadata ;
1111import io .fabric8 .kubernetes .api .model .ObjectMeta ;
1212import io .fabric8 .kubernetes .client .CustomResource ;
13+ import io .javaoperatorsdk .operator .MockKubernetesClient ;
1314import io .javaoperatorsdk .operator .TestUtils ;
1415import io .javaoperatorsdk .operator .api .config .ConfigurationService ;
1516import io .javaoperatorsdk .operator .api .config .ControllerConfiguration ;
17+ import io .javaoperatorsdk .operator .api .config .ExecutorServiceManager ;
18+ import io .javaoperatorsdk .operator .api .config .RetryConfiguration ;
1619import io .javaoperatorsdk .operator .api .monitoring .Metrics ;
1720import io .javaoperatorsdk .operator .api .reconciler .*;
1821import io .javaoperatorsdk .operator .processing .Controller ;
@@ -35,35 +38,41 @@ class ReconciliationDispatcherTest {
3538 private ReconciliationDispatcher <TestCustomResource > reconciliationDispatcher ;
3639 private final Reconciler <TestCustomResource > reconciler = mock (Reconciler .class ,
3740 withSettings ().extraInterfaces (ErrorStatusHandler .class ));
38- private final ControllerConfiguration <TestCustomResource > configuration =
39- mock (ControllerConfiguration .class );
4041 private final ConfigurationService configService = mock (ConfigurationService .class );
4142 private final CustomResourceFacade <TestCustomResource > customResourceFacade =
4243 mock (ReconciliationDispatcher .CustomResourceFacade .class );
4344
4445 @ BeforeEach
4546 void setup () {
47+ ExecutorServiceManager .useTestInstance ();
4648 testCustomResource = TestUtils .testCustomResource ();
4749 reconciliationDispatcher =
48- init (testCustomResource , reconciler , configuration , customResourceFacade );
50+ init (testCustomResource , reconciler , null , customResourceFacade , true );
4951 }
5052
5153 private <R extends HasMetadata > ReconciliationDispatcher <R > init (R customResource ,
5254 Reconciler <R > reconciler , ControllerConfiguration <R > configuration ,
53- CustomResourceFacade <R > customResourceFacade ) {
54- when (configuration .getFinalizer ()).thenReturn (DEFAULT_FINALIZER );
55+ CustomResourceFacade <R > customResourceFacade , boolean useFinalizer ) {
56+ configuration = configuration == null ? mock (ControllerConfiguration .class ) : configuration ;
57+ final var finalizer = useFinalizer ? DEFAULT_FINALIZER : Constants .NO_FINALIZER ;
58+ when (configuration .getFinalizer ()).thenReturn (finalizer );
5559 when (configuration .useFinalizer ()).thenCallRealMethod ();
5660 when (configuration .getName ()).thenReturn ("EventDispatcherTestController" );
57- when (configService .getMetrics ()).thenReturn (Metrics .NOOP );
61+ when (configuration .getResourceClass ()).thenReturn ((Class <R >) customResource .getClass ());
62+ when (configuration .getRetryConfiguration ()).thenReturn (RetryConfiguration .DEFAULT );
5863 when (configuration .getConfigurationService ()).thenReturn (configService );
64+
65+ when (configService .getMetrics ()).thenReturn (Metrics .NOOP );
5966 when (configService .getResourceCloner ()).thenReturn (ConfigurationService .DEFAULT_CLONER );
67+
6068 when (reconciler .reconcile (eq (customResource ), any ()))
6169 .thenReturn (UpdateControl .updateResource (customResource ));
6270 when (reconciler .cleanup (eq (customResource ), any ()))
6371 .thenReturn (DeleteControl .defaultDelete ());
6472 when (customResourceFacade .replaceWithLock (any ())).thenReturn (null );
65- Controller <R > controller =
66- new Controller <>(reconciler , configuration , null );
73+ Controller <R > controller = new Controller <>(reconciler , configuration ,
74+ MockKubernetesClient .client (customResource .getClass ()));
75+ controller .start ();
6776
6877 return new ReconciliationDispatcher <>(controller , customResourceFacade );
6978 }
@@ -140,10 +149,12 @@ void callsDeleteIfObjectHasFinalizerAndMarkedForDelete() {
140149 */
141150 @ Test
142151 void callDeleteOnControllerIfMarkedForDeletionWhenNoFinalizerIsConfigured () {
143- configureToNotUseFinalizer ();
152+ final ReconciliationDispatcher <TestCustomResource > dispatcher =
153+ init (testCustomResource , reconciler ,
154+ null , customResourceFacade , false );
144155 markForDeletion (testCustomResource );
145156
146- reconciliationDispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
157+ dispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
147158
148159 verify (reconciler ).cleanup (eq (testCustomResource ), any ());
149160 }
@@ -157,23 +168,13 @@ void doNotCallDeleteIfMarkedForDeletionWhenFinalizerHasAlreadyBeenRemoved() {
157168 verify (reconciler , never ()).cleanup (eq (testCustomResource ), any ());
158169 }
159170
160- private void configureToNotUseFinalizer () {
161- ControllerConfiguration <HasMetadata > configuration =
162- mock (ControllerConfiguration .class );
163- when (configuration .getName ()).thenReturn ("EventDispatcherTestController" );
164- when (configService .getMetrics ()).thenReturn (Metrics .NOOP );
165- when (configuration .getConfigurationService ()).thenReturn (configService );
166- when (configuration .useFinalizer ()).thenReturn (false );
167- reconciliationDispatcher =
168- new ReconciliationDispatcher (new Controller (reconciler , configuration , null ),
169- customResourceFacade );
170- }
171-
172171 @ Test
173172 void doesNotAddFinalizerIfConfiguredNotTo () {
174- configureToNotUseFinalizer ();
173+ final ReconciliationDispatcher <TestCustomResource > dispatcher =
174+ init (testCustomResource , reconciler ,
175+ null , customResourceFacade , false );
175176
176- reconciliationDispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
177+ dispatcher .handleExecution (executionScopeWithCREvent (testCustomResource ));
177178
178179 assertEquals (0 , testCustomResource .getMetadata ().getFinalizers ().size ());
179180 }
@@ -312,7 +313,7 @@ void setObservedGenerationForStatusIfNeeded() {
312313 ControllerConfiguration <ObservedGenCustomResource > config =
313314 mock (ControllerConfiguration .class );
314315 CustomResourceFacade <ObservedGenCustomResource > facade = mock (CustomResourceFacade .class );
315- var dispatcher = init (observedGenResource , reconciler , config , facade );
316+ var dispatcher = init (observedGenResource , reconciler , config , facade , true );
316317
317318 when (config .isGenerationAware ()).thenReturn (true );
318319 when (reconciler .reconcile (any (), any ()))
@@ -337,7 +338,7 @@ void updatesObservedGenerationOnNoUpdateUpdateControl() {
337338 when (reconciler .reconcile (any (), any ()))
338339 .thenReturn (UpdateControl .noUpdate ());
339340 when (facade .updateStatus (observedGenResource )).thenReturn (observedGenResource );
340- var dispatcher = init (observedGenResource , reconciler , config , facade );
341+ var dispatcher = init (observedGenResource , reconciler , config , facade , true );
341342
342343 PostExecutionControl <ObservedGenCustomResource > control = dispatcher .handleExecution (
343344 executionScopeWithCREvent (observedGenResource ));
0 commit comments