diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java index 62d44b66a2..dfe64d97d0 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ExecutorServiceManager.java @@ -19,16 +19,23 @@ public class ExecutorServiceManager { private final ExecutorService executor; private final int terminationTimeoutSeconds; - private ExecutorServiceManager(ExecutorService executor, int terminationTimeoutSeconds) { + private ExecutorServiceManager(InstrumentedExecutorService executor, + int terminationTimeoutSeconds) { this.executor = executor; this.terminationTimeoutSeconds = terminationTimeoutSeconds; } public static void init(ConfigurationService configuration) { if (instance == null) { + if (configuration == null) { + configuration = new BaseConfigurationService(Version.UNKNOWN); + } instance = new ExecutorServiceManager( new InstrumentedExecutorService(configuration.getExecutorService()), configuration.getTerminationTimeoutSeconds()); + log.debug("Initialized ExecutorServiceManager executor: {}, timeout: {}", + configuration.getExecutorService().getClass(), + configuration.getTerminationTimeoutSeconds()); } else { log.debug("Already started, reusing already setup instance!"); } @@ -45,8 +52,8 @@ public static void stop() { public static ExecutorServiceManager instance() { if (instance == null) { - throw new IllegalStateException( - "ExecutorServiceManager hasn't been started. Call start method before using!"); + // provide a default configuration if none has been provided by init + init(null); } return instance; } @@ -72,6 +79,9 @@ private static class InstrumentedExecutorService implements ExecutorService { private final ExecutorService executor; private InstrumentedExecutorService(ExecutorService executor) { + if (executor == null) { + throw new NullPointerException(); + } this.executor = executor; debug = Utils.debugThreadPool(); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java index 92546b5d1a..5f292ab89c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/Controller.java @@ -12,7 +12,11 @@ import io.javaoperatorsdk.operator.CustomResourceUtils; import io.javaoperatorsdk.operator.MissingCRDException; import io.javaoperatorsdk.operator.OperatorException; +import io.javaoperatorsdk.operator.api.config.BaseConfigurationService; +import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; +import io.javaoperatorsdk.operator.api.config.Version; +import io.javaoperatorsdk.operator.api.monitoring.Metrics; import io.javaoperatorsdk.operator.api.monitoring.Metrics.ControllerExecution; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; @@ -29,6 +33,7 @@ public class Controller implements Reconciler, private final ControllerConfiguration configuration; private final KubernetesClient kubernetesClient; private EventSourceManager eventSourceManager; + private volatile ConfigurationService configurationService; public Controller(Reconciler reconciler, ControllerConfiguration configuration, @@ -40,7 +45,7 @@ public Controller(Reconciler reconciler, @Override public DeleteControl cleanup(R resource, Context context) { - return configuration.getConfigurationService().getMetrics().timeControllerExecution( + return metrics().timeControllerExecution( new ControllerExecution<>() { @Override public String name() { @@ -66,7 +71,7 @@ public DeleteControl execute() { @Override public UpdateControl reconcile(R resource, Context context) { - return configuration.getConfigurationService().getMetrics().timeControllerExecution( + return metrics().timeControllerExecution( new ControllerExecution<>() { @Override public String name() { @@ -97,6 +102,11 @@ public UpdateControl execute() { }); } + private Metrics metrics() { + final var metrics = configurationService().getMetrics(); + return metrics != null ? metrics : Metrics.NOOP; + } + @Override public List prepareEventSources(EventSourceInitializationContext context) { throw new UnsupportedOperationException("This method should never be called directly"); @@ -157,7 +167,7 @@ public void start() throws OperatorException { try { // check that the custom resource is known by the cluster if configured that way final CustomResourceDefinition crd; // todo: check proper CRD spec version based on config - if (configuration.getConfigurationService().checkCRDAndValidateLocalModel()) { + if (configurationService().checkCRDAndValidateLocalModel()) { crd = kubernetesClient.apiextensions().v1().customResourceDefinitions().withName(crdName) .get(); @@ -174,7 +184,7 @@ public void start() throws OperatorException { ((EventSourceInitializer) reconciler) .prepareEventSources(new EventSourceInitializationContext<>( eventSourceManager.getControllerResourceEventSource().getResourceCache(), - configuration.getConfigurationService())) + configurationService())) .forEach(eventSourceManager::registerEventSource); } if (failOnMissingCurrentNS()) { @@ -189,6 +199,23 @@ public void start() throws OperatorException { } } + private ConfigurationService configurationService() { + if (configurationService == null) { + configurationService = configuration.getConfigurationService(); + // make sure we always have a default configuration service + if (configurationService == null) { + // we shouldn't need to register the configuration with the default service + configurationService = new BaseConfigurationService(Version.UNKNOWN) { + @Override + public boolean checkCRDAndValidateLocalModel() { + return false; + } + }; + } + } + return configurationService; + } + private void throwMissingCRDException(String crdName, String specVersion, String controllerName) { throw new MissingCRDException( crdName, diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java index 894cef8298..4973bd18ba 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventProcessor.java @@ -56,8 +56,10 @@ class EventProcessor implements EventHandler, LifecycleAw new ReconciliationDispatcher<>(eventSourceManager.getController()), GenericRetry.fromConfiguration( eventSourceManager.getController().getConfiguration().getRetryConfiguration()), - eventSourceManager.getController().getConfiguration().getConfigurationService() - .getMetrics(), + eventSourceManager.getController().getConfiguration().getConfigurationService() == null + ? Metrics.NOOP + : eventSourceManager.getController().getConfiguration().getConfigurationService() + .getMetrics(), eventSourceManager); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java index 310efaa9dc..75c9d91e7a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcher.java @@ -10,8 +10,16 @@ import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; import io.javaoperatorsdk.operator.api.ObservedGenerationAware; +import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; -import io.javaoperatorsdk.operator.api.reconciler.*; +import io.javaoperatorsdk.operator.api.reconciler.BaseControl; +import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.DefaultContext; +import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; +import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler; +import io.javaoperatorsdk.operator.api.reconciler.Reconciler; +import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; +import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; import io.javaoperatorsdk.operator.processing.Controller; import static io.javaoperatorsdk.operator.processing.KubernetesResourceUtils.getName; @@ -124,7 +132,9 @@ private PostExecutionControl handleReconcile( private R cloneResourceForErrorStatusHandlerIfNeeded(R resource, Context context) { if (isErrorStatusHandlerPresent() || shouldUpdateObservedGenerationAutomatically(resource)) { - return configuration().getConfigurationService().getResourceCloner().clone(resource); + final var configurationService = configuration().getConfigurationService(); + return configurationService != null ? configurationService.getResourceCloner().clone(resource) + : ConfigurationService.DEFAULT_CLONER.clone(resource); } else { return resource; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java index f2710c3bf6..e06d6386a2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSource.java @@ -16,6 +16,7 @@ import io.fabric8.kubernetes.client.informers.ResourceEventHandler; import io.fabric8.kubernetes.client.informers.SharedIndexInformer; import io.javaoperatorsdk.operator.MissingCRDException; +import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; import io.javaoperatorsdk.operator.processing.Controller; import io.javaoperatorsdk.operator.processing.MDCUtils; @@ -45,7 +46,9 @@ public class ControllerResourceEventSource public ControllerResourceEventSource(Controller controller) { super(controller.getConfiguration().getResourceClass()); this.controller = controller; - var cloner = controller.getConfiguration().getConfigurationService().getResourceCloner(); + final var configurationService = controller.getConfiguration().getConfigurationService(); + var cloner = configurationService != null ? configurationService.getResourceCloner() + : ConfigurationService.DEFAULT_CLONER; this.cache = new ControllerResourceCache<>(sharedIndexInformers, cloner); var filters = new ResourceEventFilter[] { diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/OperatorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/OperatorTest.java index 28a19d1081..c234a0b9b2 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/OperatorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/OperatorTest.java @@ -8,13 +8,13 @@ import io.fabric8.kubernetes.client.KubernetesClient; import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; +import io.javaoperatorsdk.operator.api.config.RetryConfiguration; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.Reconciler; import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; import static org.assertj.core.api.AssertionsForClassTypes.assertThat; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; class OperatorTest { @@ -22,7 +22,6 @@ class OperatorTest { private final KubernetesClient kubernetesClient = mock(KubernetesClient.class); private final ConfigurationService configurationService = mock(ConfigurationService.class); private final ControllerConfiguration configuration = mock(ControllerConfiguration.class); - private final Operator operator = new Operator(kubernetesClient, configurationService); private final FooReconciler fooReconciler = FooReconciler.create(); @@ -33,16 +32,13 @@ public void shouldRegisterReconcilerToController() { when(configurationService.getConfigurationFor(fooReconciler)).thenReturn(configuration); when(configuration.watchAllNamespaces()).thenReturn(true); when(configuration.getName()).thenReturn("FOO"); - when(configuration.getResourceClass()).thenReturn(FooReconciler.class); + when(configuration.getResourceClass()).thenReturn(FooCustomResource.class); + when(configuration.getRetryConfiguration()).thenReturn(RetryConfiguration.DEFAULT); // when operator.register(fooReconciler); // then - verify(configuration).watchAllNamespaces(); - verify(configuration).getName(); - verify(configuration).getResourceClass(); - assertThat(operator.getControllers().size()).isEqualTo(1); assertThat(operator.getControllers().get(0).getReconciler()).isEqualTo(fooReconciler); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourceManagerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourceManagerTest.java index b3bf230640..e792c7a156 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourceManagerTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourceManagerTest.java @@ -9,9 +9,7 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.OperatorException; -import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; -import io.javaoperatorsdk.operator.api.config.ExecutorServiceManager; import io.javaoperatorsdk.operator.processing.Controller; import io.javaoperatorsdk.operator.processing.event.source.CachingEventSource; import io.javaoperatorsdk.operator.processing.event.source.EventSource; @@ -174,10 +172,7 @@ private EventSourceManager initManager() { final Controller controller = mock(Controller.class); final ControllerConfiguration configuration = mock(ControllerConfiguration.class); when(configuration.getResourceClass()).thenReturn(HasMetadata.class); - when(configuration.getConfigurationService()).thenReturn(mock(ConfigurationService.class)); when(controller.getConfiguration()).thenReturn(configuration); - ExecutorServiceManager.init(configuration.getConfigurationService()); - var manager = new EventSourceManager(controller); - return manager; + return new EventSourceManager(controller); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java index 131da0fa95..479fccb5dd 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ReconciliationDispatcherTest.java @@ -15,8 +15,14 @@ import io.javaoperatorsdk.operator.api.config.Cloner; import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; -import io.javaoperatorsdk.operator.api.monitoring.Metrics; -import io.javaoperatorsdk.operator.api.reconciler.*; +import io.javaoperatorsdk.operator.api.config.RetryConfiguration; +import io.javaoperatorsdk.operator.api.reconciler.Constants; +import io.javaoperatorsdk.operator.api.reconciler.Context; +import io.javaoperatorsdk.operator.api.reconciler.DeleteControl; +import io.javaoperatorsdk.operator.api.reconciler.ErrorStatusHandler; +import io.javaoperatorsdk.operator.api.reconciler.Reconciler; +import io.javaoperatorsdk.operator.api.reconciler.RetryInfo; +import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; import io.javaoperatorsdk.operator.processing.Controller; import io.javaoperatorsdk.operator.processing.event.ReconciliationDispatcher.CustomResourceFacade; import io.javaoperatorsdk.operator.sample.observedgeneration.ObservedGenCustomResource; @@ -27,7 +33,14 @@ import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.argThat; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.eq; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; +import static org.mockito.Mockito.withSettings; class ReconciliationDispatcherTest { @@ -37,8 +50,6 @@ class ReconciliationDispatcherTest { private ReconciliationDispatcher reconciliationDispatcher; private final Reconciler reconciler = mock(Reconciler.class, withSettings().extraInterfaces(ErrorStatusHandler.class)); - private final ControllerConfiguration configuration = - mock(ControllerConfiguration.class); private final ConfigurationService configService = mock(ConfigurationService.class); private final CustomResourceFacade customResourceFacade = mock(ReconciliationDispatcher.CustomResourceFacade.class); @@ -47,27 +58,38 @@ class ReconciliationDispatcherTest { void setup() { testCustomResource = TestUtils.testCustomResource(); reconciliationDispatcher = - init(testCustomResource, reconciler, configuration, customResourceFacade); + init(testCustomResource, reconciler, null, customResourceFacade, true); } private ReconciliationDispatcher init(R customResource, Reconciler reconciler, ControllerConfiguration configuration, - CustomResourceFacade customResourceFacade) { - when(configuration.getFinalizer()).thenReturn(DEFAULT_FINALIZER); + CustomResourceFacade customResourceFacade, boolean useFinalizer) { + configuration = configuration == null ? mock(ControllerConfiguration.class) : configuration; + final var finalizer = useFinalizer ? DEFAULT_FINALIZER : Constants.NO_FINALIZER; + when(configuration.getFinalizer()).thenReturn(finalizer); when(configuration.useFinalizer()).thenCallRealMethod(); when(configuration.getName()).thenReturn("EventDispatcherTestController"); - when(configService.getMetrics()).thenReturn(Metrics.NOOP); + when(configuration.getResourceClass()).thenReturn((Class) customResource.getClass()); + when(configuration.getRetryConfiguration()).thenReturn(RetryConfiguration.DEFAULT); when(configuration.getConfigurationService()).thenReturn(configService); + + /* + * We need this for mock reconcilers to properly generate the expected UpdateControl: without + * this, calls such as `when(reconciler.reconcile(eq(testCustomResource), + * any())).thenReturn(UpdateControl.updateStatus(testCustomResource))` will return null because + * equals will fail on the two equal but NOT identical TestCustomResources because equals is not + * implemented on TestCustomResourceSpec or TestCustomResourceStatus + */ when(configService.getResourceCloner()).thenReturn(new Cloner() { @Override + public R clone(R object) { return object; } }); when(reconciler.cleanup(eq(customResource), any())) .thenReturn(DeleteControl.defaultDelete()); - Controller controller = - new Controller<>(reconciler, configuration, null); + Controller controller = new Controller<>(reconciler, configuration, null); return new ReconciliationDispatcher<>(controller, customResourceFacade); } @@ -141,10 +163,11 @@ void callsDeleteIfObjectHasFinalizerAndMarkedForDelete() { @Test void doesNotCallDeleteOnControllerIfMarkedForDeletionWhenNoFinalizerIsConfigured() { - configureToNotUseFinalizer(); + final ReconciliationDispatcher dispatcher = + init(testCustomResource, reconciler, null, customResourceFacade, false); markForDeletion(testCustomResource); - reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); + dispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); verify(reconciler, times(0)).cleanup(eq(testCustomResource), any()); } @@ -158,23 +181,12 @@ void doNotCallDeleteIfMarkedForDeletionWhenFinalizerHasAlreadyBeenRemoved() { verify(reconciler, never()).cleanup(eq(testCustomResource), any()); } - private void configureToNotUseFinalizer() { - ControllerConfiguration configuration = - mock(ControllerConfiguration.class); - when(configuration.getName()).thenReturn("EventDispatcherTestController"); - when(configService.getMetrics()).thenReturn(Metrics.NOOP); - when(configuration.getConfigurationService()).thenReturn(configService); - when(configuration.useFinalizer()).thenReturn(false); - reconciliationDispatcher = - new ReconciliationDispatcher(new Controller(reconciler, configuration, null), - customResourceFacade); - } - @Test void doesNotAddFinalizerIfConfiguredNotTo() { - configureToNotUseFinalizer(); + final ReconciliationDispatcher dispatcher = + init(testCustomResource, reconciler, null, customResourceFacade, false); - reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); + dispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); assertEquals(0, testCustomResource.getMetadata().getFinalizers().size()); } @@ -313,7 +325,7 @@ void setObservedGenerationForStatusIfNeeded() { ControllerConfiguration config = mock(ControllerConfiguration.class); CustomResourceFacade facade = mock(CustomResourceFacade.class); - var dispatcher = init(observedGenResource, reconciler, config, facade); + var dispatcher = init(observedGenResource, reconciler, config, facade, true); when(config.isGenerationAware()).thenReturn(true); when(reconciler.reconcile(any(), any())) @@ -338,7 +350,7 @@ void updatesObservedGenerationOnNoUpdateUpdateControl() { when(reconciler.reconcile(any(), any())) .thenReturn(UpdateControl.noUpdate()); when(facade.updateStatus(observedGenResource)).thenReturn(observedGenResource); - var dispatcher = init(observedGenResource, reconciler, config, facade); + var dispatcher = init(observedGenResource, reconciler, config, facade, true); PostExecutionControl control = dispatcher.handleExecution( executionScopeWithCREvent(observedGenResource)); @@ -359,7 +371,7 @@ void updateObservedGenerationOnCustomResourceUpdate() { .thenReturn(UpdateControl.updateResource(observedGenResource)); when(facade.replaceWithLock(any())).thenReturn(observedGenResource); when(facade.updateStatus(observedGenResource)).thenReturn(observedGenResource); - var dispatcher = init(observedGenResource, reconciler, config, facade); + var dispatcher = init(observedGenResource, reconciler, config, facade, true); PostExecutionControl control = dispatcher.handleExecution( executionScopeWithCREvent(observedGenResource)); diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventFilterTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventFilterTest.java index 913c93d301..f2d6b22909 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventFilterTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventFilterTest.java @@ -12,7 +12,6 @@ import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; import io.javaoperatorsdk.operator.TestUtils; -import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.ControllerConfiguration; import io.javaoperatorsdk.operator.api.config.DefaultControllerConfiguration; import io.javaoperatorsdk.operator.processing.Controller; @@ -28,7 +27,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; class ResourceEventFilterTest { public static final String FINALIZER = "finalizer"; @@ -106,8 +104,6 @@ public void eventFilteredByCustomPredicateAndGenerationAware() { @Test public void observedGenerationFiltering() { var config = new ObservedGenControllerConfig(FINALIZER, true, null); - when(config.getConfigurationService().getResourceCloner()) - .thenReturn(ConfigurationService.DEFAULT_CLONER); var eventSource = init(new ObservedGenController(config)); @@ -135,9 +131,6 @@ public void eventNotFilteredByCustomPredicateIfFinalizerIsRequired() { oldResource.getStatus().getConfigMapStatus(), newResource.getStatus().getConfigMapStatus())); - when(config.getConfigurationService().getResourceCloner()) - .thenReturn(ConfigurationService.DEFAULT_CLONER); - final var eventSource = init(new TestController(config)); TestCustomResource cr = TestUtils.testCustomResource(); @@ -184,10 +177,7 @@ public ControllerConfig(String finalizer, boolean generationAware, null, eventFilter, customResourceClass, - mock(ConfigurationService.class)); - - when(getConfigurationService().getResourceCloner()) - .thenReturn(ConfigurationService.DEFAULT_CLONER); + null); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java index 331daabf36..70b208a194 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerResourceEventSourceTest.java @@ -10,9 +10,7 @@ import io.fabric8.kubernetes.client.dsl.MixedOperation; import io.fabric8.kubernetes.client.dsl.Resource; import io.javaoperatorsdk.operator.TestUtils; -import io.javaoperatorsdk.operator.api.config.ConfigurationService; import io.javaoperatorsdk.operator.api.config.DefaultControllerConfiguration; -import io.javaoperatorsdk.operator.api.monitoring.Metrics; import io.javaoperatorsdk.operator.processing.Controller; import io.javaoperatorsdk.operator.processing.event.EventHandler; import io.javaoperatorsdk.operator.processing.event.EventSourceManager; @@ -25,7 +23,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; class ControllerResourceEventSourceTest extends AbstractEventSourceTest, EventHandler> { @@ -173,11 +170,7 @@ public TestConfiguration(boolean generationAware) { null, null, TestCustomResource.class, - mock(ConfigurationService.class)); - when(getConfigurationService().getResourceCloner()) - .thenReturn(ConfigurationService.DEFAULT_CLONER); - when(getConfigurationService().getMetrics()) - .thenReturn(Metrics.NOOP); + null); } } }