From 4c5d67d7c720c4de7eb41c41d3e9e33fea65d107 Mon Sep 17 00:00:00 2001 From: xstefank Date: Wed, 26 Feb 2025 11:19:39 +0100 Subject: [PATCH] fix: spotless plugin (palantir with google style) Signed-off-by: xstefank --- .../boostrapper/Bootstrapper.java | 61 +++-- .../boostrapper/BootstrapperMojo.java | 6 +- .../cache/CaffeineBoundedItemStores.java | 9 +- .../source/cache/BoundedCacheTestBase.java | 9 +- .../CaffeineBoundedCacheClusterScopeIT.java | 24 +- .../CaffeineBoundedCacheNamespacedIT.java | 15 +- .../cache/sample/AbstractTestReconciler.java | 28 +-- ...edCacheClusterScopeTestCustomResource.java | 3 +- ...oundedCacheClusterScopeTestReconciler.java | 4 +- .../BoundedCacheTestCustomResource.java | 3 +- .../BoundedCacheTestStatus.java | 3 +- .../micrometer/MicrometerMetrics.java | 72 +++--- .../AbstractMicrometerMetricsTestFixture.java | 18 +- .../DelayedMetricsCleaningOnDeleteIT.java | 4 +- .../operator/AggregatedOperatorException.java | 7 +- .../operator/BuilderUtils.java | 9 +- .../operator/ControllerManager.java | 37 +-- .../operator/CustomResourceUtils.java | 30 ++- .../operator/LeaderElectionManager.java | 50 ++-- .../io/javaoperatorsdk/operator/Operator.java | 35 ++- .../operator/ReconcilerUtils.java | 35 +-- .../operator/RegisteredController.java | 1 - .../javaoperatorsdk/operator/RuntimeInfo.java | 16 +- .../config/AbstractConfigurationService.java | 24 +- .../api/config/BaseConfigurationService.java | 93 ++++--- .../operator/api/config/Cloner.java | 1 - .../api/config/ConfigurationService.java | 21 +- .../config/ConfigurationServiceOverrider.java | 65 ++--- .../ControllerConfigurationOverrider.java | 24 +- .../config/DefaultResourceClassResolver.java | 4 +- .../api/config/ExecutorServiceManager.java | 76 +++--- .../operator/api/config/Informable.java | 1 - .../config/LeaderElectionConfiguration.java | 15 +- .../LeaderElectionConfigurationBuilder.java | 11 +- .../api/config/NamespaceChangeable.java | 1 - .../ResolvedControllerConfiguration.java | 71 ++++-- .../api/config/ResourceClassResolver.java | 1 - .../operator/api/config/Utils.java | 83 +++--- .../dependent/ConfigurationConverter.java | 4 +- ...ependentResourceConfigurationResolver.java | 36 +-- .../dependent/DependentResourceSpec.java | 18 +- .../api/config/informer/Informer.java | 3 +- .../informer/InformerConfiguration.java | 101 ++++---- .../InformerEventSourceConfiguration.java | 47 ++-- .../operator/api/monitoring/Metrics.java | 15 +- .../operator/api/reconciler/Cleaner.java | 1 - .../operator/api/reconciler/Context.java | 1 - .../reconciler/ControllerConfiguration.java | 4 +- .../api/reconciler/DefaultContext.java | 6 +- .../api/reconciler/EventSourceContext.java | 3 +- .../api/reconciler/EventSourceUtils.java | 9 +- .../operator/api/reconciler/Ignore.java | 4 +- .../reconciler/MaxReconciliationInterval.java | 1 - .../operator/api/reconciler/Reconciler.java | 5 +- .../api/reconciler/UpdateControl.java | 4 +- .../operator/api/reconciler/Workflow.java | 1 - .../dependent/DependentResource.java | 2 - .../dependent/DependentResourceFactory.java | 11 +- .../dependent/EventSourceReferencer.java | 1 - .../dependent/GarbageCollected.java | 3 +- .../api/reconciler/dependent/NameSetter.java | 1 - .../reconciler/dependent/ReconcileResult.java | 15 +- .../managed/ConfiguredDependentResource.java | 1 - ...edWorkflowAndDependentResourceContext.java | 20 +- .../ManagedDependentResourceException.java | 4 +- ...edWorkflowAndDependentResourceContext.java | 1 - .../operator/health/ControllerHealthInfo.java | 16 +- ...merWrappingEventSourceHealthIndicator.java | 3 +- .../operator/health/Status.java | 5 +- .../operator/processing/Controller.java | 213 ++++++++-------- .../operator/processing/GroupVersionKind.java | 20 +- .../operator/processing/LoggingUtils.java | 1 - .../operator/processing/MDCUtils.java | 70 +++--- .../dependent/AbstractDependentResource.java | 16 +- ...actEventSourceHolderDependentResource.java | 12 +- .../AbstractExternalDependentResource.java | 24 +- .../BulkDependentResourceReconciler.java | 16 +- .../dependent/CRUDBulkDependentResource.java | 6 +- .../DependentResourceWithExplicitState.java | 1 - .../processing/dependent/Updater.java | 1 - .../PerResourcePollingDependentResource.java | 8 +- .../external/PollingDependentResource.java | 8 +- .../kubernetes/BooleanWithUndefined.java | 4 +- .../CRUDKubernetesDependentResource.java | 3 +- .../CRUDNoGCKubernetesDependentResource.java | 3 +- .../GenericKubernetesDependentResource.java | 8 +- .../GenericKubernetesResourceMatcher.java | 66 ++--- .../kubernetes/GenericResourceUpdater.java | 1 - .../kubernetes/GroupVersionKindPlural.java | 14 +- .../kubernetes/KubernetesDependent.java | 6 +- .../KubernetesDependentConverter.java | 22 +- .../KubernetesDependentResource.java | 87 ++++--- .../KubernetesDependentResourceConfig.java | 2 - ...ernetesDependentResourceConfigBuilder.java | 4 +- .../kubernetes/ResourceComparators.java | 10 +- .../ResourceRequirementsSanitizer.java | 82 ++++-- .../kubernetes/ResourceUpdaterMatcher.java | 1 - ...BasedGenericKubernetesResourceMatcher.java | 107 +++++--- .../workflow/AbstractWorkflowExecutor.java | 60 +++-- .../workflow/BaseWorkflowResult.java | 54 ++-- .../CRDPresentActivationCondition.java | 17 +- .../dependent/workflow/Condition.java | 5 +- .../dependent/workflow/ConditionWithType.java | 7 +- .../workflow/DefaultManagedWorkflow.java | 52 ++-- .../dependent/workflow/DefaultWorkflow.java | 13 +- .../DefaultWorkflowReconcileResult.java | 5 +- .../workflow/DependentResourceNode.java | 21 +- .../dependent/workflow/DetailedCondition.java | 14 +- .../KubernetesResourceDeletedCondition.java | 6 +- .../workflow/ManagedWorkflowSupport.java | 8 +- .../dependent/workflow/NodeExecutor.java | 3 +- .../dependent/workflow/WorkflowBuilder.java | 4 +- .../workflow/WorkflowCleanupExecutor.java | 22 +- .../workflow/WorkflowReconcileExecutor.java | 67 +++-- .../workflow/WorkflowReconcileResult.java | 4 +- .../dependent/workflow/WorkflowResult.java | 13 +- .../operator/processing/event/Event.java | 10 +- .../processing/event/EventHandler.java | 1 - .../processing/event/EventProcessor.java | 98 ++++---- .../processing/event/EventSourceManager.java | 74 +++--- .../event/EventSourceRetriever.java | 1 - .../processing/event/EventSources.java | 22 +- .../event/PostExecutionControl.java | 3 +- .../event/ReconciliationDispatcher.java | 187 ++++++++------ .../operator/processing/event/ResourceID.java | 31 +-- .../processing/event/ResourceState.java | 16 +- .../event/ResourceStateManager.java | 1 - .../event/rate/LinearRateLimiter.java | 8 +- .../processing/event/rate/RateLimiter.java | 3 +- .../event/source/AbstractEventSource.java | 8 +- .../event/source/CacheKeyMapper.java | 1 - .../processing/event/source/EventSource.java | 4 +- .../source/EventSourceStartPriority.java | 5 +- .../ExternalResourceCachingEventSource.java | 64 +++-- .../event/source/ResourceEventAware.java | 1 - .../event/source/cache/BoundedCache.java | 1 - .../event/source/cache/BoundedItemStore.java | 18 +- .../cache/KubernetesResourceFetcher.java | 15 +- .../event/source/cache/ResourceFetcher.java | 1 - .../controller/ControllerEventSource.java | 26 +- .../controller/InternalEventFilters.java | 11 +- .../source/controller/ResourceAction.java | 4 +- .../source/controller/ResourceEvent.java | 19 +- .../event/source/filter/OnDeleteFilter.java | 1 - .../event/source/filter/OnUpdateFilter.java | 9 +- .../inbound/CachingInboundEventSource.java | 6 +- .../DefaultPrimaryToSecondaryIndex.java | 35 ++- .../source/informer/InformerEventSource.java | 115 +++++---- .../source/informer/InformerManager.java | 63 ++--- .../source/informer/InformerWrapper.java | 40 +-- .../informer/ManagedInformerEventSource.java | 38 +-- .../event/source/informer/Mappers.java | 55 ++-- .../informer/NOOPPrimaryToSecondaryIndex.java | 3 +- .../informer/TemporaryResourceCache.java | 28 ++- .../informer/TransformingItemStore.java | 4 +- .../PerResourcePollingConfiguration.java | 44 ++-- ...erResourcePollingConfigurationBuilder.java | 9 +- .../PerResourcePollingEventSource.java | 17 +- .../source/polling/PollingConfiguration.java | 16 +- .../polling/PollingConfigurationBuilder.java | 4 +- .../source/polling/PollingEventSource.java | 2 - .../event/source/timer/TimerEventSource.java | 3 +- .../retry/GenericRetryExecution.java | 6 +- .../processing/retry/GradualRetry.java | 4 +- .../operator/processing/retry/Retry.java | 1 - .../operator/ControllerManagerTest.java | 15 +- .../operator/LeaderElectionManagerTest.java | 7 +- .../operator/MockKubernetesClient.java | 33 +-- .../operator/OperatorTest.java | 7 +- .../operator/ReconcilerUtilsTest.java | 51 ++-- .../javaoperatorsdk/operator/TestUtils.java | 14 +- .../operator/api/DeleteControlTest.java | 5 +- .../ConfigurationServiceOverriderTest.java | 24 +- .../ControllerConfigurationOverriderTest.java | 97 +++---- .../api/config/InformerConfigurationTest.java | 45 ++-- .../operator/api/config/UtilsTest.java | 18 +- .../operator/api/config/VersionTest.java | 1 - ...dentResourceConfigurationResolverTest.java | 60 +++-- .../api/reconciler/DefaultContextTest.java | 1 - ...ltManagedDependentResourceContextTest.java | 5 +- .../operator/processing/ControllerTest.java | 29 +-- .../processing/GroupVersionKindTest.java | 9 +- .../AbstractDependentResourceTest.java | 45 ++-- .../dependent/EmptyTestDependentResource.java | 4 +- .../GenericKubernetesResourceMatcherTest.java | 36 +-- .../GenericResourceUpdaterTest.java | 23 +- .../ResourceRequirementsSanitizerTest.java | 152 ++++++----- ...dGenericKubernetesResourceMatcherTest.java | 134 +++++----- .../AbstractWorkflowExecutorTest.java | 13 +- .../workflow/BaseWorkflowResultTest.java | 16 +- .../CRDPresentActivationConditionTest.java | 32 ++- .../dependent/workflow/ExecutionAssert.java | 12 +- .../workflow/ManagedWorkflowSupportTest.java | 73 +++--- .../workflow/ManagedWorkflowTest.java | 23 +- .../workflow/ManagedWorkflowTestUtils.java | 13 +- .../workflow/WorkflowBuilderTest.java | 1 - .../workflow/WorkflowCleanupExecutorTest.java | 110 ++++---- .../WorkflowReconcileExecutorTest.java | 238 +++++++++++------- .../dependent/workflow/WorkflowTest.java | 44 ++-- .../processing/event/EventProcessorTest.java | 165 ++++++------ .../event/EventSourceManagerTest.java | 23 +- .../processing/event/EventSourcesTest.java | 57 ++--- .../event/ReconciliationDispatcherTest.java | 192 +++++++------- .../event/ResourceStateManagerTest.java | 2 - .../event/rate/LinearRateLimiterTest.java | 1 - .../source/AbstractEventSourceTestBase.java | 5 +- ...xternalResourceCachingEventSourceTest.java | 6 +- .../event/source/SampleExternalResource.java | 6 +- .../source/cache/BoundedItemStoreTest.java | 32 +-- .../cache/KubernetesResourceFetcherTest.java | 4 +- .../controller/ControllerEventSourceTest.java | 43 ++-- .../controller/InternalEventFiltersTest.java | 32 ++- .../CachingInboundEventSourceTest.java | 38 +-- .../informer/InformerEventSourceTest.java | 33 ++- .../event/source/informer/MappersTest.java | 5 +- .../informer/PrimaryToSecondaryIndexTest.java | 9 +- .../informer/TemporaryResourceCacheTest.java | 23 +- .../informer/TransformingItemStoreTest.java | 6 +- .../PerResourcePollingEventSourceTest.java | 95 +++---- .../polling/PollingEventSourceTest.java | 24 +- .../source/timer/TimerEventSourceTest.java | 9 +- .../retry/GenericRetryExecutionTest.java | 14 +- .../ObservedGenCustomResource.java | 3 +- .../observedgeneration/ObservedGenSpec.java | 4 +- .../observedgeneration/ObservedGenStatus.java | 4 +- .../simple/NamespacedTestCustomResource.java | 3 +- .../sample/simple/TestCustomReconciler.java | 43 ++-- .../simple/TestCustomReconcilerOtherV1.java | 4 +- .../sample/simple/TestCustomResource.java | 1 - .../simple/TestCustomResourceOtherV1.java | 4 +- .../sample/simple/TestCustomResourceSpec.java | 5 +- .../junit/AbstractOperatorExtension.java | 56 ++--- .../ClusterDeployedOperatorExtension.java | 27 +- .../junit/DefaultNamespaceNameSupplier.java | 23 +- .../DefaultPerClassNamespaceNameSupplier.java | 6 +- .../operator/junit/InClusterCurl.java | 37 +-- .../junit/LocallyRunOperatorExtension.java | 29 ++- .../DefaultNamespaceNameSupplierTest.java | 12 +- ...aultPerClassNamespaceNameSupplierTest.java | 1 - .../junit/NamespaceNamingTestUtils.java | 17 +- .../runtime/AccumulativeMappingWriter.java | 23 +- .../config/runtime/ClassMappingProvider.java | 36 ++- ...ollerConfigurationAnnotationProcessor.java | 26 +- .../runtime/RuntimeControllerMetadata.java | 15 +- .../config/runtime/TypeParameterResolver.java | 28 +-- .../operator/CRDMappingInTestExtensionIT.java | 38 +-- .../operator/IntegrationTestConstants.java | 1 - .../operator/baseapi/ConcurrencyIT.java | 70 +++--- .../baseapi/InformerErrorHandlerStartIT.java | 9 +- .../baseapi/LeaderElectionPermissionIT.java | 28 +-- .../BuiltInResourceCleanerIT.java | 24 +- .../BuiltInResourceCleanerReconciler.java | 7 +- .../changenamespace/ChangeNamespaceIT.java | 43 ++-- .../ChangeNamespaceTestCustomResource.java | 5 +- .../ChangeNamespaceTestReconciler.java | 18 +- .../CleanerForReconcilerCustomResource.java | 6 +- .../CleanerForReconcilerIT.java | 36 +-- .../CleanerForReconcilerTestReconciler.java | 7 +- .../CleanupConflictCustomResource.java | 5 +- .../cleanupconflict/CleanupConflictIT.java | 20 +- .../CleanupConflictReconciler.java | 7 +- .../ClusterScopedCustomResource.java | 5 +- ...ClusterScopedCustomResourceReconciler.java | 12 +- .../ClusterScopedResourceIT.java | 19 +- ...teUpdateEventFilterTestCustomResource.java | 7 +- ...dateEventFilterTestCustomResourceSpec.java | 1 - ...CreateUpdateEventFilterTestReconciler.java | 31 +-- ...pdateInformerEventSourceEventFilterIT.java | 42 ++-- .../PreviousAnnotationDisabledIT.java | 20 +- .../deployment/DeploymentReconciler.java | 11 +- .../KubernetesResourceStatusUpdateIT.java | 14 +- ...EventSourceRegistrationCustomResource.java | 7 +- ...namicGenericEventSourceRegistrationIT.java | 13 +- ...ericEventSourceRegistrationReconciler.java | 28 ++- .../ErrorStatusHandlerIT.java | 42 ++-- .../ErrorStatusHandlerTestCustomResource.java | 3 +- .../ErrorStatusHandlerTestReconciler.java | 12 +- .../operator/baseapi/event/EventSourceIT.java | 21 +- .../EventSourceTestCustomReconciler.java | 3 +- .../event/EventSourceTestCustomResource.java | 3 +- .../EventSourceTestCustomResourceStatus.java | 3 +- .../operator/baseapi/filter/FilterIT.java | 36 ++- .../filter/FilterTestCustomResource.java | 3 +- .../baseapi/filter/FilterTestReconciler.java | 21 +- .../filter/FilterTestResourceStatus.java | 4 +- .../operator/baseapi/filter/UpdateFilter.java | 3 +- ...ernetesResourceHandlingCustomResource.java | 4 +- .../GenericKubernetesResourceHandlingIT.java | 12 +- ...cKubernetesResourceHandlingReconciler.java | 42 ++-- .../baseapi/gracefulstop/GracefulStopIT.java | 36 ++- .../GracefulStopTestCustomResource.java | 4 +- .../GracefulStopTestReconciler.java | 8 +- .../InformerEventSourceIT.java | 16 +- ...formerEventSourceTestCustomReconciler.java | 14 +- ...InformerEventSourceTestCustomResource.java | 8 +- .../InformerRemoteClusterCustomResource.java | 3 +- .../InformerRemoteClusterIT.java | 28 +-- .../InformerRemoteClusterReconciler.java | 48 ++-- .../labelselector/LabelSelectorIT.java | 15 +- .../LabelSelectorTestCustomResource.java | 6 +- .../LabelSelectorTestReconciler.java | 4 +- ...ElectionChangeNamespaceCustomResource.java | 6 +- .../LeaderElectionChangeNamespaceIT.java | 41 ++- ...aderElectionChangeNamespaceReconciler.java | 1 - ...anualObservedGenerationCustomResource.java | 3 +- .../ManualObservedGenerationIT.java | 17 +- .../ManualObservedGenerationReconciler.java | 6 +- .../baseapi/maxinterval/MaxIntervalIT.java | 11 +- .../MaxIntervalTestCustomResource.java | 6 +- .../MaxIntervalTestReconciler.java | 6 +- .../MaxIntervalAfterRetryIT.java | 13 +- ...xIntervalAfterRetryTestCustomResource.java | 6 +- .../MaxIntervalAfterRetryTestReconciler.java | 6 +- ...tipleReconcilerSameTypeCustomResource.java | 4 +- .../MultipleReconcilerSameTypeIT.java | 29 ++- ...MultipleReconcilerSameTypeReconciler1.java | 1 - ...MultipleReconcilerSameTypeReconciler2.java | 1 - ...pleSecondaryEventSourceCustomResource.java | 6 +- .../MultipleSecondaryEventSourceIT.java | 33 +-- ...ultipleSecondaryEventSourceReconciler.java | 35 ++- .../multiversioncrd/MultiVersionCRDIT.java | 100 ++++---- .../MultiVersionCRDTestCustomResource1.java | 9 +- .../MultiVersionCRDTestCustomResource2.java | 8 +- ...ultiVersionCRDTestCustomResourceSpec1.java | 1 - .../MultiVersionCRDTestReconciler1.java | 3 +- .../MultiVersionCRDTestReconciler2.java | 3 +- ...tReconciliationImminentCustomResource.java | 7 +- .../NextReconciliationImminentIT.java | 23 +- .../NextReconciliationImminentReconciler.java | 3 +- ...hResourceAndStatusNoSSACustomResource.java | 3 +- .../PatchResourceAndStatusNoSSAIT.java | 46 ++-- .../PatchResourceAndStatusNoSSAStatus.java | 3 +- .../PatchResourceAndStatusWithSSAIT.java | 1 - ...tchResourceAndStatusWithSSAReconciler.java | 5 +- .../PatchResourceWithSSACustomResource.java | 4 +- .../PatchResourceWithSSAIT.java | 3 - .../PatchResourceWithSSAReconciler.java | 5 +- .../PatchWithSSAITBase.java | 15 +- .../PerResourceEventSourceCustomResource.java | 6 +- .../PerResourcePollingEventSourceIT.java | 12 +- ...ourcePollingEventSourceTestReconciler.java | 22 +- .../AbstractPrimaryIndexerTestReconciler.java | 5 +- .../primaryindexer/PrimaryIndexerIT.java | 25 +- .../PrimaryIndexerTestCustomResource.java | 7 +- ...rimaryIndexerTestCustomResourceStatus.java | 6 +- .../PrimaryIndexerTestReconciler.java | 26 +- .../baseapi/primarytosecondary/Cluster.java | 5 +- .../baseapi/primarytosecondary/Job.java | 5 +- .../primarytosecondary/JobReconciler.java | 42 ++-- .../PrimaryToSecondaryIT.java | 24 +- .../PrimaryToSecondaryMissingIT.java | 10 +- .../ratelimit/RateLimitCustomResource.java | 7 +- .../RateLimitCustomResourceStatus.java | 4 +- .../baseapi/ratelimit/RateLimitIT.java | 24 +- .../ratelimit/RateLimitReconciler.java | 9 +- .../operator/baseapi/retry/RetryIT.java | 35 +-- .../baseapi/retry/RetryMaxAttemptIT.java | 15 +- .../retry/RetryTestCustomReconciler.java | 8 +- .../retry/RetryTestCustomResource.java | 3 +- .../retry/RetryTestCustomResourceStatus.java | 3 +- .../baseapi/simple/ReconcilerExecutorIT.java | 44 ++-- .../baseapi/simple/TestCustomResource.java | 3 +- .../baseapi/simple/TestReconciler.java | 44 ++-- .../StatusPatchLockingCustomResource.java | 8 +- .../StatusPatchLockingReconciler.java | 4 +- .../StatusPatchNotLockingForNonSSAIT.java | 28 +-- .../StatusPatchSSAMigrationIT.java | 29 ++- .../StatusUpdateLockingCustomResource.java | 5 +- .../StatusUpdateLockingIT.java | 25 +- .../StatusUpdateLockingReconciler.java | 1 - .../SubResourceTestCustomReconciler.java | 4 +- .../SubResourceTestCustomResource.java | 3 +- .../SubResourceTestCustomResourceStatus.java | 3 +- .../subresource/SubResourceUpdateIT.java | 37 +-- ...modifiableDependentPartCustomResource.java | 5 +- .../UnmodifiableDependentPartIT.java | 13 +- .../UnmodifiableDependentPartReconciler.java | 1 - .../UnmodifiablePartConfigMapDependent.java | 10 +- ...sInCleanupAndRescheduleCustomResource.java | 7 +- ...tusInCleanupAndRescheduleCustomStatus.java | 1 - .../UpdateStatusInCleanupAndRescheduleIT.java | 19 +- ...tatusInCleanupAndRescheduleReconciler.java | 5 +- .../config/BaseConfigurationServiceTest.java | 167 ++++++------ ...rConfigurationAnnotationProcessorTest.java | 36 ++- .../DefaultConfigurationServiceTest.java | 14 +- .../config/runtime/TestCustomResource.java | 3 +- .../bulkdependent/BulkDependentDeleterIT.java | 6 +- .../bulkdependent/BulkDependentTestBase.java | 47 ++-- .../BulkDependentTestCustomResource.java | 4 +- .../CRUDConfigMapBulkDependentResource.java | 3 +- ...ConfigMapDeleterBulkDependentResource.java | 14 +- .../BulkDependentWithConditionIT.java | 23 +- ...DependentWithReadyConditionReconciler.java | 16 +- .../condition/SampleBulkCondition.java | 3 +- .../external/BulkExternalDependentIT.java | 8 +- .../ExternalBulkDependentResource.java | 51 ++-- .../external/ExternalResource.java | 6 +- .../managed/ManagedBulkDependentIT.java | 7 +- .../ManagedBulkDependentReconciler.java | 7 +- .../managed/ManagedDeleterBulkReconciler.java | 3 +- .../readonly/ReadOnlyBulkDependentIT.java | 12 +- .../ReadOnlyBulkDependentResource.java | 14 +- .../ReadOnlyBulkReadyPostCondition.java | 9 +- .../readonly/ReadOnlyBulkReconciler.java | 17 +- .../standalone/StandaloneBulkDependentIT.java | 6 +- .../StandaloneBulkDependentReconciler.java | 3 +- ...anerForManagedDependentCustomResource.java | 6 +- ...nerForManagedDependentResourcesOnlyIT.java | 24 +- ...anerForManagedDependentTestReconciler.java | 4 +- .../ConfigMapDependentResource.java | 14 +- .../ConfigMapDependentResource.java | 8 +- ...xistingDependentWithSSACustomResource.java | 4 +- ...teOnlyIfNotExistingDependentWithSSAIT.java | 18 +- ...NotExistingDependentWithSSAReconciler.java | 6 +- .../DependentAnnotationSecondaryMapperIT.java | 19 +- ...ntAnnotationSecondaryMapperReconciler.java | 18 +- ...dentAnnotationSecondaryMapperResource.java | 6 +- ...stomMappingConfigMapDependentResource.java | 22 +- .../DependentCustomMappingAnnotationIT.java | 15 +- .../DependentCustomMappingCustomResource.java | 5 +- .../DependentCustomMappingReconciler.java | 5 +- .../ConfigMapDependentResource.java | 8 +- ...ndentDifferentNamespaceCustomResource.java | 4 +- .../DependentDifferentNamespaceIT.java | 19 +- ...DependentDifferentNamespaceReconciler.java | 11 +- .../dependentfilter/DependentFilterIT.java | 23 +- .../DependentFilterTestCustomResource.java | 3 +- .../FilteredDependentConfigMap.java | 3 +- .../dependentfilter/UpdateFilter.java | 3 +- .../ConfigMapDependentResource.java | 8 +- ...entOperationEventFilterCustomResource.java | 3 +- ...entFilterCustomResourceTestReconciler.java | 11 +- .../DependentOperationEventFilterIT.java | 38 +-- .../ConfigMapDependentResource.java | 3 +- ...pendentReInitializationCustomResource.java | 7 +- .../DependentReInitializationIT.java | 9 +- .../DependentReInitializationReconciler.java | 8 +- .../DependentResourceCrossRefIT.java | 30 +-- .../DependentResourceCrossRefReconciler.java | 38 +-- .../DependentResourceCrossRefResource.java | 6 +- .../DependentSSACustomResource.java | 6 +- .../dependentssa/DependentSSAMatchingIT.java | 30 +-- .../dependentssa/DependentSSAMigrationIT.java | 37 +-- .../dependentssa/DependentSSAReconciler.java | 6 +- .../dependentssa/SSAConfigMapDependent.java | 12 +- .../ExternalStateCustomResource.java | 6 +- .../ExternalStateDependentIT.java | 6 +- .../ExternalStateDependentReconciler.java | 7 +- .../externalstate/ExternalStateIT.java | 14 +- .../ExternalStateReconciler.java | 73 +++--- .../externalstate/ExternalStateTestBase.java | 9 +- .../ExternalWithStateDependentResource.java | 54 ++-- ...ulkDependentResourceExternalWithState.java | 49 ++-- ...ernalStateBulkDependentCustomResource.java | 4 +- .../ExternalStateBulkDependentReconciler.java | 8 +- .../ExternalStateBulkIT.java | 42 ++-- .../GenericKubernetesDependentTestBase.java | 4 +- .../ConfigMapGenericKubernetesDependent.java | 17 +- ...ernetesDependentManagedCustomResource.java | 4 +- .../GenericKubernetesDependentManagedIT.java | 12 +- ...cKubernetesDependentManagedReconciler.java | 1 - .../ConfigMapGenericKubernetesDependent.java | 18 +- ...etesDependentStandaloneCustomResource.java | 4 +- ...enericKubernetesDependentStandaloneIT.java | 11 +- ...bernetesDependentStandaloneReconciler.java | 5 +- .../ConfigMapDependentResource.java | 4 +- .../InformerRelatedBehaviorITS.java | 113 +++++---- ...rmerRelatedBehaviorTestCustomResource.java | 6 +- ...InformerRelatedBehaviorTestReconciler.java | 9 +- ...ntGarbageCollectionTestCustomResource.java | 6 +- ...endentGarbageCollectionTestReconciler.java | 14 +- ...ubernetesDependentGarbageCollectionIT.java | 23 +- .../MultipleDependentResourceConfigMap.java | 3 +- ...ltipleDependentResourceCustomResource.java | 4 +- .../MultipleDependentResourceIT.java | 11 +- .../MultipleDependentResourceReconciler.java | 8 +- .../MultipleDependentResourceConfigMap.java | 7 +- ...ResourceCustomResourceNoDiscriminator.java | 3 +- ...ntResourceWithDiscriminatorReconciler.java | 18 +- ...ependentResourceWithNoDiscriminatorIT.java | 28 +-- ...tipleDependentSameTypeMultiInformerIT.java | 30 ++- ...endentResourceMultiInformerConfigMap1.java | 10 +- ...endentResourceMultiInformerConfigMap2.java | 7 +- ...ntResourceMultiInformerCustomResource.java | 4 +- ...endentResourceMultiInformerReconciler.java | 18 +- ...gedDependentNoDiscriminatorConfigMap1.java | 14 +- ...gedDependentNoDiscriminatorConfigMap2.java | 7 +- ...ependentNoDiscriminatorCustomResource.java | 4 +- ...ipleManagedDependentNoDiscriminatorIT.java | 30 +-- ...dentSameTypeNoDiscriminatorReconciler.java | 27 +- ...pleManagedDependentResourceConfigMap1.java | 10 +- ...pleManagedDependentResourceConfigMap2.java | 10 +- ...anagedDependentResourceCustomResource.java | 5 +- ...pleManagedDependentResourceReconciler.java | 22 +- .../MultipleManagedDependentSameTypeIT.java | 31 ++- .../AbstractExternalDependentResource.java | 28 ++- ...ternalDependentResourceCustomResource.java | 5 +- ...edExternalDependentResourceReconciler.java | 27 +- ...pleManagedExternalDependentSameTypeIT.java | 12 +- .../MultiOwnerDependentTriggeringIT.java | 19 +- .../MultipleOwnerDependentConfigMap.java | 13 +- .../MultipleOwnerDependentCustomResource.java | 5 +- .../MultipleOwnerDependentReconciler.java | 9 +- ...DependentPrimaryIndexerTestReconciler.java | 29 ++- .../ConfigMapDependent.java | 7 +- .../ConfigMapReconcilePrecondition.java | 10 +- ...aryToSecondaryDependentCustomResource.java | 4 +- .../PrimaryToSecondaryDependentIT.java | 14 +- ...PrimaryToSecondaryDependentReconciler.java | 58 +++-- .../SecretDependent.java | 8 +- .../dependent/readonly/ConfigMapReader.java | 3 +- .../restart/ConfigMapDependentResource.java | 5 +- .../dependent/restart/OperatorRestartIT.java | 12 +- .../restart/RestartTestCustomResource.java | 5 +- .../restart/RestartTestReconciler.java | 4 +- .../ServiceDependentResource.java | 21 +- .../ServiceStrictMatcherIT.java | 25 +- ...erviceStrictMatcherTestCustomResource.java | 5 +- .../ServiceStrictMatcherTestReconciler.java | 1 - .../ServiceAccountDependentResource.java | 9 +- .../SpecialResourceCustomResource.java | 3 +- .../SpecialResourceTestReconciler.java | 17 +- .../SpecialResourcesDependentIT.java | 12 +- .../SSALegacyMatcherCustomResource.java | 7 +- .../SSALegacyMatcherReconciler.java | 6 +- .../SSAWithLegacyMatcherIT.java | 11 +- .../ServiceDependentResource.java | 25 +- .../StandaloneDependentResourceIT.java | 40 ++- ...StandaloneDependentTestCustomResource.java | 5 +- .../StandaloneDependentTestReconciler.java | 20 +- ...efulSetDesiredSanitizerCustomResource.java | 5 +- ...lSetDesiredSanitizerDependentResource.java | 15 +- .../StatefulSetDesiredSanitizerIT.java | 18 +- ...StatefulSetDesiredSanitizerReconciler.java | 3 +- .../support/ExternalIDGenServiceMock.java | 3 +- .../operator/support/ExternalResource.java | 19 +- .../operator/support/TestUtils.java | 15 +- .../ComplexWorkflowCustomResource.java | 3 +- .../complexdependent/ComplexWorkflowIT.java | 45 ++-- .../ComplexWorkflowReconciler.java | 57 +++-- .../ComplexWorkflowStatus.java | 1 - .../dependent/BaseService.java | 8 +- .../dependent/BaseStatefulSet.java | 8 +- .../dependent/FirstService.java | 1 - .../dependent/FirstStatefulSet.java | 1 - .../dependent/SecondStatefulSet.java | 1 - .../dependent/StatefulSetReadyCondition.java | 10 +- .../CRDPresentActivationConditionIT.java | 32 +-- .../CRDPresentActivationCustomResource.java | 8 +- .../CRDPresentActivationDependent.java | 4 +- ...sentActivationDependentCustomResource.java | 5 +- .../CRDPresentActivationReconciler.java | 15 +- .../ConfigMapDependentResource.java | 4 +- .../GetNonActiveSecondaryCustomResource.java | 8 +- .../RouteDependentResource.java | 3 +- .../WorkflowActivationConditionIT.java | 18 +- ...WorkflowActivationConditionReconciler.java | 12 +- .../ConfigMapDependent.java | 8 +- ...tDefaultDeleteConditionCustomResource.java | 6 +- ...ndentDefaultDeleteConditionReconciler.java | 14 +- .../ManagedDependentDeleteConditionIT.java | 14 +- .../SecretDependent.java | 11 +- .../ConfigMapDependentResource1.java | 7 +- .../ConfigMapDependentResource2.java | 7 +- ...ipleDependentActivationCustomResource.java | 6 +- ...MultipleDependentActivationReconciler.java | 17 +- .../MultipleDependentWithActivationIT.java | 26 +- .../SecretDependentResource.java | 7 +- .../ConfigMapDependentResource1.java | 11 +- .../ConfigMapDependentResource2.java | 11 +- ...OrderedManagedDependentCustomResource.java | 6 +- .../OrderedManagedDependentIT.java | 16 +- ...OrderedManagedDependentTestReconciler.java | 16 +- .../ConfigMapDependentResource.java | 7 +- ...rkflowActivationCleanupCustomResource.java | 6 +- .../WorkflowActivationCleanupIT.java | 17 +- .../WorkflowActivationCleanupReconciler.java | 15 +- .../ConfigMapDependentResource.java | 3 +- .../RouteDependentResource.java | 3 +- ...flowActivationConditionCustomResource.java | 6 +- .../WorkflowActivationConditionIT.java | 12 +- ...WorkflowActivationConditionReconciler.java | 12 +- .../ConfigMapDeletePostCondition.java | 3 +- .../ConfigMapDependentResource.java | 12 +- .../ConfigMapReconcileCondition.java | 3 +- .../DeploymentDependentResource.java | 15 +- .../DeploymentReadyCondition.java | 3 +- .../WorkflowAllFeatureCustomResource.java | 6 +- .../WorkflowAllFeatureIT.java | 46 ++-- .../WorkflowAllFeatureReconciler.java | 41 +-- .../ConfigMapDependent.java | 7 +- ...WorkflowExplicitCleanupCustomResource.java | 6 +- .../WorkflowExplicitCleanupIT.java | 12 +- .../WorkflowExplicitCleanupReconciler.java | 8 +- .../ConfigMapDependent.java | 8 +- ...kflowExplicitInvocationCustomResource.java | 4 +- .../WorkflowExplicitInvocationIT.java | 12 +- .../WorkflowExplicitInvocationReconciler.java | 4 +- .../ConfigMapDependentResource.java | 7 +- .../SecretDependentResource.java | 7 +- ...kflowMultipleActivationCustomResource.java | 6 +- .../WorkflowMultipleActivationIT.java | 24 +- .../WorkflowMultipleActivationReconciler.java | 12 +- .../ConfigMapDependent.java | 9 +- ...wExceptionsInReconcilerCustomResource.java | 6 +- ...kflowExceptionsInReconcilerReconciler.java | 23 +- .../WorkflowSilentExceptionHandlingIT.java | 12 +- pom.xml | 77 +++--- ...rollerNamespaceDeletionCustomResource.java | 4 +- .../ControllerNamespaceDeletionOperator.java | 12 +- ...ControllerNamespaceDeletionReconciler.java | 9 +- .../ControllerNamespaceDeletionSpec.java | 1 - .../ControllerNamespaceDeletionStatus.java | 1 - .../ControllerNamespaceDeletionE2E.java | 53 ++-- .../sample/LeaderElectionTestOperator.java | 7 +- .../sample/LeaderElectionTestReconciler.java | 7 +- .../operator/sample/LeaderElectionE2E.java | 86 ++++--- .../operator/sample/MySQLDbConfig.java | 9 +- .../operator/sample/MySQLSchema.java | 3 +- .../operator/sample/MySQLSchemaOperator.java | 11 +- .../sample/MySQLSchemaReconciler.java | 51 ++-- .../dependent/ResourcePollerConfig.java | 1 - .../dependent/SchemaDependentResource.java | 51 ++-- .../dependent/SecretDependentResource.java | 9 +- .../operator/sample/schema/Schema.java | 11 +- .../operator/sample/schema/SchemaService.java | 34 +-- .../sample/MySQLSchemaOperatorE2E.java | 102 ++++---- .../sample/DeploymentDependentResource.java | 16 +- .../sample/ServiceDependentResource.java | 5 +- .../operator/sample/TomcatReconciler.java | 30 ++- .../operator/sample/WebappReconciler.java | 91 +++---- .../operator/sample/TomcatOperatorE2E.java | 32 +-- .../operator/sample/Utils.java | 12 +- .../WebPageDependentsWorkflowReconciler.java | 25 +- .../WebPageManagedDependentsReconciler.java | 30 ++- .../operator/sample/WebPageOperator.java | 4 +- .../operator/sample/WebPageReconciler.java | 159 +++++++----- ...WebPageStandaloneDependentsReconciler.java | 12 +- .../sample/customresource/WebPage.java | 8 +- .../sample/customresource/WebPageSpec.java | 4 +- .../sample/customresource/WebPageStatus.java | 9 +- .../ConfigMapDependentResource.java | 11 +- .../DeploymentDependentResource.java | 7 +- .../ExposedIngressCondition.java | 6 +- .../IngressDependentResource.java | 1 - .../ServiceDependentResource.java | 6 +- .../sample/WebPageOperatorAbstractTest.java | 60 ++--- .../operator/sample/WebPageOperatorE2E.java | 47 ++-- ...eOperatorManagedDependentResourcesE2E.java | 48 ++-- ...eratorStandaloneDependentResourcesE2E.java | 20 +- 650 files changed, 6477 insertions(+), 6159 deletions(-) diff --git a/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/Bootstrapper.java b/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/Bootstrapper.java index ed12e7619d..fe7613b6c1 100644 --- a/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/Bootstrapper.java +++ b/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/Bootstrapper.java @@ -27,8 +27,7 @@ public class Bootstrapper { private static final Map TOP_LEVEL_STATIC_FILES = Map.of("_.gitignore", ".gitignore", "README.md", "README.md"); private static final List JAVA_FILES = - List.of("CustomResource.java", "Reconciler.java", - "Spec.java", "Status.java"); + List.of("CustomResource.java", "Reconciler.java", "Spec.java", "Status.java"); public void create(File targetDir, String groupId, String artifactId) { try { @@ -61,19 +60,22 @@ private void addJavaFiles(File projectDir, String groupId, String artifactId) { var targetTestDir = new File(projectDir, "src/test/java/" + packages); FileUtils.forceMkdir(targetDir); var classFileNamePrefix = artifactClassId(artifactId); - JAVA_FILES.forEach(f -> addTemplatedFile(projectDir, f, groupId, artifactId, targetDir, - classFileNamePrefix + f)); + JAVA_FILES.forEach(f -> + addTemplatedFile(projectDir, f, groupId, artifactId, targetDir, classFileNamePrefix + f)); addTemplatedFile(projectDir, "Runner.java", groupId, artifactId, targetDir, null); - addTemplatedFile(projectDir, "ConfigMapDependentResource.java", groupId, artifactId, - targetDir, null); - addTemplatedFile(projectDir, "ReconcilerIntegrationTest.java", groupId, + addTemplatedFile( + projectDir, "ConfigMapDependentResource.java", groupId, artifactId, targetDir, null); + addTemplatedFile( + projectDir, + "ReconcilerIntegrationTest.java", + groupId, artifactId, - targetTestDir, artifactClassId(artifactId) + "ReconcilerIntegrationTest.java"); + targetTestDir, + artifactClassId(artifactId) + "ReconcilerIntegrationTest.java"); } catch (IOException e) { throw new RuntimeException(e); } - } private void addTemplatedFiles(File projectDir, String groupId, String artifactId) { @@ -81,21 +83,34 @@ private void addTemplatedFiles(File projectDir, String groupId, String artifactI addTemplatedFile(projectDir, "k8s/test-resource.yaml", groupId, artifactId); } - private void addTemplatedFile(File projectDir, String fileName, String groupId, - String artifactId) { + private void addTemplatedFile( + File projectDir, String fileName, String groupId, String artifactId) { addTemplatedFile(projectDir, fileName, groupId, artifactId, null, null); } - private void addTemplatedFile(File projectDir, String fileName, String groupId, String artifactId, - File targetDir, String targetFileName) { + private void addTemplatedFile( + File projectDir, + String fileName, + String groupId, + String artifactId, + File targetDir, + String targetFileName) { try { - var values = Map.of("groupId", groupId, "artifactId", artifactId, - "artifactClassId", artifactClassId(artifactId), - "josdkVersion", Versions.JOSDK, - "fabric8Version", Versions.KUBERNETES_CLIENT); + var values = Map.of( + "groupId", + groupId, + "artifactId", + artifactId, + "artifactClassId", + artifactClassId(artifactId), + "josdkVersion", + Versions.JOSDK, + "fabric8Version", + Versions.KUBERNETES_CLIENT); var mustache = mustacheFactory.compile("templates/" + fileName); - var targetFile = new File(targetDir == null ? projectDir : targetDir, + var targetFile = new File( + targetDir == null ? projectDir : targetDir, targetFileName == null ? fileName : targetFileName); FileUtils.forceMkdir(targetFile.getParentFile()); var writer = new FileWriter(targetFile); @@ -114,8 +129,8 @@ private void addStaticFile(File targetDir, String fileName, String targetFileNam addStaticFile(targetDir, fileName, targetFileName, null); } - private void addStaticFile(File targetDir, String fileName, String targetFilename, - String subDir) { + private void addStaticFile( + File targetDir, String fileName, String targetFilename, String subDir) { String sourcePath = subDir == null ? "/static/" : "/static/" + subDir; String path = sourcePath + fileName; try (var is = Bootstrapper.class.getResourceAsStream(path)) { @@ -127,14 +142,12 @@ private void addStaticFile(File targetDir, String fileName, String targetFilenam } catch (IOException e) { throw new RuntimeException("File path: " + path, e); } - } public static String artifactClassId(String artifactId) { var parts = artifactId.split("-"); - return Arrays.stream(parts).map(p -> p.substring(0, 1) - .toUpperCase() + p.substring(1)) + return Arrays.stream(parts) + .map(p -> p.substring(0, 1).toUpperCase() + p.substring(1)) .collect(Collectors.joining("")); } - } diff --git a/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/BootstrapperMojo.java b/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/BootstrapperMojo.java index 0d87a152e2..cb470f7e87 100644 --- a/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/BootstrapperMojo.java +++ b/bootstrapper-maven-plugin/src/main/java/io/javaoperatorsdk/boostrapper/BootstrapperMojo.java @@ -8,8 +8,7 @@ import org.apache.maven.plugins.annotations.Parameter; @Mojo(name = "create", requiresProject = false) -public class BootstrapperMojo - extends AbstractMojo { +public class BootstrapperMojo extends AbstractMojo { @Parameter(defaultValue = "${projectGroupId}") protected String projectGroupId; @@ -17,8 +16,7 @@ public class BootstrapperMojo @Parameter(defaultValue = "${projectArtifactId}") protected String projectArtifactId; - public void execute() - throws MojoExecutionException { + public void execute() throws MojoExecutionException { String userDir = System.getProperty("user.dir"); new Bootstrapper().create(new File(userDir), projectGroupId, projectArtifactId); } diff --git a/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java b/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java index a58d58bd2a..c507e47468 100644 --- a/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java +++ b/caffeine-bounded-cache-support/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedItemStores.java @@ -39,11 +39,9 @@ private CaffeineBoundedItemStores() {} */ @SuppressWarnings("unused") public static BoundedItemStore boundedItemStore( - KubernetesClient client, Class rClass, - Duration accessExpireDuration) { - Cache cache = Caffeine.newBuilder() - .expireAfterAccess(accessExpireDuration) - .build(); + KubernetesClient client, Class rClass, Duration accessExpireDuration) { + Cache cache = + Caffeine.newBuilder().expireAfterAccess(accessExpireDuration).build(); return boundedItemStore(client, rClass, cache); } @@ -51,5 +49,4 @@ public static BoundedItemStore boundedItemStore( KubernetesClient client, Class rClass, Cache cache) { return new BoundedItemStore<>(new CaffeineBoundedCache<>(cache), rClass, client); } - } diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCacheTestBase.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCacheTestBase.java index 21adf81cc0..1eeaca6642 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCacheTestBase.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCacheTestBase.java @@ -17,7 +17,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; -public abstract class BoundedCacheTestBase

> { +public abstract class BoundedCacheTestBase< + P extends CustomResource> { private static final Logger log = LoggerFactory.getLogger(BoundedCacheTestBase.class); @@ -42,7 +43,8 @@ void reconciliationWorksWithLimitedCache() { } private void assertConfigMapsDeleted() { - await().atMost(Duration.ofSeconds(30)) + await() + .atMost(Duration.ofSeconds(30)) .untilAsserted(() -> IntStream.range(0, NUMBER_OF_RESOURCE_TO_TEST).forEach(i -> { var cm = extension().get(ConfigMap.class, RESOURCE_NAME_PREFIX + i); assertThat(cm).isNull(); @@ -89,7 +91,4 @@ private void createTestResources() { abstract Class

customResourceClass(); abstract LocallyRunOperatorExtension extension(); - - - } diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheClusterScopeIT.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheClusterScopeIT.java index 252b20f4a4..ca45dfdc2e 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheClusterScopeIT.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheClusterScopeIT.java @@ -17,23 +17,21 @@ public class CaffeineBoundedCacheClusterScopeIT extends BoundedCacheTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new BoundedCacheClusterScopeTestReconciler(), o -> { - o.withItemStore(boundedItemStore( - new KubernetesClientBuilder().build(), - BoundedCacheClusterScopeTestCustomResource.class, - Duration.ofMinutes(1), - 1)); - }) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new BoundedCacheClusterScopeTestReconciler(), o -> { + o.withItemStore(boundedItemStore( + new KubernetesClientBuilder().build(), + BoundedCacheClusterScopeTestCustomResource.class, + Duration.ofMinutes(1), + 1)); + }) + .build(); @Override BoundedCacheClusterScopeTestCustomResource createTestResource(int index) { var res = new BoundedCacheClusterScopeTestCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME_PREFIX + index) - .build()); + res.setMetadata( + new ObjectMetaBuilder().withName(RESOURCE_NAME_PREFIX + index).build()); res.setSpec(new BoundedCacheTestSpec()); res.getSpec().setData(INITIAL_DATA_PREFIX + index); res.getSpec().setTargetNamespace(extension.getNamespace()); diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheNamespacedIT.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheNamespacedIT.java index ae7f8f5873..381f9c7afe 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheNamespacedIT.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/CaffeineBoundedCacheNamespacedIT.java @@ -17,20 +17,20 @@ class CaffeineBoundedCacheNamespacedIT extends BoundedCacheTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new BoundedCacheTestReconciler(), o -> { + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new BoundedCacheTestReconciler(), o -> { o.withItemStore(boundedItemStore( - new KubernetesClientBuilder().build(), BoundedCacheTestCustomResource.class, + new KubernetesClientBuilder().build(), + BoundedCacheTestCustomResource.class, Duration.ofMinutes(1), 1)); }) - .build(); + .build(); BoundedCacheTestCustomResource createTestResource(int index) { var res = new BoundedCacheTestCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME_PREFIX + index) - .build()); + res.setMetadata( + new ObjectMetaBuilder().withName(RESOURCE_NAME_PREFIX + index).build()); res.setSpec(new BoundedCacheTestSpec()); res.getSpec().setData(INITIAL_DATA_PREFIX + index); res.getSpec().setTargetNamespace(extension.getNamespace()); @@ -46,5 +46,4 @@ Class customResourceClass() { LocallyRunOperatorExtension extension() { return extension; } - } diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java index 10ab50138a..96b9425700 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/AbstractTestReconciler.java @@ -28,7 +28,8 @@ import com.github.benmanes.caffeine.cache.Cache; import com.github.benmanes.caffeine.cache.Caffeine; -public abstract class AbstractTestReconciler

> +public abstract class AbstractTestReconciler< + P extends CustomResource> implements Reconciler

{ private static final Logger log = @@ -37,9 +38,7 @@ public abstract class AbstractTestReconciler

reconcile( - P resource, - Context

context) { + public UpdateControl

reconcile(P resource, Context

context) { var maybeConfigMap = context.getSecondaryResource(ConfigMap.class); maybeConfigMap.ifPresentOrElse( cm -> updateConfigMapIfNeeded(cm, resource, context), @@ -70,19 +69,20 @@ protected void createConfigMap(P resource, Context

context) { } @Override - public List> prepareEventSources( - EventSourceContext

context) { + public List> prepareEventSources(EventSourceContext

context) { - var boundedItemStore = - boundedItemStore(new KubernetesClientBuilder().build(), - ConfigMap.class, Duration.ofMinutes(1), 1); // setting max size for testing purposes + var boundedItemStore = boundedItemStore( + new KubernetesClientBuilder().build(), + ConfigMap.class, + Duration.ofMinutes(1), + 1); // setting max size for testing purposes var es = new InformerEventSource<>( InformerEventSourceConfiguration.from(ConfigMap.class, primaryClass()) .withItemStore(boundedItemStore) - .withSecondaryToPrimaryMapper( - Mappers.fromOwnerReferences(context.getPrimaryResourceClass(), - this instanceof BoundedCacheClusterScopeTestReconciler)) + .withSecondaryToPrimaryMapper(Mappers.fromOwnerReferences( + context.getPrimaryResourceClass(), + this instanceof BoundedCacheClusterScopeTestReconciler)) .build(), context); @@ -96,7 +96,8 @@ private void ensureStatus(P resource) { } public static BoundedItemStore boundedItemStore( - KubernetesClient client, Class rClass, + KubernetesClient client, + Class rClass, Duration accessExpireDuration, // max size is only for testing purposes long cacheMaxSize) { @@ -108,5 +109,4 @@ public static BoundedItemStore boundedItemStore( } protected abstract Class

primaryClass(); - } diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestCustomResource.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestCustomResource.java index a77416715e..6fc9a5babc 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestCustomResource.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestCustomResource.java @@ -11,5 +11,4 @@ @Version("v1") @ShortNames("bccs") public class BoundedCacheClusterScopeTestCustomResource - extends CustomResource { -} + extends CustomResource {} diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestReconciler.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestReconciler.java index 84448fc9d8..93f103cbf2 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestReconciler.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/clusterscope/BoundedCacheClusterScopeTestReconciler.java @@ -4,8 +4,8 @@ import io.javaoperatorsdk.operator.processing.event.source.cache.sample.AbstractTestReconciler; @ControllerConfiguration -public class BoundedCacheClusterScopeTestReconciler extends - AbstractTestReconciler { +public class BoundedCacheClusterScopeTestReconciler + extends AbstractTestReconciler { @Override protected Class primaryClass() { diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestCustomResource.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestCustomResource.java index a5e37917ba..9b77aa7bf8 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestCustomResource.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestCustomResource.java @@ -10,5 +10,4 @@ @Version("v1") @ShortNames("bct") public class BoundedCacheTestCustomResource - extends CustomResource implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestStatus.java b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestStatus.java index 2bdd434d23..5aa5ca2258 100644 --- a/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestStatus.java +++ b/caffeine-bounded-cache-support/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/sample/namespacescope/BoundedCacheTestStatus.java @@ -1,4 +1,3 @@ package io.javaoperatorsdk.operator.processing.event.source.cache.sample.namespacescope; -public class BoundedCacheTestStatus { -} +public class BoundedCacheTestStatus {} diff --git a/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java b/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java index 07106d9b3c..93765b48f1 100644 --- a/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java +++ b/micrometer-support/src/main/java/io/javaoperatorsdk/operator/monitoring/micrometer/MicrometerMetrics.java @@ -89,8 +89,8 @@ public static MicrometerMetricsBuilder newMicrometerMetricsBuilder(MeterRegistry * @return a MicrometerMetrics instance configured to not collect per-resource metrics * @see PerResourceCollectingMicrometerMetricsBuilder */ - public static PerResourceCollectingMicrometerMetricsBuilder newPerResourceCollectingMicrometerMetricsBuilder( - MeterRegistry registry) { + public static PerResourceCollectingMicrometerMetricsBuilder + newPerResourceCollectingMicrometerMetricsBuilder(MeterRegistry registry) { return new PerResourceCollectingMicrometerMetricsBuilder(registry); } @@ -103,8 +103,8 @@ public static PerResourceCollectingMicrometerMetricsBuilder newPerResourceCollec * @param cleaner the {@link Cleaner} to use * @param collectingPerResourceMetrics whether to collect per resource metrics */ - private MicrometerMetrics(MeterRegistry registry, Cleaner cleaner, - boolean collectingPerResourceMetrics) { + private MicrometerMetrics( + MeterRegistry registry, Cleaner cleaner, boolean collectingPerResourceMetrics) { this.registry = registry; this.cleaner = cleaner; this.collectPerResourceMetrics = collectingPerResourceMetrics; @@ -137,12 +137,11 @@ public T timeControllerExecution(ControllerExecution execution) { final var tags = new ArrayList(16); tags.add(Tag.of(CONTROLLER, name)); addMetadataTags(resourceID, metadata, tags, true); - final var timer = - Timer.builder(execName) - .tags(tags) - .publishPercentiles(0.3, 0.5, 0.95) - .publishPercentileHistogram() - .register(registry); + final var timer = Timer.builder(execName) + .tags(tags) + .publishPercentiles(0.3, 0.5, 0.95) + .publishPercentileHistogram() + .register(registry); try { final var result = timer.record(() -> { try { @@ -168,12 +167,16 @@ public T timeControllerExecution(ControllerExecution execution) { @Override public void receivedEvent(Event event, Map metadata) { if (event instanceof ResourceEvent) { - incrementCounter(event.getRelatedCustomResourceID(), EVENTS_RECEIVED, + incrementCounter( + event.getRelatedCustomResourceID(), + EVENTS_RECEIVED, metadata, Tag.of(EVENT, event.getClass().getSimpleName()), Tag.of(ACTION, ((ResourceEvent) event).getAction().toString())); } else { - incrementCounter(event.getRelatedCustomResourceID(), EVENTS_RECEIVED, + incrementCounter( + event.getRelatedCustomResourceID(), + EVENTS_RECEIVED, metadata, Tag.of(EVENT, event.getClass().getSimpleName())); } @@ -187,14 +190,18 @@ public void cleanupDoneFor(ResourceID resourceID, Map metadata) } @Override - public void reconcileCustomResource(HasMetadata resource, RetryInfo retryInfoNullable, - Map metadata) { + public void reconcileCustomResource( + HasMetadata resource, RetryInfo retryInfoNullable, Map metadata) { Optional retryInfo = Optional.ofNullable(retryInfoNullable); - incrementCounter(ResourceID.fromResource(resource), RECONCILIATIONS_STARTED, + incrementCounter( + ResourceID.fromResource(resource), + RECONCILIATIONS_STARTED, metadata, - Tag.of(RECONCILIATIONS_RETRIES_NUMBER, + Tag.of( + RECONCILIATIONS_RETRIES_NUMBER, String.valueOf(retryInfo.map(RetryInfo::getAttemptCount).orElse(0))), - Tag.of(RECONCILIATIONS_RETRIES_LAST, + Tag.of( + RECONCILIATIONS_RETRIES_LAST, String.valueOf(retryInfo.map(RetryInfo::isLastAttempt).orElse(true)))); var controllerQueueSize = @@ -226,15 +233,18 @@ public void reconciliationExecutionFinished(HasMetadata resource, Map metadata) { + public void failedReconciliation( + HasMetadata resource, Exception exception, Map metadata) { var cause = exception.getCause(); if (cause == null) { cause = exception; } else if (cause instanceof RuntimeException) { cause = cause.getCause() != null ? cause.getCause() : cause; } - incrementCounter(ResourceID.fromResource(resource), RECONCILIATIONS_FAILED, metadata, + incrementCounter( + ResourceID.fromResource(resource), + RECONCILIATIONS_FAILED, + metadata, Tag.of(EXCEPTION, cause.getClass().getSimpleName())); } @@ -243,9 +253,8 @@ public void failedReconciliation(HasMetadata resource, Exception exception, return registry.gaugeMapSize(PREFIX + name + SIZE_SUFFIX, Collections.emptyList(), map); } - - private void addMetadataTags(ResourceID resourceID, Map metadata, - List tags, boolean prefixed) { + private void addMetadataTags( + ResourceID resourceID, Map metadata, List tags, boolean prefixed) { if (collectPerResourceMetrics) { addTag(NAME, resourceID.getName(), tags, prefixed); addTagOmittingOnEmptyValue(NAMESPACE, resourceID.getNamespace().orElse(null), tags, prefixed); @@ -261,8 +270,8 @@ private static void addTag(String name, String value, List tags, boolean pr tags.add(Tag.of(getPrefixedMetadataTag(name, prefixed), value)); } - private static void addTagOmittingOnEmptyValue(String name, String value, List tags, - boolean prefixed) { + private static void addTagOmittingOnEmptyValue( + String name, String value, List tags, boolean prefixed) { if (value != null && !value.isBlank()) { addTag(name, value, tags, prefixed); } @@ -282,8 +291,8 @@ private static void addGVKTags(GroupVersionKind gvk, List tags, boolean pre addTag(KIND, gvk.getKind(), tags, prefixed); } - private void incrementCounter(ResourceID id, String counterName, Map metadata, - Tag... additionalTags) { + private void incrementCounter( + ResourceID id, String counterName, Map metadata, Tag... additionalTags) { final var additionalTagsNb = additionalTags != null && additionalTags.length > 0 ? additionalTags.length : 0; final var metadataNb = metadata != null ? metadata.size() : 0; @@ -344,6 +353,7 @@ public MicrometerMetrics build() { return new MicrometerMetrics(registry, cleaner, true); } } + public static class MicrometerMetricsBuilder { protected final MeterRegistry registry; private boolean collectingPerResourceMetrics = true; @@ -422,8 +432,8 @@ static class DelayedCleaner extends MicrometerMetrics.DefaultCleaner { private final ScheduledExecutorService metersCleaner; private final int cleanUpDelayInSeconds; - private DelayedCleaner(MeterRegistry registry, int cleanUpDelayInSeconds, - int cleaningThreadsNumber) { + private DelayedCleaner( + MeterRegistry registry, int cleanUpDelayInSeconds, int cleaningThreadsNumber) { super(registry); this.cleanUpDelayInSeconds = cleanUpDelayInSeconds; this.metersCleaner = Executors.newScheduledThreadPool(cleaningThreadsNumber); @@ -432,8 +442,8 @@ private DelayedCleaner(MeterRegistry registry, int cleanUpDelayInSeconds, @Override public void removeMetersFor(ResourceID resourceID) { // schedule deletion of meters associated with ResourceID - metersCleaner.schedule(() -> super.removeMetersFor(resourceID), - cleanUpDelayInSeconds, TimeUnit.SECONDS); + metersCleaner.schedule( + () -> super.removeMetersFor(resourceID), cleanUpDelayInSeconds, TimeUnit.SECONDS); } } } diff --git a/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/AbstractMicrometerMetricsTestFixture.java b/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/AbstractMicrometerMetricsTestFixture.java index 8575f07243..ddd5262203 100644 --- a/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/AbstractMicrometerMetricsTestFixture.java +++ b/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/AbstractMicrometerMetricsTestFixture.java @@ -25,14 +25,11 @@ public abstract class AbstractMicrometerMetricsTestFixture { protected final MicrometerMetrics metrics = getMetrics(); protected static final String testResourceName = "micrometer-metrics-cr"; - @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withConfigurationService(overrider -> overrider.withMetrics(metrics)) - .withReconciler(new MetricsCleaningTestReconciler()) - .build(); - + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withConfigurationService(overrider -> overrider.withMetrics(metrics)) + .withReconciler(new MetricsCleaningTestReconciler()) + .build(); protected abstract MicrometerMetrics getMetrics(); @@ -46,8 +43,11 @@ void properlyHandlesResourceDeletion() throws Exception { final var created = operator.create(testResource); // make sure the resource is created - await().until(() -> !operator.get(ConfigMap.class, testResourceName) - .getMetadata().getFinalizers().isEmpty()); + await().until(() -> !operator + .get(ConfigMap.class, testResourceName) + .getMetadata() + .getFinalizers() + .isEmpty()); final var resourceID = ResourceID.fromResource(created); final var meters = preDeleteChecks(resourceID); diff --git a/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/DelayedMetricsCleaningOnDeleteIT.java b/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/DelayedMetricsCleaningOnDeleteIT.java index 26dfe59f84..92929d5ddb 100644 --- a/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/DelayedMetricsCleaningOnDeleteIT.java +++ b/micrometer-support/src/test/java/io/javaoperatorsdk/operator/monitoring/micrometer/DelayedMetricsCleaningOnDeleteIT.java @@ -15,7 +15,9 @@ public class DelayedMetricsCleaningOnDeleteIT extends AbstractMicrometerMetricsT @Override protected MicrometerMetrics getMetrics() { return MicrometerMetrics.newPerResourceCollectingMicrometerMetricsBuilder(registry) - .withCleanUpDelayInSeconds(testDelay).withCleaningThreadNumber(2).build(); + .withCleanUpDelayInSeconds(testDelay) + .withCleaningThreadNumber(2) + .build(); } @Override diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/AggregatedOperatorException.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/AggregatedOperatorException.java index 2fdc80d606..00fab7f96e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/AggregatedOperatorException.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/AggregatedOperatorException.java @@ -24,9 +24,10 @@ public Map getAggregatedExceptions() { @Override public String getMessage() { - return super.getMessage() + " " + causes.entrySet().stream() - .map(entry -> entry.getKey() + " -> " + exceptionDescription(entry)) - .collect(Collectors.joining("\n - ", "Details:\n - ", "")); + return super.getMessage() + " " + + causes.entrySet().stream() + .map(entry -> entry.getKey() + " -> " + exceptionDescription(entry)) + .collect(Collectors.joining("\n - ", "Details:\n - ", "")); } private static String exceptionDescription(Entry entry) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/BuilderUtils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/BuilderUtils.java index 8f33036b74..48e07e939d 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/BuilderUtils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/BuilderUtils.java @@ -1,4 +1,3 @@ - package io.javaoperatorsdk.operator; import java.lang.reflect.Constructor; @@ -15,8 +14,12 @@ public static B newBuilder(Class builderType, T item) { try { Constructor constructor = builderType.getDeclaredConstructor(builderTargetType); return constructor.newInstance(item); - } catch (NoSuchMethodException | SecurityException | InstantiationException - | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) { + } catch (NoSuchMethodException + | SecurityException + | InstantiationException + | IllegalAccessException + | IllegalArgumentException + | InvocationTargetException e) { throw new OperatorException( "Failied to instantiate builder: " + builderType.getCanonicalName() + " using: " + item, e); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ControllerManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ControllerManager.java index a755e4db7e..2d6e4c91f0 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ControllerManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ControllerManager.java @@ -23,6 +23,7 @@ class ControllerManager { @SuppressWarnings("rawtypes") private final Map controllers = new HashMap<>(); + private boolean started = false; private final ExecutorServiceManager executorServiceManager; @@ -30,7 +31,6 @@ public ControllerManager(ExecutorServiceManager executorServiceManager) { this.executorServiceManager = executorServiceManager; } - public synchronized void shouldStart() { if (started) { return; @@ -41,27 +41,36 @@ public synchronized void shouldStart() { } public synchronized void start(boolean startEventProcessor) { - executorServiceManager.boundedExecuteAndWaitForAllToComplete(controllers().stream(), c -> { - c.start(startEventProcessor); - return null; - }, c -> "Controller Starter for: " + c.getConfiguration().getName()); + executorServiceManager.boundedExecuteAndWaitForAllToComplete( + controllers().stream(), + c -> { + c.start(startEventProcessor); + return null; + }, + c -> "Controller Starter for: " + c.getConfiguration().getName()); started = true; } public synchronized void stop() { - executorServiceManager.boundedExecuteAndWaitForAllToComplete(controllers().stream(), c -> { - log.debug("closing {}", c); - c.stop(); - return null; - }, c -> "Controller Stopper for: " + c.getConfiguration().getName()); + executorServiceManager.boundedExecuteAndWaitForAllToComplete( + controllers().stream(), + c -> { + log.debug("closing {}", c); + c.stop(); + return null; + }, + c -> "Controller Stopper for: " + c.getConfiguration().getName()); started = false; } public synchronized void startEventProcessing() { - executorServiceManager.boundedExecuteAndWaitForAllToComplete(controllers().stream(), c -> { - c.startEventProcessing(); - return null; - }, c -> "Event processor starter for: " + c.getConfiguration().getName()); + executorServiceManager.boundedExecuteAndWaitForAllToComplete( + controllers().stream(), + c -> { + c.startEventProcessing(); + return null; + }, + c -> "Event processor starter for: " + c.getConfiguration().getName()); } @SuppressWarnings("rawtypes") diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/CustomResourceUtils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/CustomResourceUtils.java index 6ae222c1c3..c3e3dba791 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/CustomResourceUtils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/CustomResourceUtils.java @@ -19,23 +19,21 @@ public static void assertCustomResource(Class resClass, CustomResourceDefinit var namespaced = Namespaced.class.isAssignableFrom(resClass); if (!namespaced && Namespaced.class.getSimpleName().equals(crd.getSpec().getScope())) { - throw new OperatorException( - "Custom resource '" - + resClass.getName() - + "' must implement '" - + Namespaced.class.getName() - + "' since CRD '" - + crd.getMetadata().getName() - + "' is scoped as 'Namespaced'"); + throw new OperatorException("Custom resource '" + + resClass.getName() + + "' must implement '" + + Namespaced.class.getName() + + "' since CRD '" + + crd.getMetadata().getName() + + "' is scoped as 'Namespaced'"); } else if (namespaced && Cluster.class.getSimpleName().equals(crd.getSpec().getScope())) { - throw new OperatorException( - "Custom resource '" - + resClass.getName() - + "' must not implement '" - + Namespaced.class.getName() - + "' since CRD '" - + crd.getMetadata().getName() - + "' is scoped as 'Cluster'"); + throw new OperatorException("Custom resource '" + + resClass.getName() + + "' must not implement '" + + Namespaced.class.getName() + + "' since CRD '" + + crd.getMetadata().getName() + + "' is scoped as 'Cluster'"); } } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/LeaderElectionManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/LeaderElectionManager.java index d6ee17a383..3f5f78d7ba 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/LeaderElectionManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/LeaderElectionManager.java @@ -39,8 +39,8 @@ public class LeaderElectionManager { private String leaseNamespace; private String leaseName; - LeaderElectionManager(ControllerManager controllerManager, - ConfigurationService configurationService) { + LeaderElectionManager( + ControllerManager controllerManager, ConfigurationService configurationService) { this.controllerManager = controllerManager; this.configurationService = configurationService; } @@ -51,8 +51,9 @@ public boolean isLeaderElectionEnabled() { private void init(LeaderElectionConfiguration config) { this.identity = identity(config); - leaseNamespace = - config.getLeaseNamespace().orElseGet( + leaseNamespace = config + .getLeaseNamespace() + .orElseGet( () -> configurationService.getKubernetesClient().getConfiguration().getNamespace()); if (leaseNamespace == null) { final var message = @@ -63,24 +64,21 @@ private void init(LeaderElectionConfiguration config) { leaseName = config.getLeaseName(); final var lock = new LeaseLock(leaseNamespace, leaseName, identity); leaderElector = new LeaderElectorBuilder( - configurationService.getKubernetesClient(), - configurationService.getExecutorServiceManager().cachingExecutorService()) - .withConfig( - new LeaderElectionConfig( - lock, - config.getLeaseDuration(), - config.getRenewDeadline(), - config.getRetryPeriod(), - leaderCallbacks(config), - // this is required to be false to receive stop event in all cases, thus stopLeading - // is called always when leadership is lost/cancelled - false, - leaseName)) + configurationService.getKubernetesClient(), + configurationService.getExecutorServiceManager().cachingExecutorService()) + .withConfig(new LeaderElectionConfig( + lock, + config.getLeaseDuration(), + config.getRenewDeadline(), + config.getRetryPeriod(), + leaderCallbacks(config), + // this is required to be false to receive stop event in all cases, thus stopLeading + // is called always when leadership is lost/cancelled + false, + leaseName)) .build(); } - - private LeaderCallbacks leaderCallbacks(LeaderElectionConfiguration config) { return new LeaderCallbacks( () -> { @@ -138,14 +136,16 @@ public void stop() { private void checkLeaseAccess() { var verbsRequired = Arrays.asList("create", "update", "get"); SelfSubjectRulesReview review = new SelfSubjectRulesReview(); - review.setSpec(new SelfSubjectRulesReviewSpecBuilder().withNamespace(leaseNamespace).build()); - var reviewResult = configurationService.getKubernetesClient().resource(review).create(); + review.setSpec( + new SelfSubjectRulesReviewSpecBuilder().withNamespace(leaseNamespace).build()); + var reviewResult = + configurationService.getKubernetesClient().resource(review).create(); log.debug("SelfSubjectRulesReview result: {}", reviewResult); var verbsAllowed = reviewResult.getStatus().getResourceRules().stream() .filter(rule -> matchesValue(rule.getApiGroups(), COORDINATION_GROUP)) .filter(rule -> matchesValue(rule.getResources(), LEASES_RESOURCE)) - .filter(rule -> rule.getResourceNames().isEmpty() - || rule.getResourceNames().contains(leaseName)) + .filter(rule -> + rule.getResourceNames().isEmpty() || rule.getResourceNames().contains(leaseName)) .map(ResourceRule::getVerbs) .flatMap(Collection::stream) .distinct() @@ -158,8 +158,8 @@ private void checkLeaseAccess() { .filter(Predicate.not(verbsAllowed::contains)) .collect(Collectors.toList()); - throw new OperatorException(NO_PERMISSION_TO_LEASE_RESOURCE_MESSAGE + - " in namespace: " + leaseNamespace + "; missing required verbs: " + missingVerbs); + throw new OperatorException(NO_PERMISSION_TO_LEASE_RESOURCE_MESSAGE + " in namespace: " + + leaseNamespace + "; missing required verbs: " + missingVerbs); } private boolean matchesValue(Collection values, String match) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java index 9680bc7e8d..1e08427f78 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/Operator.java @@ -29,7 +29,6 @@ public class Operator implements LifecycleAware { private final ConfigurationService configurationService; private volatile boolean started = false; - public Operator() { this((KubernetesClient) null); } @@ -66,8 +65,8 @@ public Operator(Consumer overrider) { this(initConfigurationService(null, overrider)); } - private static ConfigurationService initConfigurationService(KubernetesClient client, - Consumer overrider) { + private static ConfigurationService initConfigurationService( + KubernetesClient client, Consumer overrider) { // initialize the client if the user didn't provide one if (client == null) { var configurationService = ConfigurationService.newOverriddenConfigurationService(overrider); @@ -152,8 +151,8 @@ public void stop() throws OperatorException { if (!started) { return; } - log.info("Operator SDK {} is shutting down...", - configurationService.getVersion().getSdkVersion()); + log.info( + "Operator SDK {} is shutting down...", configurationService.getVersion().getSdkVersion()); controllerManager.stop(); configurationService.getExecutorServiceManager().stop(reconciliationTerminationTimeout); @@ -193,20 +192,18 @@ public

RegisteredController

register(Reconciler

re * @return registered controller * @throws OperatorException if a problem occurred during the registration process */ - public

RegisteredController

register(Reconciler

reconciler, - ControllerConfiguration

configuration) - throws OperatorException { + public

RegisteredController

register( + Reconciler

reconciler, ControllerConfiguration

configuration) throws OperatorException { if (started) { throw new OperatorException("Operator already started. Register all the controllers before."); } if (configuration == null) { - throw new OperatorException( - "Cannot register reconciler with name " + reconciler.getClass().getCanonicalName() + - " reconciler named " + ReconcilerUtils.getNameFor(reconciler) - + " because its configuration cannot be found.\n" + - " Known reconcilers are: " - + configurationService.getKnownReconcilerNames()); + throw new OperatorException("Cannot register reconciler with name " + + reconciler.getClass().getCanonicalName() + " reconciler named " + + ReconcilerUtils.getNameFor(reconciler) + + " because its configuration cannot be found.\n" + " Known reconcilers are: " + + configurationService.getKnownReconcilerNames()); } final var controller = new Controller<>(reconciler, configuration, getKubernetesClient()); @@ -214,7 +211,8 @@ public

RegisteredController

register(Reconciler

re controllerManager.add(controller); final var informerConfig = configuration.getInformerConfig(); - final var watchedNS = informerConfig.watchAllNamespaces() ? "[all namespaces]" + final var watchedNS = informerConfig.watchAllNamespaces() + ? "[all namespaces]" : informerConfig.getEffectiveNamespaces(configuration); log.info( @@ -233,10 +231,9 @@ public

RegisteredController

register(Reconciler

re * @return registered controller * @param

the {@code HasMetadata} type associated with the reconciler */ - public

RegisteredController

register(Reconciler

reconciler, - Consumer> configOverrider) { - final var controllerConfiguration = - configurationService.getConfigurationFor(reconciler); + public

RegisteredController

register( + Reconciler

reconciler, Consumer> configOverrider) { + final var controllerConfiguration = configurationService.getConfigurationFor(reconciler); var configToOverride = ControllerConfigurationOverrider.override(controllerConfiguration); configOverrider.accept(configToOverride); return register(reconciler, configToOverride.build()); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ReconcilerUtils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ReconcilerUtils.java index c2241e4bbb..91b18c764d 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ReconcilerUtils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/ReconcilerUtils.java @@ -81,13 +81,13 @@ public static void checkIfCanAddOwnerReference(HasMetadata owner, HasMetadata re if (owner instanceof Namespaced) { if (!(resource instanceof Namespaced)) { throw new OperatorException( - "Cannot add owner reference from a cluster scoped to a namespace scoped resource." + - resourcesIdentifierDescription(owner, resource)); - } else if (!Objects.equals(owner.getMetadata().getNamespace(), - resource.getMetadata().getNamespace())) { + "Cannot add owner reference from a cluster scoped to a namespace scoped resource." + + resourcesIdentifierDescription(owner, resource)); + } else if (!Objects.equals( + owner.getMetadata().getNamespace(), resource.getMetadata().getNamespace())) { throw new OperatorException( - "Cannot add owner reference between two resource in different namespaces." + - resourcesIdentifierDescription(owner, resource)); + "Cannot add owner reference between two resource in different namespaces." + + resourcesIdentifierDescription(owner, resource)); } } } @@ -165,17 +165,17 @@ public static Object setSpec(HasMetadata resource, Object spec) { } } - private static IllegalStateException noSpecException(HasMetadata resource, - ReflectiveOperationException e) { - return new IllegalStateException("No spec found on resource " + resource.getClass().getName(), - e); + private static IllegalStateException noSpecException( + HasMetadata resource, ReflectiveOperationException e) { + return new IllegalStateException( + "No spec found on resource " + resource.getClass().getName(), e); } public static T loadYaml(Class clazz, Class loader, String yaml) { try (InputStream is = loader.getResourceAsStream(yaml)) { if (Builder.class.isAssignableFrom(clazz)) { - return BuilderUtils.newBuilder(clazz, - Serialization.unmarshal(is, BuilderUtils.builderTargetType(clazz))); + return BuilderUtils.newBuilder( + clazz, Serialization.unmarshal(is, BuilderUtils.builderTargetType(clazz))); } return Serialization.unmarshal(is, clazz); } catch (IOException ex) { @@ -190,16 +190,16 @@ public static void handleKubernetesClientException(Exception e, String resourceT if (e instanceof KubernetesClientException ke) { // only throw MissingCRDException if the 404 error occurs on the target CRD - if (404 == ke.getCode() && - (resourceTypeName.equals(ke.getFullResourceName()) + if (404 == ke.getCode() + && (resourceTypeName.equals(ke.getFullResourceName()) || matchesResourceType(resourceTypeName, ke))) { throw new MissingCRDException(resourceTypeName, ke.getVersion(), e.getMessage(), e); } } } - private static boolean matchesResourceType(String resourceTypeName, - KubernetesClientException exception) { + private static boolean matchesResourceType( + String resourceTypeName, KubernetesClientException exception) { final var fullResourceName = exception.getFullResourceName(); if (fullResourceName != null) { return resourceTypeName.equals(fullResourceName); @@ -212,7 +212,8 @@ private static boolean matchesResourceType(String resourceTypeName, if (group.endsWith(".")) { group = group.substring(0, group.length() - 1); } - final var segments = Arrays.stream(group.split("/")).filter(Predicate.not(String::isEmpty)) + final var segments = Arrays.stream(group.split("/")) + .filter(Predicate.not(String::isEmpty)) .toList(); if (segments.size() != 3) { return false; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RegisteredController.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RegisteredController.java index 88cd0123b0..9db473260b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RegisteredController.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RegisteredController.java @@ -10,5 +10,4 @@ public interface RegisteredController

extends NamespaceCh ControllerConfiguration

getConfiguration(); ControllerHealthInfo getControllerHealthInfo(); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RuntimeInfo.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RuntimeInfo.java index ee2f4d447e..b546cf4885 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RuntimeInfo.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/RuntimeInfo.java @@ -46,19 +46,19 @@ public boolean allEventSourcesAreHealthy() { checkIfStarted(); return registeredControllers.stream() .filter(rc -> !rc.getControllerHealthInfo().unhealthyEventSources().isEmpty()) - .findFirst().isEmpty(); + .findFirst() + .isEmpty(); } /** * @return Aggregated Map with controller related event sources. */ - public Map> unhealthyEventSources() { checkIfStarted(); Map> res = new HashMap<>(); for (var rc : registeredControllers) { - res.put(rc.getConfiguration().getName(), - rc.getControllerHealthInfo().unhealthyEventSources()); + res.put( + rc.getConfiguration().getName(), rc.getControllerHealthInfo().unhealthyEventSources()); } return res; } @@ -68,12 +68,14 @@ public Map> unhealthyEventSource * either a {@link ControllerEventSource} or an * {@link io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource}. */ - public Map> unhealthyInformerWrappingEventSourceHealthIndicator() { + public Map> + unhealthyInformerWrappingEventSourceHealthIndicator() { checkIfStarted(); Map> res = new HashMap<>(); for (var rc : registeredControllers) { - res.put(rc.getConfiguration().getName(), rc.getControllerHealthInfo() - .unhealthyInformerEventSourceHealthIndicators()); + res.put( + rc.getConfiguration().getName(), + rc.getControllerHealthInfo().unhealthyInformerEventSourceHealthIndicators()); } return res; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java index f7ed42c577..53a6db71a3 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/AbstractConfigurationService.java @@ -43,8 +43,11 @@ protected AbstractConfigurationService(Version version, Cloner cloner) { * {@code null} to lazily initialize one by default when * {@link #getExecutorServiceManager()} is called */ - public AbstractConfigurationService(Version version, Cloner cloner, - ExecutorServiceManager executorServiceManager, KubernetesClient client) { + public AbstractConfigurationService( + Version version, + Cloner cloner, + ExecutorServiceManager executorServiceManager, + KubernetesClient client) { this.version = version; init(cloner, executorServiceManager, client); } @@ -65,8 +68,8 @@ public AbstractConfigurationService(Version version, Cloner cloner, * provided by {@link ConfigurationService#getKubernetesClient()} the first time * {@link #getKubernetesClient()} is called */ - protected void init(Cloner cloner, ExecutorServiceManager executorServiceManager, - KubernetesClient client) { + protected void init( + Cloner cloner, ExecutorServiceManager executorServiceManager, KubernetesClient client) { this.client = client; this.cloner = cloner != null ? cloner : ConfigurationService.super.getResourceCloner(); this.executorServiceManager = executorServiceManager; @@ -95,13 +98,12 @@ private void put( protected void throwExceptionOnNameCollision( String newReconcilerClassName, ControllerConfiguration existing) { - throw new IllegalArgumentException( - "Reconciler name '" - + existing.getName() - + "' is used by both " - + existing.getAssociatedReconcilerClassName() - + " and " - + newReconcilerClassName); + throw new IllegalArgumentException("Reconciler name '" + + existing.getName() + + "' is used by both " + + existing.getAssociatedReconcilerClassName() + + " and " + + newReconcilerClassName); } @SuppressWarnings("unchecked") diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java index 4204cb6faf..a7ff0d6221 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/BaseConfigurationService.java @@ -54,11 +54,9 @@ public BaseConfigurationService() { @SuppressWarnings({"unchecked", "rawtypes"}) private static List dependentResources( - Workflow annotation, - ControllerConfiguration controllerConfiguration) { + Workflow annotation, ControllerConfiguration controllerConfiguration) { final var dependents = annotation.dependents(); - if (dependents == null || dependents.length == 0) { return Collections.emptyList(); } @@ -79,7 +77,9 @@ private static List dependentResources( var eventSourceName = dependent.useEventSourceWithName(); eventSourceName = Constants.NO_VALUE_SET.equals(eventSourceName) ? null : eventSourceName; final var context = Utils.contextFor(name, dependentType, null); - spec = new DependentResourceSpec(dependentType, dependentName, + spec = new DependentResourceSpec( + dependentType, + dependentName, Set.of(dependent.dependsOn()), Utils.instantiate(dependent.readyPostcondition(), Condition.class, context), Utils.instantiate(dependent.reconcilePrecondition(), Condition.class, context), @@ -89,9 +89,8 @@ private static List dependentResources( specsMap.put(dependentName, spec); // extract potential configuration - DependentResourceConfigurationResolver.configureSpecFromConfigured(spec, - controllerConfiguration, - dependentType); + DependentResourceConfigurationResolver.configureSpecFromConfigured( + spec, controllerConfiguration, dependentType); specsMap.put(dependentName, spec); } @@ -107,7 +106,8 @@ private static T valueOrDefaultFromAnnotation( try { if (controllerConfiguration == null) { return (T) io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration.class - .getDeclaredMethod(defaultMethodName).getDefaultValue(); + .getDeclaredMethod(defaultMethodName) + .getDefaultValue(); } else { return mapper.apply(controllerConfiguration); } @@ -125,14 +125,14 @@ private static String getName(String name, Class de } @SuppressWarnings("unused") - private static Configurator configuratorFor(Class instanceType, - Class> reconcilerClass) { + private static Configurator configuratorFor( + Class instanceType, Class> reconcilerClass) { return instance -> configureFromAnnotatedReconciler(instance, reconcilerClass); } @SuppressWarnings({"unchecked", "rawtypes"}) - private static void configureFromAnnotatedReconciler(Object instance, - Class> reconcilerClass) { + private static void configureFromAnnotatedReconciler( + Object instance, Class> reconcilerClass) { if (instance instanceof AnnotationConfigurable configurable) { final Class configurationClass = (Class) Utils.getFirstTypeArgumentFromSuperClassOrInterface( @@ -146,7 +146,9 @@ private static void configureFromAnnotatedReconciler(Object instance, @Override protected void logMissingReconcilerWarning(String reconcilerKey, String reconcilersNameMessage) { - logger.warn("Configuration for reconciler '{}' was not found. {}", reconcilerKey, + logger.warn( + "Configuration for reconciler '{}' was not found. {}", + reconcilerKey, reconcilersNameMessage); } @@ -168,10 +170,11 @@ public ControllerConfiguration getConfigurationFor( // create the configuration on demand and register it config = configFor(reconciler); register(config); - getLogger().info( - "Created configuration for reconciler {} with name {}", - reconciler.getClass().getName(), - config.getName()); + getLogger() + .info( + "Created configuration for reconciler {} with name {}", + reconciler.getClass().getName(), + config.getName()); } } else { // check that we don't have a reconciler name collision @@ -202,8 +205,8 @@ protected

ControllerConfiguration

configFor(Reconcile ResolvedControllerConfiguration

config = controllerConfiguration(reconcilerClass, controllerAnnotation); - final var workflowAnnotation = reconcilerClass.getAnnotation( - io.javaoperatorsdk.operator.api.reconciler.Workflow.class); + final var workflowAnnotation = + reconcilerClass.getAnnotation(io.javaoperatorsdk.operator.api.reconciler.Workflow.class); if (workflowAnnotation != null) { final var specs = dependentResources(workflowAnnotation, config); WorkflowSpec workflowSpec = new WorkflowSpec() { @@ -221,7 +224,6 @@ public boolean isExplicitInvocation() { public boolean handleExceptionsInReconciler() { return workflowAnnotation.handleExceptionsInReconciler(); } - }; config.setWorkflowSpec(workflowSpec); } @@ -238,28 +240,35 @@ private

ResolvedControllerConfiguration

controllerCon final var name = ReconcilerUtils.getNameFor(reconcilerClass); final var generationAware = valueOrDefaultFromAnnotation( annotation, - io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::generationAwareEventProcessing, + io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration + ::generationAwareEventProcessing, "generationAwareEventProcessing"); final var associatedReconcilerClass = ResolvedControllerConfiguration.getAssociatedReconcilerClassName(reconcilerClass); final var context = Utils.contextFor(name); - final Class retryClass = - valueOrDefaultFromAnnotation(annotation, - io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::retry, - "retry"); - final var retry = Utils.instantiateAndConfigureIfNeeded(retryClass, Retry.class, - context, configuratorFor(Retry.class, reconcilerClass)); + final Class retryClass = valueOrDefaultFromAnnotation( + annotation, + io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::retry, + "retry"); + final var retry = Utils.instantiateAndConfigureIfNeeded( + retryClass, Retry.class, context, configuratorFor(Retry.class, reconcilerClass)); @SuppressWarnings("rawtypes") - final Class rateLimiterClass = valueOrDefaultFromAnnotation(annotation, + final Class rateLimiterClass = valueOrDefaultFromAnnotation( + annotation, io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::rateLimiter, "rateLimiter"); - final var rateLimiter = Utils.instantiateAndConfigureIfNeeded(rateLimiterClass, - RateLimiter.class, context, configuratorFor(RateLimiter.class, reconcilerClass)); + final var rateLimiter = Utils.instantiateAndConfigureIfNeeded( + rateLimiterClass, + RateLimiter.class, + context, + configuratorFor(RateLimiter.class, reconcilerClass)); - final var reconciliationInterval = valueOrDefaultFromAnnotation(annotation, - io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::maxReconciliationInterval, + final var reconciliationInterval = valueOrDefaultFromAnnotation( + annotation, + io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration + ::maxReconciliationInterval, "maxReconciliationInterval"); long interval = -1; TimeUnit timeUnit = null; @@ -268,30 +277,34 @@ private

ResolvedControllerConfiguration

controllerCon timeUnit = reconciliationInterval.timeUnit(); } - var fieldManager = valueOrDefaultFromAnnotation(annotation, + var fieldManager = valueOrDefaultFromAnnotation( + annotation, io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::fieldManager, "fieldManager"); final var dependentFieldManager = - fieldManager.equals(CONTROLLER_NAME_AS_FIELD_MANAGER) ? name - : fieldManager; + fieldManager.equals(CONTROLLER_NAME_AS_FIELD_MANAGER) ? name : fieldManager; InformerConfiguration

informerConfig = InformerConfiguration.builder(resourceClass) .initFromAnnotation(annotation != null ? annotation.informer() : null, context) .buildForController(); return new ResolvedControllerConfiguration

( - name, generationAware, - associatedReconcilerClass, retry, rateLimiter, + name, + generationAware, + associatedReconcilerClass, + retry, + rateLimiter, ResolvedControllerConfiguration.getMaxReconciliationInterval(interval, timeUnit), - valueOrDefaultFromAnnotation(annotation, + valueOrDefaultFromAnnotation( + annotation, io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration::finalizerName, "finalizerName"), null, dependentFieldManager, - this, informerConfig); + this, + informerConfig); } - protected boolean createIfNeeded() { return true; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Cloner.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Cloner.java index 30b2cee0e9..08cccab6f7 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Cloner.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Cloner.java @@ -5,5 +5,4 @@ public interface Cloner { R clone(R object); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java index 14a13bf0b6..83068231aa 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationService.java @@ -65,8 +65,7 @@ public interface ConfigurationService { * with overridden values. */ static ConfigurationService newOverriddenConfigurationService( - ConfigurationService baseConfiguration, - Consumer overrider) { + ConfigurationService baseConfiguration, Consumer overrider) { if (overrider != null) { final var toOverride = new ConfigurationServiceOverrider(baseConfiguration); overrider.accept(toOverride); @@ -328,10 +327,12 @@ default Optional getInformerStoppedHandler() { System.exit(1); } else { log.debug( - "Informer stopped: {}. Has synced: {}, Error: {}. This can happen as a result of " + - "stopping the controller, or due to an error on startup." + - "See also stopOnInformerErrorDuringStartup configuration.", - informer, informer.hasSynced(), ex); + "Informer stopped: {}. Has synced: {}, Error: {}. This can happen as a result of " + + "stopping the controller, or due to an error on startup." + + "See also stopOnInformerErrorDuringStartup configuration.", + informer, + informer.hasSynced(), + ex); } }); } @@ -387,7 +388,9 @@ default boolean ssaBasedCreateUpdateMatchForDependentResources() { */ default boolean shouldUseSSA( KubernetesDependentResource dependentResource) { - return shouldUseSSA(dependentResource.getClass(), dependentResource.resourceType(), + return shouldUseSSA( + dependentResource.getClass(), + dependentResource.resourceType(), dependentResource.configuration().orElse(null)); } @@ -403,7 +406,8 @@ default boolean shouldUseSSA( * @since 4.9.5 */ @SuppressWarnings("rawtypes") - default boolean shouldUseSSA(Class dependentResourceType, + default boolean shouldUseSSA( + Class dependentResourceType, Class resourceType, KubernetesDependentResourceConfig config) { if (ResourceUpdaterMatcher.class.isAssignableFrom(dependentResourceType)) { @@ -515,5 +519,4 @@ default boolean useSSAToPatchPrimaryResource() { default boolean cloneSecondaryResourcesWhenGettingFromCache() { return false; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java index 7de9bcda43..507cf3ce6a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverrider.java @@ -40,6 +40,7 @@ public class ConfigurationServiceOverrider { private Boolean parseResourceVersions; private Boolean useSSAToPatchPrimaryResource; private Boolean cloneSecondaryResourcesWhenGettingFromCache; + @SuppressWarnings("rawtypes") private DependentResourceFactory dependentResourceFactory; @@ -151,8 +152,7 @@ public ConfigurationServiceOverrider withDefaultNonSSAResource( return this; } - public ConfigurationServiceOverrider withPreviousAnnotationForDependentResources( - boolean value) { + public ConfigurationServiceOverrider withPreviousAnnotationForDependentResources(boolean value) { this.previousAnnotationForDependentResources = value; return this; } @@ -161,8 +161,7 @@ public ConfigurationServiceOverrider withPreviousAnnotationForDependentResources * @param value true if internal algorithms can use metadata.resourceVersion as a numeric value. * @return this */ - public ConfigurationServiceOverrider withParseResourceVersions( - boolean value) { + public ConfigurationServiceOverrider withParseResourceVersions(boolean value) { this.parseResourceVersions = value; return this; } @@ -173,8 +172,7 @@ public ConfigurationServiceOverrider withParseResourceVersions( * @return this */ @Deprecated(forRemoval = true) - public ConfigurationServiceOverrider wihtParseResourceVersions( - boolean value) { + public ConfigurationServiceOverrider wihtParseResourceVersions(boolean value) { this.parseResourceVersions = value; return this; } @@ -197,28 +195,29 @@ public Set getKnownReconcilerNames() { return original.getKnownReconcilerNames(); } - private T overriddenValueOrDefault(T value, - Function defaultValue) { + private T overriddenValueOrDefault( + T value, Function defaultValue) { return value != null ? value : defaultValue.apply(original); } @Override public boolean checkCRDAndValidateLocalModel() { - return overriddenValueOrDefault(checkCR, - ConfigurationService::checkCRDAndValidateLocalModel); + return overriddenValueOrDefault( + checkCR, ConfigurationService::checkCRDAndValidateLocalModel); } @SuppressWarnings("rawtypes") @Override public DependentResourceFactory dependentResourceFactory() { - return overriddenValueOrDefault(dependentResourceFactory, - ConfigurationService::dependentResourceFactory); + return overriddenValueOrDefault( + dependentResourceFactory, ConfigurationService::dependentResourceFactory); } @Override public int concurrentReconciliationThreads() { return Utils.ensureValid( - overriddenValueOrDefault(concurrentReconciliationThreads, + overriddenValueOrDefault( + concurrentReconciliationThreads, ConfigurationService::concurrentReconciliationThreads), "maximum reconciliation threads", 1, @@ -228,7 +227,8 @@ public int concurrentReconciliationThreads() { @Override public int concurrentWorkflowExecutorThreads() { return Utils.ensureValid( - overriddenValueOrDefault(concurrentWorkflowExecutorThreads, + overriddenValueOrDefault( + concurrentWorkflowExecutorThreads, ConfigurationService::concurrentWorkflowExecutorThreads), "maximum workflow execution threads", 1, @@ -252,25 +252,28 @@ public ExecutorService getExecutorService() { @Override public ExecutorService getWorkflowExecutorService() { - return overriddenValueOrDefault(workflowExecutorService, - ConfigurationService::getWorkflowExecutorService); + return overriddenValueOrDefault( + workflowExecutorService, ConfigurationService::getWorkflowExecutorService); } @Override public Optional getLeaderElectionConfiguration() { - return leaderElectionConfiguration != null ? Optional.of(leaderElectionConfiguration) + return leaderElectionConfiguration != null + ? Optional.of(leaderElectionConfiguration) : original.getLeaderElectionConfiguration(); } @Override public Optional getInformerStoppedHandler() { - return informerStoppedHandler != null ? Optional.of(informerStoppedHandler) + return informerStoppedHandler != null + ? Optional.of(informerStoppedHandler) : original.getInformerStoppedHandler(); } @Override public boolean stopOnInformerErrorDuringStartup() { - return overriddenValueOrDefault(stopOnInformerErrorDuringStartup, + return overriddenValueOrDefault( + stopOnInformerErrorDuringStartup, ConfigurationService::stopOnInformerErrorDuringStartup); } @@ -281,46 +284,50 @@ public Duration cacheSyncTimeout() { @Override public Duration reconciliationTerminationTimeout() { - return overriddenValueOrDefault(reconciliationTerminationTimeout, + return overriddenValueOrDefault( + reconciliationTerminationTimeout, ConfigurationService::reconciliationTerminationTimeout); } @Override public boolean ssaBasedCreateUpdateMatchForDependentResources() { - return overriddenValueOrDefault(ssaBasedCreateUpdateMatchForDependentResources, + return overriddenValueOrDefault( + ssaBasedCreateUpdateMatchForDependentResources, ConfigurationService::ssaBasedCreateUpdateMatchForDependentResources); } @Override public Set> defaultNonSSAResources() { - return overriddenValueOrDefault(defaultNonSSAResource, - ConfigurationService::defaultNonSSAResources); + return overriddenValueOrDefault( + defaultNonSSAResource, ConfigurationService::defaultNonSSAResources); } @Override public boolean previousAnnotationForDependentResourcesEventFiltering() { - return overriddenValueOrDefault(previousAnnotationForDependentResources, + return overriddenValueOrDefault( + previousAnnotationForDependentResources, ConfigurationService::previousAnnotationForDependentResourcesEventFiltering); } @Override public boolean parseResourceVersionsForEventFilteringAndCaching() { - return overriddenValueOrDefault(parseResourceVersions, + return overriddenValueOrDefault( + parseResourceVersions, ConfigurationService::parseResourceVersionsForEventFilteringAndCaching); } @Override public boolean useSSAToPatchPrimaryResource() { - return overriddenValueOrDefault(useSSAToPatchPrimaryResource, - ConfigurationService::useSSAToPatchPrimaryResource); + return overriddenValueOrDefault( + useSSAToPatchPrimaryResource, ConfigurationService::useSSAToPatchPrimaryResource); } @Override public boolean cloneSecondaryResourcesWhenGettingFromCache() { - return overriddenValueOrDefault(cloneSecondaryResourcesWhenGettingFromCache, + return overriddenValueOrDefault( + cloneSecondaryResourcesWhenGettingFromCache, ConfigurationService::cloneSecondaryResourcesWhenGettingFromCache); } }; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java index 3d3eef5990..66e028fbaf 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverrider.java @@ -17,7 +17,6 @@ import io.javaoperatorsdk.operator.processing.event.source.filter.OnUpdateFilter; import io.javaoperatorsdk.operator.processing.retry.Retry; - @SuppressWarnings({"rawtypes", "unused", "UnusedReturnValue"}) public class ControllerConfigurationOverrider { @@ -150,13 +149,11 @@ public ControllerConfigurationOverrider withName(String name) { return this; } - public ControllerConfigurationOverrider withFieldManager( - String dependentFieldManager) { + public ControllerConfigurationOverrider withFieldManager(String dependentFieldManager) { this.fieldManager = dependentFieldManager; return this; } - /** * Sets a max page size limit when starting the informer. This will result in pagination while * populating the cache. This means that longer lists will take multiple requests to fetch. See @@ -164,18 +161,18 @@ public ControllerConfigurationOverrider withFieldManager( * * @param informerListLimit null (the default) results in no pagination */ - public ControllerConfigurationOverrider withInformerListLimit( - Long informerListLimit) { + public ControllerConfigurationOverrider withInformerListLimit(Long informerListLimit) { config.withInformerListLimit(informerListLimit); return this; } - public ControllerConfigurationOverrider replacingNamedDependentResourceConfig(String name, - Object dependentResourceConfig) { + public ControllerConfigurationOverrider replacingNamedDependentResourceConfig( + String name, Object dependentResourceConfig) { final var specs = original.getWorkflowSpec().orElseThrow().getDependentResourceSpecs(); final var spec = specs.stream() - .filter(drs -> drs.getName().equals(name)).findFirst() + .filter(drs -> drs.getName().equals(name)) + .findFirst() .orElseThrow( () -> new IllegalArgumentException("Cannot find a DependentResource named: " + name)); @@ -189,9 +186,14 @@ public ControllerConfigurationOverrider replacingNamedDependentResourceConfig public ControllerConfiguration build() { return new ResolvedControllerConfiguration<>( name, - generationAware, original.getAssociatedReconcilerClassName(), retry, rateLimiter, + generationAware, + original.getAssociatedReconcilerClassName(), + retry, + rateLimiter, reconciliationMaxInterval, - finalizer, configurations, fieldManager, + finalizer, + configurations, + fieldManager, original.getConfigurationService(), config.buildForController(), original.getWorkflowSpec().orElse(null)); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/DefaultResourceClassResolver.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/DefaultResourceClassResolver.java index cdd4c5540e..cf44b9890e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/DefaultResourceClassResolver.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/DefaultResourceClassResolver.java @@ -9,7 +9,7 @@ public class DefaultResourceClassResolver implements ResourceClassResolver { @Override public Class getPrimaryResourceClass( Class> reconcilerClass) { - return (Class) Utils.getFirstTypeArgumentFromSuperClassOrInterface(reconcilerClass, - Reconciler.class); + return (Class) + Utils.getFirstTypeArgumentFromSuperClassOrInterface(reconcilerClass, Reconciler.class); } } 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 c35281e822..48eaf8d192 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 @@ -41,39 +41,45 @@ public class ExecutorServiceManager { * @param threadNamer for naming thread * @param type */ - public void boundedExecuteAndWaitForAllToComplete(Stream stream, - Function task, Function threadNamer) { + public void boundedExecuteAndWaitForAllToComplete( + Stream stream, Function task, Function threadNamer) { executeAndWaitForAllToComplete(stream, task, threadNamer, cachingExecutorService()); } - public static void executeAndWaitForAllToComplete(Stream stream, - Function task, Function threadNamer, + public static void executeAndWaitForAllToComplete( + Stream stream, + Function task, + Function threadNamer, ExecutorService executorService) { final var instrumented = new InstrumentedExecutorService(executorService); try { - instrumented.invokeAll(stream.map(item -> (Callable) () -> { - // change thread name for easier debugging - final var thread = Thread.currentThread(); - final var name = thread.getName(); - thread.setName(threadNamer.apply(item)); - try { - task.apply(item); - return null; - } finally { - // restore original name - thread.setName(name); - } - }).collect(Collectors.toList())).forEach(f -> { - try { - // to find out any exceptions - f.get(); - } catch (ExecutionException e) { - throw new OperatorException(e); - } catch (InterruptedException e) { - log.warn("Interrupted.", e); - Thread.currentThread().interrupt(); - } - }); + instrumented + .invokeAll(stream + .map(item -> (Callable) () -> { + // change thread name for easier debugging + final var thread = Thread.currentThread(); + final var name = thread.getName(); + thread.setName(threadNamer.apply(item)); + try { + task.apply(item); + return null; + } finally { + // restore original name + thread.setName(name); + } + }) + .collect(Collectors.toList())) + .forEach(f -> { + try { + // to find out any exceptions + f.get(); + } catch (ExecutionException e) { + throw new OperatorException(e); + } catch (InterruptedException e) { + log.warn("Interrupted.", e); + Thread.currentThread().interrupt(); + } + }); } catch (InterruptedException e) { log.warn("Interrupted.", e); Thread.currentThread().interrupt(); @@ -113,7 +119,8 @@ public void stop(Duration gracefulShutdownTimeout) { try { log.debug("Closing executor"); var parallelExec = Executors.newFixedThreadPool(3); - parallelExec.invokeAll(List.of(shutdown(executor, gracefulShutdownTimeout), + parallelExec.invokeAll(List.of( + shutdown(executor, gracefulShutdownTimeout), shutdown(workflowExecutor, gracefulShutdownTimeout), shutdown(cachingExecutorService, gracefulShutdownTimeout))); workflowExecutor = null; @@ -125,16 +132,16 @@ public void stop(Duration gracefulShutdownTimeout) { } } - private static Callable shutdown(ExecutorService executorService, - Duration gracefulShutdownTimeout) { + private static Callable shutdown( + ExecutorService executorService, Duration gracefulShutdownTimeout) { return () -> { // workflow executor can be null if (executorService == null) { return null; } executorService.shutdown(); - if (!executorService.awaitTermination(gracefulShutdownTimeout.toMillis(), - TimeUnit.MILLISECONDS)) { + if (!executorService.awaitTermination( + gracefulShutdownTimeout.toMillis(), TimeUnit.MILLISECONDS)) { executorService.shutdownNow(); // if we timed out, waiting, cancel everything } return null; @@ -203,8 +210,9 @@ public List> invokeAll(Collection> tasks) } @Override - public List> invokeAll(Collection> tasks, long timeout, - TimeUnit unit) throws InterruptedException { + public List> invokeAll( + Collection> tasks, long timeout, TimeUnit unit) + throws InterruptedException { return executor.invokeAll(tasks, timeout, unit); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Informable.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Informable.java index 5b58836483..39272b2083 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Informable.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Informable.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.api.config; - import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfiguration.java index cfce453e14..49efa10b8d 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfiguration.java @@ -28,7 +28,10 @@ public LeaderElectionConfiguration(String leaseName, String leaseNamespace, Stri leaseNamespace, LEASE_DURATION_DEFAULT_VALUE, RENEW_DEADLINE_DEFAULT_VALUE, - RETRY_PERIOD_DEFAULT_VALUE, identity, null, true); + RETRY_PERIOD_DEFAULT_VALUE, + identity, + null, + true); } public LeaderElectionConfiguration(String leaseName, String leaseNamespace) { @@ -37,7 +40,10 @@ public LeaderElectionConfiguration(String leaseName, String leaseNamespace) { leaseNamespace, LEASE_DURATION_DEFAULT_VALUE, RENEW_DEADLINE_DEFAULT_VALUE, - RETRY_PERIOD_DEFAULT_VALUE, null, null, true); + RETRY_PERIOD_DEFAULT_VALUE, + null, + null, + true); } public LeaderElectionConfiguration(String leaseName) { @@ -46,7 +52,10 @@ public LeaderElectionConfiguration(String leaseName) { null, LEASE_DURATION_DEFAULT_VALUE, RENEW_DEADLINE_DEFAULT_VALUE, - RETRY_PERIOD_DEFAULT_VALUE, null, null, true); + RETRY_PERIOD_DEFAULT_VALUE, + null, + null, + true); } public LeaderElectionConfiguration( diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfigurationBuilder.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfigurationBuilder.java index eda262f9eb..c4d4fc6190 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfigurationBuilder.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/LeaderElectionConfigurationBuilder.java @@ -62,7 +62,14 @@ public LeaderElectionConfigurationBuilder withExitOnStopLeading(boolean exitOnSt } public LeaderElectionConfiguration build() { - return new LeaderElectionConfiguration(leaseName, leaseNamespace, leaseDuration, renewDeadline, - retryPeriod, identity, leaderCallbacks, exitOnStopLeading); + return new LeaderElectionConfiguration( + leaseName, + leaseNamespace, + leaseDuration, + renewDeadline, + retryPeriod, + identity, + leaderCallbacks, + exitOnStopLeading); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/NamespaceChangeable.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/NamespaceChangeable.java index 426b179438..dda67b8138 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/NamespaceChangeable.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/NamespaceChangeable.java @@ -24,5 +24,4 @@ default void changeNamespaces(String... namespaces) { default boolean allowsNamespaceChanges() { return true; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java index 7e8415f584..3c26659ed2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResolvedControllerConfiguration.java @@ -32,37 +32,61 @@ public class ResolvedControllerConfiguration

private WorkflowSpec workflowSpec; public ResolvedControllerConfiguration(ControllerConfiguration

other) { - this(other.getName(), other.isGenerationAware(), - other.getAssociatedReconcilerClassName(), other.getRetry(), other.getRateLimiter(), + this( + other.getName(), + other.isGenerationAware(), + other.getAssociatedReconcilerClassName(), + other.getRetry(), + other.getRateLimiter(), other.maxReconciliationInterval().orElse(null), - other.getFinalizerName(), Collections.emptyMap(), + other.getFinalizerName(), + Collections.emptyMap(), other.fieldManager(), other.getConfigurationService(), other.getInformerConfig(), other.getWorkflowSpec().orElse(null)); } - public ResolvedControllerConfiguration(String name, - boolean generationAware, String associatedReconcilerClassName, Retry retry, - RateLimiter rateLimiter, Duration maxReconciliationInterval, + public ResolvedControllerConfiguration( + String name, + boolean generationAware, + String associatedReconcilerClassName, + Retry retry, + RateLimiter rateLimiter, + Duration maxReconciliationInterval, String finalizer, Map configurations, String fieldManager, ConfigurationService configurationService, InformerConfiguration

informerConfig, WorkflowSpec workflowSpec) { - this(name, generationAware, associatedReconcilerClassName, retry, rateLimiter, - maxReconciliationInterval, finalizer, configurations, fieldManager, - configurationService, informerConfig); + this( + name, + generationAware, + associatedReconcilerClassName, + retry, + rateLimiter, + maxReconciliationInterval, + finalizer, + configurations, + fieldManager, + configurationService, + informerConfig); setWorkflowSpec(workflowSpec); } - protected ResolvedControllerConfiguration(String name, - boolean generationAware, String associatedReconcilerClassName, Retry retry, - RateLimiter rateLimiter, Duration maxReconciliationInterval, String finalizer, + protected ResolvedControllerConfiguration( + String name, + boolean generationAware, + String associatedReconcilerClassName, + Retry retry, + RateLimiter rateLimiter, + Duration maxReconciliationInterval, + String finalizer, Map configurations, String fieldManager, - ConfigurationService configurationService, InformerConfiguration

informerConfig) { + ConfigurationService configurationService, + InformerConfiguration

informerConfig) { this.informerConfig = informerConfig; this.configurationService = configurationService; this.name = ControllerConfiguration.ensureValidName(name, associatedReconcilerClassName); @@ -77,10 +101,22 @@ protected ResolvedControllerConfiguration(String name, this.fieldManager = fieldManager; } - protected ResolvedControllerConfiguration(Class

resourceClass, String name, - Class reconcilerClas, ConfigurationService configurationService) { - this(name, false, getAssociatedReconcilerClassName(reconcilerClas), null, null, - null, null, null, null, configurationService, + protected ResolvedControllerConfiguration( + Class

resourceClass, + String name, + Class reconcilerClas, + ConfigurationService configurationService) { + this( + name, + false, + getAssociatedReconcilerClassName(reconcilerClas), + null, + null, + null, + null, + null, + null, + configurationService, InformerConfiguration.builder(resourceClass).buildForController()); } @@ -136,7 +172,6 @@ public RateLimiter getRateLimiter() { return rateLimiter; } - @Override public Optional getWorkflowSpec() { return Optional.ofNullable(workflowSpec); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResourceClassResolver.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResourceClassResolver.java index 001eb3e0de..b1d0af9263 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResourceClassResolver.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/ResourceClassResolver.java @@ -7,5 +7,4 @@ public interface ResourceClassResolver {

Class

getPrimaryResourceClass( Class> reconcilerClass); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java index 15ffe178e5..ff3a0b52c8 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/Utils.java @@ -62,9 +62,7 @@ private static Version loadFromProperties() { log.debug("Couldn't parse git.build.time property", e); builtTime = Date.from(Instant.EPOCH); } - return new Version( - properties.getProperty("git.commit.id.abbrev", "unknown"), - builtTime); + return new Version(properties.getProperty("git.commit.id.abbrev", "unknown"), builtTime); } public static int ensureValid(int value, String description, int minValue) { @@ -77,8 +75,13 @@ public static int ensureValid(int value, String description, int minValue, int d throw new IllegalArgumentException( "Default value for " + description + " must be greater than " + minValue); } - log.warn("Requested {} should be greater than {}. Requested: {}, using {}{} instead", - description, minValue, value, defaultValue, defaultValue == minValue ? "" : " (default)"); + log.warn( + "Requested {} should be greater than {}. Requested: {}, using {}{} instead", + description, + minValue, + value, + defaultValue, + defaultValue == minValue ? "" : " (default)"); value = defaultValue; } return value; @@ -98,7 +101,8 @@ public static boolean debugThreadPool() { return getBooleanFromSystemPropsOrDefault(DEBUG_THREAD_POOL_ENV_KEY, false); } - public static boolean getBooleanFromSystemPropsOrDefault(String propertyName, boolean defaultValue) { + public static boolean getBooleanFromSystemPropsOrDefault( + String propertyName, boolean defaultValue) { var property = System.getProperty(propertyName); if (property == null) { return defaultValue; @@ -121,20 +125,21 @@ public static Class getTypeArgumentFromExtendedClassByIndex(Class clazz, i Type type = clazz.getGenericSuperclass(); return (Class) ((ParameterizedType) type).getActualTypeArguments()[index]; } catch (Exception e) { - throw new RuntimeException(GENERIC_PARAMETER_TYPE_ERROR_PREFIX - + clazz.getSimpleName() - + " because it doesn't extend a class that is parameterized with the type we want to retrieve", + throw new RuntimeException( + GENERIC_PARAMETER_TYPE_ERROR_PREFIX + + clazz.getSimpleName() + + " because it doesn't extend a class that is parameterized with the type we want to retrieve", e); } } - public static Class getFirstTypeArgumentFromInterface(Class clazz, - Class expectedImplementedInterface) { + public static Class getFirstTypeArgumentFromInterface( + Class clazz, Class expectedImplementedInterface) { return getTypeArgumentFromInterfaceByIndex(clazz, expectedImplementedInterface, 0); } - public static Class getTypeArgumentFromInterfaceByIndex(Class clazz, - Class expectedImplementedInterface, int index) { + public static Class getTypeArgumentFromInterfaceByIndex( + Class clazz, Class expectedImplementedInterface, int index) { if (expectedImplementedInterface.isAssignableFrom(clazz)) { final var genericInterfaces = clazz.getGenericInterfaces(); @@ -154,8 +159,8 @@ public static Class getTypeArgumentFromInterfaceByIndex(Class clazz, + expectedImplementedInterface.getSimpleName()); } - private static Optional> extractType(Class clazz, - Class expectedImplementedInterface, int index, Type[] genericInterfaces) { + private static Optional> extractType( + Class clazz, Class expectedImplementedInterface, int index, Type[] genericInterfaces) { Optional> target = Optional.empty(); if (genericInterfaces.length > 0) { // try to find the target interface among them @@ -186,13 +191,13 @@ private static Optional> extractType(Class clazz, return target; } - public static Class getFirstTypeArgumentFromSuperClassOrInterface(Class clazz, - Class expectedImplementedInterface) { + public static Class getFirstTypeArgumentFromSuperClassOrInterface( + Class clazz, Class expectedImplementedInterface) { return getTypeArgumentFromSuperClassOrInterfaceByIndex(clazz, expectedImplementedInterface, 0); } - public static Class getTypeArgumentFromSuperClassOrInterfaceByIndex(Class clazz, - Class expectedImplementedInterface, int index) { + public static Class getTypeArgumentFromSuperClassOrInterfaceByIndex( + Class clazz, Class expectedImplementedInterface, int index) { // first check super class if it exists try { final Class superclass = clazz.getSuperclass(); @@ -205,8 +210,8 @@ public static Class getTypeArgumentFromSuperClassOrInterfaceByIndex(Class return getTypeArgumentFromInterfaceByIndex(clazz, expectedImplementedInterface, index); } catch (Exception ex) { // try on the parent - return getTypeArgumentFromSuperClassOrInterfaceByIndex(superclass, - expectedImplementedInterface, index); + return getTypeArgumentFromSuperClassOrInterfaceByIndex( + superclass, expectedImplementedInterface, index); } } } @@ -216,8 +221,11 @@ public static Class getTypeArgumentFromSuperClassOrInterfaceByIndex(Class } } - public static T instantiateAndConfigureIfNeeded(Class targetClass, - Class expectedType, String context, Configurator configurator) { + public static T instantiateAndConfigureIfNeeded( + Class targetClass, + Class expectedType, + String context, + Configurator configurator) { // if class to instantiate equals the expected interface, we cannot instantiate it so just // return null as it means we passed on void-type default value if (expectedType.equals(targetClass)) { @@ -232,11 +240,15 @@ public static T instantiateAndConfigureIfNeeded(Class targetCla } return instance; - } catch (InstantiationException | IllegalAccessException | InvocationTargetException + } catch (InstantiationException + | IllegalAccessException + | InvocationTargetException | IllegalStateException e) { - throw new OperatorException("Couldn't instantiate " + expectedType.getSimpleName() + " '" - + targetClass.getName() + "'." - + (context != null ? " Context: " + context : ""), e); + throw new OperatorException( + "Couldn't instantiate " + expectedType.getSimpleName() + " '" + + targetClass.getName() + "'." + + (context != null ? " Context: " + context : ""), + e); } } @@ -252,8 +264,8 @@ public static Constructor getConstructor(Class targetClass) { return constructor; } - public static T instantiate(Class toInstantiate, Class expectedType, - String context) { + public static T instantiate( + Class toInstantiate, Class expectedType, String context) { return instantiateAndConfigureIfNeeded(toInstantiate, expectedType, context, null); } @@ -263,7 +275,8 @@ public interface Configurator { } @SuppressWarnings("rawtypes") - public static String contextFor(ControllerConfiguration controllerConfiguration, + public static String contextFor( + ControllerConfiguration controllerConfiguration, Class dependentType, Class configurationAnnotation) { return contextFor(controllerConfiguration.getName(), dependentType, configurationAnnotation); @@ -274,13 +287,13 @@ public static String contextFor(String reconcilerName) { } @SuppressWarnings("rawtypes") - public static String contextFor(String reconcilerName, + public static String contextFor( + String reconcilerName, Class dependentType, Class configurationAnnotation) { - final var annotationName = - configurationAnnotation != null ? configurationAnnotation.getSimpleName() - : io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration.class - .getSimpleName(); + final var annotationName = configurationAnnotation != null + ? configurationAnnotation.getSimpleName() + : io.javaoperatorsdk.operator.api.reconciler.ControllerConfiguration.class.getSimpleName(); var context = "annotation: " + annotationName + ", "; if (dependentType != null) { context += "DependentResource: " + dependentType.getName() + ", "; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/ConfigurationConverter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/ConfigurationConverter.java index f0327514ae..beebc16239 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/ConfigurationConverter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/ConfigurationConverter.java @@ -6,6 +6,8 @@ public interface ConfigurationConverter { - C configFrom(A configAnnotation, DependentResourceSpec spec, + C configFrom( + A configAnnotation, + DependentResourceSpec spec, ControllerConfiguration parentConfiguration); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolver.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolver.java index 471b0f6a8e..7a3353b8b6 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolver.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolver.java @@ -16,9 +16,8 @@ private DependentResourceConfigurationResolver() {} private static final Map, ConverterAnnotationPair> converters = new HashMap<>(); - private static final Map, ConfigurationConverter> knownConverters = - new HashMap<>(); - + private static final Map, ConfigurationConverter> + knownConverters = new HashMap<>(); public static > void configureSpecFromConfigured( DependentResourceSpec spec, @@ -37,10 +36,8 @@ public static > void configureSpecFromConfi converterAnnotationPair = converters.get(configuredClassPair.annotatedClass); if (converterAnnotationPair == null) { final var configured = configuredClassPair.configured; - converterAnnotationPair = - getOrCreateConverter(dependentResourceClass, parentConfiguration, - configured.converter(), - configured.by()); + converterAnnotationPair = getOrCreateConverter( + dependentResourceClass, parentConfiguration, configured.converter(), configured.by()); } else { // only register the converter pair for this dependent resource class as well converters.put(dependentResourceClass, converterAnnotationPair); @@ -74,16 +71,19 @@ private static ConfiguredClassPair getConfigured( return result; } - private static > ConverterAnnotationPair getOrCreateConverter( - Class dependentResourceClass, C parentConfiguration, - Class converterClass, - Class annotationClass) { + private static > + ConverterAnnotationPair getOrCreateConverter( + Class dependentResourceClass, + C parentConfiguration, + Class converterClass, + Class annotationClass) { var converterPair = converters.get(dependentResourceClass); if (converterPair == null) { // only instantiate a new converter if we haven't done so already for this converter type var converter = knownConverters.get(converterClass); if (converter == null) { - converter = Utils.instantiate(converterClass, + converter = Utils.instantiate( + converterClass, ConfigurationConverter.class, Utils.contextFor(parentConfiguration, dependentResourceClass, Configured.class)); knownConverters.put(converterClass, converter); @@ -102,8 +102,8 @@ static ConfigurationConverter getConverter( } @SuppressWarnings("unused") - public static void registerConverter(Class dependentResourceClass, - ConfigurationConverter converter) { + public static void registerConverter( + Class dependentResourceClass, ConfigurationConverter converter) { var configured = getConfigured(dependentResourceClass); if (configured == null) { throw new IllegalArgumentException("There is no @" + Configured.class.getSimpleName() @@ -134,8 +134,8 @@ private static class ConfiguredClassPair { private final Configured configured; private final Class annotatedClass; - private ConfiguredClassPair(Configured configured, - Class annotatedClass) { + private ConfiguredClassPair( + Configured configured, Class annotatedClass) { this.configured = configured; this.annotatedClass = annotatedClass; } @@ -150,8 +150,8 @@ private static class ConverterAnnotationPair { private final ConfigurationConverter converter; private final Class annotationClass; - private ConverterAnnotationPair(ConfigurationConverter converter, - Class annotationClass) { + private ConverterAnnotationPair( + ConfigurationConverter converter, Class annotationClass) { this.converter = converter; this.annotationClass = annotationClass; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceSpec.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceSpec.java index accccb3f6e..fed37db96c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceSpec.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceSpec.java @@ -20,10 +20,15 @@ public class DependentResourceSpec { private final String useEventSourceWithName; private C nullableConfiguration; - public DependentResourceSpec(Class> dependentResourceClass, - String name, Set dependsOn, Condition readyCondition, - Condition reconcileCondition, Condition deletePostCondition, - Condition activationCondition, String useEventSourceWithName) { + public DependentResourceSpec( + Class> dependentResourceClass, + String name, + Set dependsOn, + Condition readyCondition, + Condition reconcileCondition, + Condition deletePostCondition, + Condition activationCondition, + String useEventSourceWithName) { this.dependentResourceClass = dependentResourceClass; this.name = name; this.dependsOn = dependsOn; @@ -44,8 +49,8 @@ public String getName() { @Override public String toString() { - return "DependentResourceSpec{ name='" + name + - "', type=" + getDependentResourceClass().getCanonicalName() + '}'; + return "DependentResourceSpec{ name='" + name + "', type=" + + getDependentResourceClass().getCanonicalName() + '}'; } @Override @@ -100,5 +105,4 @@ public Optional getConfiguration() { protected void setNullableConfiguration(C configuration) { this.nullableConfiguration = configuration; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/Informer.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/Informer.java index cdbf07a5c1..4ac4e7824c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/Informer.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/Informer.java @@ -38,7 +38,7 @@ *

  • {@link Constants#WATCH_CURRENT_NAMESPACE}
  • *
  • {@link Constants#SAME_AS_CONTROLLER}
  • * - * + * * @return the array of namespaces the associated informer monitors */ String[] namespaces() default {Constants.SAME_AS_CONTROLLER}; @@ -115,5 +115,4 @@ * the informer cache. */ long informerListLimit() default NO_LONG_VALUE_SET; - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java index 0c55353b86..b0db15b568 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerConfiguration.java @@ -21,7 +21,6 @@ import static io.javaoperatorsdk.operator.api.reconciler.Constants.*; - @SuppressWarnings("unused") public class InformerConfiguration { private final Builder builder = new Builder(); @@ -38,11 +37,18 @@ public class InformerConfiguration { private ItemStore itemStore; private Long informerListLimit; - protected InformerConfiguration(Class resourceClass, String name, Set namespaces, + protected InformerConfiguration( + Class resourceClass, + String name, + Set namespaces, boolean followControllerNamespaceChanges, - String labelSelector, OnAddFilter onAddFilter, - OnUpdateFilter onUpdateFilter, OnDeleteFilter onDeleteFilter, - GenericFilter genericFilter, ItemStore itemStore, Long informerListLimit) { + String labelSelector, + OnAddFilter onAddFilter, + OnUpdateFilter onUpdateFilter, + OnDeleteFilter onDeleteFilter, + GenericFilter genericFilter, + ItemStore itemStore, + Long informerListLimit) { this(resourceClass); this.name = name; this.namespaces = namespaces; @@ -74,10 +80,19 @@ public static InformerConfiguration.Builder builder( @SuppressWarnings({"rawtypes", "unchecked"}) public static InformerConfiguration.Builder builder( InformerConfiguration original) { - return new InformerConfiguration(original.resourceClass, original.name, original.namespaces, - original.followControllerNamespaceChanges, original.labelSelector, original.onAddFilter, - original.onUpdateFilter, original.onDeleteFilter, original.genericFilter, - original.itemStore, original.informerListLimit).builder; + return new InformerConfiguration( + original.resourceClass, + original.name, + original.namespaces, + original.followControllerNamespaceChanges, + original.labelSelector, + original.onAddFilter, + original.onUpdateFilter, + original.onDeleteFilter, + original.genericFilter, + original.itemStore, + original.informerListLimit) + .builder; } public static String ensureValidLabelSelector(String labelSelector) { @@ -97,8 +112,8 @@ public static boolean currentNamespaceWatched(Set namespaces) { public static void failIfNotValid(Set namespaces) { if (namespaces != null && !namespaces.isEmpty()) { - final var present = namespaces.contains(WATCH_CURRENT_NAMESPACE) - || namespaces.contains(WATCH_ALL_NAMESPACES); + final var present = + namespaces.contains(WATCH_CURRENT_NAMESPACE) || namespaces.contains(WATCH_ALL_NAMESPACES); if (!present || namespaces.size() == 1) { return; } @@ -164,9 +179,11 @@ public Set getEffectiveNamespaces(ControllerConfiguration controllerC var targetNamespaces = getNamespaces(); if (watchCurrentNamespace()) { - final String namespace = - controllerConfiguration.getConfigurationService().getKubernetesClient().getConfiguration() - .getNamespace(); + final String namespace = controllerConfiguration + .getConfigurationService() + .getKubernetesClient() + .getConfiguration() + .getNamespace(); if (namespace == null) { throw new OperatorException( "Couldn't retrieve the currently connected namespace. Make sure it's correctly set in your ~/.kube/config file, using, e.g. 'kubectl config set-context --namespace='"); @@ -245,7 +262,6 @@ public Long getInformerListLimit() { return informerListLimit; } - @SuppressWarnings("UnusedReturnValue") public class Builder { @@ -253,7 +269,8 @@ public class Builder { public InformerConfiguration buildForController() { // if the informer config uses the default "same as controller" value, reset the namespaces to // the default set for controllers - if (namespaces == null || namespaces.isEmpty() + if (namespaces == null + || namespaces.isEmpty() || inheritsNamespacesFromController(namespaces)) { namespaces = Constants.DEFAULT_NAMESPACES_SET; } @@ -268,15 +285,14 @@ public InformerConfiguration build() { namespaces = Constants.SAME_AS_CONTROLLER_NAMESPACES_SET; } if (followControllerNamespaceChanges == null) { - followControllerNamespaceChanges = - DEFAULT_FOLLOW_CONTROLLER_NAMESPACE_CHANGES; + followControllerNamespaceChanges = DEFAULT_FOLLOW_CONTROLLER_NAMESPACE_CHANGES; } return InformerConfiguration.this; } @SuppressWarnings({"unchecked"}) - public InformerConfiguration.Builder initFromAnnotation(Informer informerConfig, - String context) { + public InformerConfiguration.Builder initFromAnnotation( + Informer informerConfig, String context) { if (informerConfig != null) { // override default name if more specific one is provided @@ -291,24 +307,21 @@ public InformerConfiguration.Builder initFromAnnotation(Informer informerConf var labelSelector = Constants.NO_VALUE_SET.equals(fromAnnotation) ? null : fromAnnotation; withLabelSelector(labelSelector); - withOnAddFilter(Utils.instantiate(informerConfig.onAddFilter(), - OnAddFilter.class, context)); + withOnAddFilter( + Utils.instantiate(informerConfig.onAddFilter(), OnAddFilter.class, context)); - withOnUpdateFilter(Utils.instantiate(informerConfig.onUpdateFilter(), - OnUpdateFilter.class, context)); + withOnUpdateFilter( + Utils.instantiate(informerConfig.onUpdateFilter(), OnUpdateFilter.class, context)); - withOnDeleteFilter(Utils.instantiate(informerConfig.onDeleteFilter(), - OnDeleteFilter.class, context)); + withOnDeleteFilter( + Utils.instantiate(informerConfig.onDeleteFilter(), OnDeleteFilter.class, context)); - withGenericFilter(Utils.instantiate(informerConfig.genericFilter(), - GenericFilter.class, - context)); + withGenericFilter( + Utils.instantiate(informerConfig.genericFilter(), GenericFilter.class, context)); - withFollowControllerNamespacesChanges( - informerConfig.followControllerNamespaceChanges()); + withFollowControllerNamespacesChanges(informerConfig.followControllerNamespaceChanges()); - withItemStore(Utils.instantiate(informerConfig.itemStore(), - ItemStore.class, context)); + withItemStore(Utils.instantiate(informerConfig.itemStore(), ItemStore.class, context)); final var informerListLimitValue = informerConfig.informerListLimit(); final var informerListLimit = @@ -324,8 +337,7 @@ public Builder withName(String name) { } public Builder withNamespaces(Set namespaces) { - InformerConfiguration.this.namespaces = - ensureValidNamespaces(namespaces); + InformerConfiguration.this.namespaces = ensureValidNamespaces(namespaces); return this; } @@ -363,7 +375,6 @@ public Builder withWatchCurrentNamespace() { return this; } - /** * Whether the associated informer should track changes made to the parent * {@link io.javaoperatorsdk.operator.processing.Controller}'s namespaces configuration. @@ -373,37 +384,31 @@ public Builder withWatchCurrentNamespace() { * @return the builder instance so that calls can be chained fluently */ public Builder withFollowControllerNamespacesChanges(boolean followChanges) { - InformerConfiguration.this.followControllerNamespaceChanges = - followChanges; + InformerConfiguration.this.followControllerNamespaceChanges = followChanges; return this; } public Builder withLabelSelector(String labelSelector) { - InformerConfiguration.this.labelSelector = - ensureValidLabelSelector(labelSelector); + InformerConfiguration.this.labelSelector = ensureValidLabelSelector(labelSelector); return this; } - public Builder withOnAddFilter( - OnAddFilter onAddFilter) { + public Builder withOnAddFilter(OnAddFilter onAddFilter) { InformerConfiguration.this.onAddFilter = onAddFilter; return this; } - public Builder withOnUpdateFilter( - OnUpdateFilter onUpdateFilter) { + public Builder withOnUpdateFilter(OnUpdateFilter onUpdateFilter) { InformerConfiguration.this.onUpdateFilter = onUpdateFilter; return this; } - public Builder withOnDeleteFilter( - OnDeleteFilter onDeleteFilter) { + public Builder withOnDeleteFilter(OnDeleteFilter onDeleteFilter) { InformerConfiguration.this.onDeleteFilter = onDeleteFilter; return this; } - public Builder withGenericFilter( - GenericFilter genericFilter) { + public Builder withGenericFilter(GenericFilter genericFilter) { InformerConfiguration.this.genericFilter = genericFilter; return this; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerEventSourceConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerEventSourceConfiguration.java index c3c2777049..a5c6efebd0 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerEventSourceConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/config/informer/InformerEventSourceConfiguration.java @@ -22,8 +22,7 @@ import static io.javaoperatorsdk.operator.api.reconciler.Constants.WATCH_ALL_NAMESPACE_SET; import static io.javaoperatorsdk.operator.api.reconciler.Constants.WATCH_CURRENT_NAMESPACE_SET; -public interface InformerEventSourceConfiguration - extends Informable { +public interface InformerEventSourceConfiguration extends Informable { static Builder from( Class resourceClass, Class primaryResourceClass) { @@ -135,19 +134,20 @@ class Builder { private SecondaryToPrimaryMapper secondaryToPrimaryMapper; private KubernetesClient kubernetesClient; - private Builder(Class resourceClass, - Class primaryResourceClass) { + private Builder(Class resourceClass, Class primaryResourceClass) { this(resourceClass, primaryResourceClass, null); } @SuppressWarnings("unchecked") - private Builder(GroupVersionKind groupVersionKind, - Class primaryResourceClass) { + private Builder( + GroupVersionKind groupVersionKind, Class primaryResourceClass) { this((Class) GenericKubernetesResource.class, primaryResourceClass, groupVersionKind); } - private Builder(Class resourceClass, - Class primaryResourceClass, GroupVersionKind groupVersionKind) { + private Builder( + Class resourceClass, + Class primaryResourceClass, + GroupVersionKind groupVersionKind) { this.resourceClass = resourceClass; this.groupVersionKind = groupVersionKind; this.primaryResourceClass = primaryResourceClass; @@ -176,8 +176,7 @@ public Builder withSecondaryToPrimaryMapper( * Use this is case want to create an InformerEventSource that handles resources from different * cluster. */ - public Builder withKubernetesClient( - KubernetesClient kubernetesClient) { + public Builder withKubernetesClient(KubernetesClient kubernetesClient) { this.kubernetesClient = kubernetesClient; return this; } @@ -210,7 +209,6 @@ public Builder withWatchCurrentNamespace() { return this; } - /** * Whether the associated informer should track changes made to the parent * {@link io.javaoperatorsdk.operator.processing.Controller}'s namespaces configuration. @@ -229,26 +227,22 @@ public Builder withLabelSelector(String labelSelector) { return this; } - public Builder withOnAddFilter( - OnAddFilter onAddFilter) { + public Builder withOnAddFilter(OnAddFilter onAddFilter) { config.withOnAddFilter(onAddFilter); return this; } - public Builder withOnUpdateFilter( - OnUpdateFilter onUpdateFilter) { + public Builder withOnUpdateFilter(OnUpdateFilter onUpdateFilter) { config.withOnUpdateFilter(onUpdateFilter); return this; } - public Builder withOnDeleteFilter( - OnDeleteFilter onDeleteFilter) { + public Builder withOnDeleteFilter(OnDeleteFilter onDeleteFilter) { config.withOnDeleteFilter(onDeleteFilter); return this; } - public Builder withGenericFilter( - GenericFilter genericFilter) { + public Builder withGenericFilter(GenericFilter genericFilter) { config.withGenericFilter(genericFilter); return this; } @@ -269,7 +263,8 @@ public void updateFrom(InformerConfiguration informerConfig) { if (informerConfigName != null) { this.name = informerConfigName; } - config.withNamespaces(informerConfig.getNamespaces()) + config + .withNamespaces(informerConfig.getNamespaces()) .withFollowControllerNamespacesChanges( informerConfig.getFollowControllerNamespaceChanges()) .withLabelSelector(informerConfig.getLabelSelector()) @@ -292,10 +287,14 @@ public InformerEventSourceConfiguration build() { return new DefaultInformerEventSourceConfiguration<>( groupVersionKind, primaryToSecondaryMapper, - Objects.requireNonNullElse(secondaryToPrimaryMapper, - Mappers.fromOwnerReferences(HasMetadata.getApiVersion(primaryResourceClass), - HasMetadata.getKind(primaryResourceClass), false)), - config.build(), kubernetesClient); + Objects.requireNonNullElse( + secondaryToPrimaryMapper, + Mappers.fromOwnerReferences( + HasMetadata.getApiVersion(primaryResourceClass), + HasMetadata.getKind(primaryResourceClass), + false)), + config.build(), + kubernetesClient); } } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/monitoring/Metrics.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/monitoring/Metrics.java index bb34e5f760..1e0bee65b5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/monitoring/Metrics.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/monitoring/Metrics.java @@ -36,7 +36,6 @@ default void controllerRegistered(Controller controller) */ default void receivedEvent(Event event, Map metadata) {} - /** * Called right before a resource is dispatched to the ExecutorService for reconciliation. * @@ -44,8 +43,8 @@ default void receivedEvent(Event event, Map metadata) {} * @param retryInfo the current retry state information for the reconciliation request * @param metadata metadata associated with the resource being processed */ - default void reconcileCustomResource(HasMetadata resource, RetryInfo retryInfo, - Map metadata) {} + default void reconcileCustomResource( + HasMetadata resource, RetryInfo retryInfo, Map metadata) {} /** * Called when a precedent reconciliation for the resource associated with the specified @@ -56,15 +55,13 @@ default void reconcileCustomResource(HasMetadata resource, RetryInfo retryInfo, * @param exception the exception that caused the failed reconciliation resulting in a retry * @param metadata metadata associated with the resource being processed */ - default void failedReconciliation(HasMetadata resource, Exception exception, - Map metadata) {} - + default void failedReconciliation( + HasMetadata resource, Exception exception, Map metadata) {} default void reconciliationExecutionStarted(HasMetadata resource, Map metadata) {} - default void reconciliationExecutionFinished(HasMetadata resource, - Map metadata) {} - + default void reconciliationExecutionFinished( + HasMetadata resource, Map metadata) {} /** * Called when the resource associated with the specified {@link ResourceID} has been successfully diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Cleaner.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Cleaner.java index cd683fbc31..02f51abd68 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Cleaner.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Cleaner.java @@ -28,5 +28,4 @@ public interface Cleaner

    { * @see DeleteControl#noFinalizerRemoval() */ DeleteControl cleanup(P resource, Context

    context) throws Exception; - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java index 0134ea0a04..52c0ca9fd5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Context.java @@ -67,5 +67,4 @@ default Stream getSecondaryResourcesAsStream(Class expectedType) { * @return {@code true} is another reconciliation is already scheduled, {@code false} otherwise **/ boolean isNextReconciliationImminent(); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java index eb709b0d5a..45b3aa0d4c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/ControllerConfiguration.java @@ -48,8 +48,8 @@ * * @return the maximal reconciliation interval configuration */ - MaxReconciliationInterval maxReconciliationInterval() default @MaxReconciliationInterval( - interval = MaxReconciliationInterval.DEFAULT_INTERVAL); + MaxReconciliationInterval maxReconciliationInterval() default + @MaxReconciliationInterval(interval = MaxReconciliationInterval.DEFAULT_INTERVAL); /** * Optional {@link Retry} implementation for the associated controller to use. diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java index ce6f67176c..b5ea66f8bc 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContext.java @@ -22,7 +22,8 @@ public class DefaultContext

    implements Context

    { private final Controller

    controller; private final P primaryResource; private final ControllerConfiguration

    controllerConfiguration; - private final DefaultManagedWorkflowAndDependentResourceContext

    defaultManagedDependentResourceContext; + private final DefaultManagedWorkflowAndDependentResourceContext

    + defaultManagedDependentResourceContext; public DefaultContext(RetryInfo retryInfo, Controller

    controller, P primaryResource) { this.retryInfo = retryInfo; @@ -50,7 +51,8 @@ public IndexedResourceCache

    getPrimaryCache() { @Override public boolean isNextReconciliationImminent() { - return controller.getEventProcessor() + return controller + .getEventProcessor() .isNextReconciliationImminent(ResourceID.fromResource(primaryResource)); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java index 4f0f08b3b8..097cd6c1a6 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceContext.java @@ -18,7 +18,8 @@ public class EventSourceContext

    { private final KubernetesClient client; private final Class

    primaryResourceClass; - public EventSourceContext(IndexerResourceCache

    primaryCache, + public EventSourceContext( + IndexerResourceCache

    primaryCache, ControllerConfiguration

    controllerConfiguration, KubernetesClient client, Class

    primaryResourceClass) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java index 9531599072..cf6cf21486 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/EventSourceUtils.java @@ -13,14 +13,15 @@ public class EventSourceUtils { public static

    List> dependentEventSources( EventSourceContext

    eventSourceContext, DependentResource... dependentResources) { return Arrays.stream(dependentResources) - .flatMap(dr -> dr.eventSource(eventSourceContext).stream()).toList(); + .flatMap(dr -> dr.eventSource(eventSourceContext).stream()) + .toList(); } @SuppressWarnings("unchecked") public static

    List> eventSourcesFromWorkflow( - EventSourceContext

    context, - Workflow

    workflow) { + EventSourceContext

    context, Workflow

    workflow) { return workflow.getDependentResourcesWithoutActivationCondition().stream() - .flatMap(dr -> dr.eventSource(context).stream()).toList(); + .flatMap(dr -> dr.eventSource(context).stream()) + .toList(); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Ignore.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Ignore.java index ad2a755db8..2383e9c399 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Ignore.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Ignore.java @@ -12,6 +12,4 @@ */ @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) -public @interface Ignore { - -} +public @interface Ignore {} diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/MaxReconciliationInterval.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/MaxReconciliationInterval.java index 056cdec805..4ff078dc85 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/MaxReconciliationInterval.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/MaxReconciliationInterval.java @@ -34,5 +34,4 @@ * @return time unit for max delay between reconciliations */ TimeUnit timeUnit() default TimeUnit.HOURS; - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java index 1545a87fe9..7f3970f1d6 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/Reconciler.java @@ -50,9 +50,8 @@ default List> prepareEventSources(EventSourceContext

    contex * @param e exception thrown from the reconciler * @return the updated resource */ - default ErrorStatusUpdateControl

    updateErrorStatus(P resource, Context

    context, - Exception e) { + default ErrorStatusUpdateControl

    updateErrorStatus( + P resource, Context

    context, Exception e) { return ErrorStatusUpdateControl.defaultErrorProcessing(); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java index a8ae1331d7..7308b834c1 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/UpdateControl.java @@ -11,8 +11,7 @@ public class UpdateControl

    extends BaseControl, D extends DependentResourceSpec> { +public interface DependentResourceFactory< + C extends ControllerConfiguration, D extends DependentResourceSpec> { DependentResourceFactory DEFAULT = new DependentResourceFactory() {}; default DependentResource createFrom(D spec, C controllerConfiguration) { final var dependentResourceClass = spec.getDependentResourceClass(); - return Utils.instantiateAndConfigureIfNeeded(dependentResourceClass, + return Utils.instantiateAndConfigureIfNeeded( + dependentResourceClass, DependentResource.class, Utils.contextFor(controllerConfiguration, dependentResourceClass, Dependent.class), (instance) -> configure(instance, spec, controllerConfiguration)); @@ -29,9 +31,8 @@ default void configure(DependentResource instance, D spec, C controllerConfigura default Class associatedResourceType(D spec) { final var dependentResourceClass = spec.getDependentResourceClass(); - final var dr = Utils.instantiateAndConfigureIfNeeded(dependentResourceClass, - DependentResource.class, - null, null); + final var dr = Utils.instantiateAndConfigureIfNeeded( + dependentResourceClass, DependentResource.class, null, null); return dr != null ? dr.resourceType() : null; } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/EventSourceReferencer.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/EventSourceReferencer.java index b2f8c95692..d1b288df24 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/EventSourceReferencer.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/EventSourceReferencer.java @@ -15,5 +15,4 @@ default void useEventSourceWithName(String name) {} */ void resolveEventSource(EventSourceRetriever

    eventSourceRetriever) throws EventSourceNotFoundException; - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/GarbageCollected.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/GarbageCollected.java index 91afbf5e5c..e5b20f668e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/GarbageCollected.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/GarbageCollected.java @@ -25,5 +25,4 @@ * * @param

    primary resource type */ -public interface GarbageCollected

    extends Deleter

    { -} +public interface GarbageCollected

    extends Deleter

    {} diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/NameSetter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/NameSetter.java index 952bf14490..25c87045f1 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/NameSetter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/NameSetter.java @@ -3,5 +3,4 @@ public interface NameSetter { void setName(String name); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/ReconcileResult.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/ReconcileResult.java index 66d982f01d..21af5754e5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/ReconcileResult.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/ReconcileResult.java @@ -38,9 +38,10 @@ public static ReconcileResult aggregatedResult(List> r @Override public String toString() { - return resourceOperations.entrySet().stream().collect(Collectors.toMap( - e -> e instanceof HasMetadata ? ResourceID.fromResource((HasMetadata) e) : e, - Map.Entry::getValue)) + return resourceOperations.entrySet().stream() + .collect(Collectors.toMap( + e -> e instanceof HasMetadata ? ResourceID.fromResource((HasMetadata) e) : e, + Map.Entry::getValue)) .toString(); } @@ -57,7 +58,9 @@ public Optional getSingleResource() { } public Operation getSingleOperation() { - return resourceOperations.entrySet().stream().findFirst().map(Map.Entry::getValue) + return resourceOperations.entrySet().stream() + .findFirst() + .map(Map.Entry::getValue) .orElseThrow(); } @@ -67,6 +70,8 @@ public Map getResourceOperations() { } public enum Operation { - CREATED, UPDATED, NONE + CREATED, + UPDATED, + NONE } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ConfiguredDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ConfiguredDependentResource.java index 326482aab0..2c9946d866 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ConfiguredDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ConfiguredDependentResource.java @@ -2,7 +2,6 @@ import java.util.Optional; - public interface ConfiguredDependentResource { void configureWith(C config); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedWorkflowAndDependentResourceContext.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedWorkflowAndDependentResourceContext.java index bf9ead4c97..da9f17c07e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedWorkflowAndDependentResourceContext.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedWorkflowAndDependentResourceContext.java @@ -24,9 +24,8 @@ public class DefaultManagedWorkflowAndDependentResourceContext

    context; - public DefaultManagedWorkflowAndDependentResourceContext(Controller

    controller, - P primaryResource, - Context

    context) { + public DefaultManagedWorkflowAndDependentResourceContext( + Controller

    controller, P primaryResource, Context

    context) { this.controller = controller; this.primaryResource = primaryResource; this.context = context; @@ -50,11 +49,10 @@ public T put(Object key, T value) { } if (previous != null && !previous.getClass().isAssignableFrom(value.getClass())) { - logWarning("Previous value (" + previous + - ") for key (" + key + - ") was not of type " + value.getClass() + - ". This might indicate an issue in your code. If not, use put(" + key + - ", null) first to remove the previous value."); + logWarning("Previous value (" + previous + ") for key (" + + key + ") was not of type " + + value.getClass() + ". This might indicate an issue in your code. If not, use put(" + + key + ", null) first to remove the previous value."); } return (T) previous; } @@ -67,9 +65,9 @@ void logWarning(String message) { @Override @SuppressWarnings("unused") public T getMandatory(Object key, Class expectedType) { - return get(key, expectedType).orElseThrow(() -> new IllegalStateException( - "Mandatory attribute (key: " + key + ", type: " + expectedType.getName() - + ") is missing or not of the expected type")); + return get(key, expectedType) + .orElseThrow(() -> new IllegalStateException("Mandatory attribute (key: " + key + ", type: " + + expectedType.getName() + ") is missing or not of the expected type")); } @Override diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedDependentResourceException.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedDependentResourceException.java index 4fbdd65241..5c09a47e08 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedDependentResourceException.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedDependentResourceException.java @@ -5,8 +5,8 @@ public class ManagedDependentResourceException extends OperatorException { private final String associatedDependentName; - public ManagedDependentResourceException(String associatedDependentName, String message, - Throwable cause) { + public ManagedDependentResourceException( + String associatedDependentName, String message, Throwable cause) { super(message, cause); this.associatedDependentName = associatedDependentName; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedWorkflowAndDependentResourceContext.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedWorkflowAndDependentResourceContext.java index 0dfd323d9a..db1d8fec1b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedWorkflowAndDependentResourceContext.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/ManagedWorkflowAndDependentResourceContext.java @@ -85,5 +85,4 @@ public interface ManagedWorkflowAndDependentResourceContext { * @throws IllegalStateException if called when explicit invocation is not requested */ WorkflowCleanupResult cleanupManageWorkflow(); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/ControllerHealthInfo.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/ControllerHealthInfo.java index 1d65922f11..650fa86614 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/ControllerHealthInfo.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/ControllerHealthInfo.java @@ -27,12 +27,12 @@ public Map unhealthyEventSources() { .collect(Collectors.toMap(EventSource::name, e -> e)); } - public Map informerEventSourceHealthIndicators() { + public Map + informerEventSourceHealthIndicators() { return eventSourceManager.allEventSources().stream() .filter(e -> e instanceof InformerWrappingEventSourceHealthIndicator) - .collect(Collectors.toMap(EventSource::name, - e -> (InformerWrappingEventSourceHealthIndicator) e)); - + .collect(Collectors.toMap( + EventSource::name, e -> (InformerWrappingEventSourceHealthIndicator) e)); } /** @@ -40,12 +40,12 @@ public Map informerEventSour * {@link ControllerEventSource} or an * {@link io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource}. */ - public Map unhealthyInformerEventSourceHealthIndicators() { + public Map + unhealthyInformerEventSourceHealthIndicators() { return eventSourceManager.allEventSources().stream() .filter(e -> e.getStatus() == Status.UNHEALTHY) .filter(e -> e instanceof InformerWrappingEventSourceHealthIndicator) - .collect(Collectors.toMap(EventSource::name, - e -> (InformerWrappingEventSourceHealthIndicator) e)); + .collect(Collectors.toMap( + EventSource::name, e -> (InformerWrappingEventSourceHealthIndicator) e)); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/InformerWrappingEventSourceHealthIndicator.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/InformerWrappingEventSourceHealthIndicator.java index da9b2ace2c..9f2220500c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/InformerWrappingEventSourceHealthIndicator.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/InformerWrappingEventSourceHealthIndicator.java @@ -12,7 +12,8 @@ public interface InformerWrappingEventSourceHealthIndicator i.getStatus() != Status.HEALTHY).findAny(); + .filter(i -> i.getStatus() != Status.HEALTHY) + .findAny(); return nonUp.isPresent() ? Status.UNHEALTHY : Status.HEALTHY; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/Status.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/Status.java index 272c360a87..f80f196098 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/Status.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/health/Status.java @@ -4,11 +4,10 @@ * The health status of an {@link io.javaoperatorsdk.operator.processing.event.source.EventSource} */ public enum Status { - - HEALTHY, UNHEALTHY, + HEALTHY, + UNHEALTHY, /** * For event sources where it cannot be determined if it is healthy ot not. */ UNKNOWN - } 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 491ac7fb01..23ec67dfab 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 @@ -51,8 +51,7 @@ @SuppressWarnings({"unchecked", "rawtypes"}) @Ignore public class Controller

    - implements Reconciler

    , LifecycleAware, Cleaner

    , - RegisteredController

    { + implements Reconciler

    , LifecycleAware, Cleaner

    , RegisteredController

    { private static final Logger log = LoggerFactory.getLogger(Controller.class); private static final String CLEANUP = "cleanup"; @@ -78,7 +77,8 @@ public class Controller

    private final ControllerHealthInfo controllerHealthInfo; private final EventSourceContext

    eventSourceContext; - public Controller(Reconciler

    reconciler, + public Controller( + Reconciler

    reconciler, ControllerConfiguration

    configuration, KubernetesClient kubernetesClient) { // needs to be initialized early since it's used in other downstream classes @@ -95,15 +95,16 @@ public Controller(Reconciler

    reconciler, final var managed = configurationService.getWorkflowFactory().workflowFor(configuration); managedWorkflow = managed.resolve(kubernetesClient, configuration); explicitWorkflowInvocation = - configuration.getWorkflowSpec().map(WorkflowSpec::isExplicitInvocation) - .orElse(false); + configuration.getWorkflowSpec().map(WorkflowSpec::isExplicitInvocation).orElse(false); eventSourceManager = new EventSourceManager<>(this); eventProcessor = new EventProcessor<>(eventSourceManager, configurationService); eventSourceManager.postProcessDefaultEventSourcesAfterProcessorInitializer(); controllerHealthInfo = new ControllerHealthInfo(eventSourceManager); eventSourceContext = new EventSourceContext<>( - eventSourceManager.getControllerEventSource(), configuration, kubernetesClient, + eventSourceManager.getControllerEventSource(), + configuration, + kubernetesClient, configuration.getResourceClass()); initAndRegisterEventSources(eventSourceContext); configurationService.getMetrics().controllerRegistered(this); @@ -111,108 +112,106 @@ public Controller(Reconciler

    reconciler, @Override public UpdateControl

    reconcile(P resource, Context

    context) throws Exception { - return metrics.timeControllerExecution( - new ControllerExecution<>() { - @Override - public String name() { - return RECONCILE; - } + return metrics.timeControllerExecution(new ControllerExecution<>() { + @Override + public String name() { + return RECONCILE; + } - @Override - public String controllerName() { - return configuration.getName(); - } + @Override + public String controllerName() { + return configuration.getName(); + } - @Override - public String successTypeName(UpdateControl

    result) { - String successType = RESOURCE; - if (result.isPatchStatus()) { - successType = STATUS; - } - if (result.isPatchResourceAndStatus()) { - successType = BOTH; - } - return successType; - } + @Override + public String successTypeName(UpdateControl

    result) { + String successType = RESOURCE; + if (result.isPatchStatus()) { + successType = STATUS; + } + if (result.isPatchResourceAndStatus()) { + successType = BOTH; + } + return successType; + } - @Override - public ResourceID resourceID() { - return ResourceID.fromResource(resource); - } + @Override + public ResourceID resourceID() { + return ResourceID.fromResource(resource); + } - @Override - public Map metadata() { - return Map.of(Constants.RESOURCE_GVK_KEY, associatedGVK); - } + @Override + public Map metadata() { + return Map.of(Constants.RESOURCE_GVK_KEY, associatedGVK); + } - @Override - public UpdateControl

    execute() throws Exception { - initContextIfNeeded(resource, context); - configuration.getWorkflowSpec().ifPresent(ws -> { - if (!managedWorkflow.isEmpty() && !explicitWorkflowInvocation) { - managedWorkflow.reconcile(resource, context); - } - }); - return reconciler.reconcile(resource, context); + @Override + public UpdateControl

    execute() throws Exception { + initContextIfNeeded(resource, context); + configuration.getWorkflowSpec().ifPresent(ws -> { + if (!managedWorkflow.isEmpty() && !explicitWorkflowInvocation) { + managedWorkflow.reconcile(resource, context); } }); + return reconciler.reconcile(resource, context); + } + }); } @Override public DeleteControl cleanup(P resource, Context

    context) { try { - return metrics.timeControllerExecution( - new ControllerExecution<>() { - @Override - public String name() { - return CLEANUP; - } - - @Override - public String controllerName() { - return configuration.getName(); - } - - @Override - public String successTypeName(DeleteControl deleteControl) { - return deleteControl.isRemoveFinalizer() ? DELETE : FINALIZER_NOT_REMOVED; - } - - @Override - public ResourceID resourceID() { - return ResourceID.fromResource(resource); - } - - @Override - public Map metadata() { - return Map.of(Constants.RESOURCE_GVK_KEY, associatedGVK); - } + return metrics.timeControllerExecution(new ControllerExecution<>() { + @Override + public String name() { + return CLEANUP; + } + + @Override + public String controllerName() { + return configuration.getName(); + } + + @Override + public String successTypeName(DeleteControl deleteControl) { + return deleteControl.isRemoveFinalizer() ? DELETE : FINALIZER_NOT_REMOVED; + } + + @Override + public ResourceID resourceID() { + return ResourceID.fromResource(resource); + } + + @Override + public Map metadata() { + return Map.of(Constants.RESOURCE_GVK_KEY, associatedGVK); + } + + @Override + public DeleteControl execute() throws Exception { + initContextIfNeeded(resource, context); + WorkflowCleanupResult workflowCleanupResult = null; + + // The cleanup is called also when explicit invocation is true, but the cleaner is not + // implemented, also in case when explicit invocation is false, but there is cleaner + // implemented. + if (managedWorkflow.hasCleaner() && (!explicitWorkflowInvocation || !isCleaner)) { + workflowCleanupResult = managedWorkflow.cleanup(resource, context); + } - @Override - public DeleteControl execute() throws Exception { - initContextIfNeeded(resource, context); - WorkflowCleanupResult workflowCleanupResult = null; - - // The cleanup is called also when explicit invocation is true, but the cleaner is not - // implemented, also in case when explicit invocation is false, but there is cleaner - // implemented. - if (managedWorkflow.hasCleaner() && (!explicitWorkflowInvocation || !isCleaner)) { - workflowCleanupResult = managedWorkflow.cleanup(resource, context); - } - - if (isCleaner) { - var cleanupResult = ((Cleaner

    ) reconciler).cleanup(resource, context); - if (!cleanupResult.isRemoveFinalizer()) { - return cleanupResult; - } else { - // this means there is no reschedule - return workflowCleanupResultToDefaultDelete(workflowCleanupResult); - } - } else { - return workflowCleanupResultToDefaultDelete(workflowCleanupResult); - } + if (isCleaner) { + var cleanupResult = ((Cleaner

    ) reconciler).cleanup(resource, context); + if (!cleanupResult.isRemoveFinalizer()) { + return cleanupResult; + } else { + // this means there is no reschedule + return workflowCleanupResultToDefaultDelete(workflowCleanupResult); } - }); + } else { + return workflowCleanupResultToDefaultDelete(workflowCleanupResult); + } + } + }); } catch (Exception e) { throw new OperatorException(e); } @@ -223,7 +222,8 @@ private DeleteControl workflowCleanupResultToDefaultDelete( if (workflowCleanupResult == null) { return DeleteControl.defaultDelete(); } else { - return workflowCleanupResult.allPostConditionsMet() ? DeleteControl.defaultDelete() + return workflowCleanupResult.allPostConditionsMet() + ? DeleteControl.defaultDelete() : DeleteControl.noFinalizerRemoval(); } } @@ -257,7 +257,9 @@ public void initAndRegisterEventSources(EventSourceContext

    context) { try { ((EventSourceReferencer

    ) dr).resolveEventSource(eventSourceManager); } catch (EventSourceNotFoundException e) { - unresolvable.computeIfAbsent(e.getEventSourceName(), s -> new ArrayList<>()).add(dr); + unresolvable + .computeIfAbsent(e.getEventSourceName(), s -> new ArrayList<>()) + .add(dr); } }); if (!unresolvable.isEmpty()) { @@ -329,8 +331,11 @@ public synchronized void start(boolean startEventProcessor) throws OperatorExcep final String controllerName = configuration.getName(); final var crdName = configuration.getResourceTypeName(); final var specVersion = "v1"; - log.info("Starting '{}' controller for reconciler: {}, resource: {}", controllerName, - configuration.getAssociatedReconcilerClassName(), resClass.getCanonicalName()); + log.info( + "Starting '{}' controller for reconciler: {}, resource: {}", + controllerName, + configuration.getAssociatedReconcilerClassName(), + resClass.getCanonicalName()); // fail early if we're missing the current namespace information failOnMissingCurrentNS(); @@ -348,13 +353,16 @@ public synchronized void start(boolean startEventProcessor) throws OperatorExcep } } - - private void validateCRDWithLocalModelIfRequired(Class

    resClass, String controllerName, - String crdName, String specVersion) { + private void validateCRDWithLocalModelIfRequired( + Class

    resClass, String controllerName, String crdName, String specVersion) { final CustomResourceDefinition crd; if (getConfiguration().getConfigurationService().checkCRDAndValidateLocalModel() && CustomResource.class.isAssignableFrom(resClass)) { - crd = kubernetesClient.apiextensions().v1().customResourceDefinitions().withName(crdName) + crd = kubernetesClient + .apiextensions() + .v1() + .customResourceDefinitions() + .withName(crdName) .get(); if (crd == null) { throwMissingCRDException(crdName, specVersion, controllerName); @@ -473,5 +481,4 @@ public boolean workflowContainsDependentForType(Class clazz) { return managedWorkflow.getDependentResourcesByName().values().stream() .anyMatch(d -> d.resourceType().equals(clazz)); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/GroupVersionKind.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/GroupVersionKind.java index f9cf38fa56..e73119c8ec 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/GroupVersionKind.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/GroupVersionKind.java @@ -12,7 +12,7 @@ public class GroupVersionKind { private final String version; private final String kind; private final String apiVersion; - protected final static Map, GroupVersionKind> CACHE = + protected static final Map, GroupVersionKind> CACHE = new ConcurrentHashMap<>(); public GroupVersionKind(String apiVersion, String kind) { @@ -33,8 +33,8 @@ public static GroupVersionKind gvkFor(Class resourceClass } private static GroupVersionKind computeGVK(Class rc) { - return new GroupVersionKind(HasMetadata.getGroup(rc), - HasMetadata.getVersion(rc), HasMetadata.getKind(rc)); + return new GroupVersionKind( + HasMetadata.getGroup(rc), HasMetadata.getVersion(rc), HasMetadata.getKind(rc)); } public GroupVersionKind(String group, String version, String kind) { @@ -100,10 +100,8 @@ public String apiVersion() { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; GroupVersionKind that = (GroupVersionKind) o; return Objects.equals(apiVersion, that.apiVersion) && Objects.equals(kind, that.kind); } @@ -115,10 +113,8 @@ public int hashCode() { @Override public String toString() { - return "GroupVersionKind{" + - "apiVersion='" + apiVersion + '\'' + - ", kind='" + kind + '\'' + - '}'; + return "GroupVersionKind{" + "apiVersion='" + + apiVersion + '\'' + ", kind='" + + kind + '\'' + '}'; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/LoggingUtils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/LoggingUtils.java index 1a180f6698..3b093cd818 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/LoggingUtils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/LoggingUtils.java @@ -10,5 +10,4 @@ private LoggingUtils() {} public static boolean isNotSensitiveResource(HasMetadata resource) { return !(resource instanceof Secret); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MDCUtils.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MDCUtils.java index d8bb3897c3..12348ed932 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MDCUtils.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/MDCUtils.java @@ -1,10 +1,9 @@ package io.javaoperatorsdk.operator.processing; -import io.fabric8.kubernetes.api.model.ObjectMeta; -import io.javaoperatorsdk.operator.api.config.Utils; import org.slf4j.MDC; import io.fabric8.kubernetes.api.model.HasMetadata; +import io.javaoperatorsdk.operator.api.config.Utils; import io.javaoperatorsdk.operator.processing.event.ResourceID; public class MDCUtils { @@ -17,50 +16,51 @@ public class MDCUtils { private static final String GENERATION = "resource.generation"; private static final String UID = "resource.uid"; private static final String NO_NAMESPACE = "no namespace"; - private static final boolean enabled = Utils.getBooleanFromSystemPropsOrDefault(Utils.USE_MDC_ENV_KEY, true); + private static final boolean enabled = + Utils.getBooleanFromSystemPropsOrDefault(Utils.USE_MDC_ENV_KEY, true); public static void addResourceIDInfo(ResourceID resourceID) { - if (enabled) { - MDC.put(NAME, resourceID.getName()); - MDC.put(NAMESPACE, resourceID.getNamespace().orElse(NO_NAMESPACE)); - } + if (enabled) { + MDC.put(NAME, resourceID.getName()); + MDC.put(NAMESPACE, resourceID.getNamespace().orElse(NO_NAMESPACE)); + } } public static void removeResourceIDInfo() { - if (enabled) { - MDC.remove(NAME); - MDC.remove(NAMESPACE); - } + if (enabled) { + MDC.remove(NAME); + MDC.remove(NAMESPACE); + } } public static void addResourceInfo(HasMetadata resource) { - if (enabled) { - MDC.put(API_VERSION, resource.getApiVersion()); - MDC.put(KIND, resource.getKind()); - final var metadata = resource.getMetadata(); - if (metadata != null) { - MDC.put(NAME, metadata.getName()); - if (metadata.getNamespace() != null) { - MDC.put(NAMESPACE, metadata.getNamespace()); - } - MDC.put(RESOURCE_VERSION, metadata.getResourceVersion()); - if (metadata.getGeneration() != null) { - MDC.put(GENERATION, metadata.getGeneration().toString()); - } - MDC.put(UID, metadata.getUid()); - } + if (enabled) { + MDC.put(API_VERSION, resource.getApiVersion()); + MDC.put(KIND, resource.getKind()); + final var metadata = resource.getMetadata(); + if (metadata != null) { + MDC.put(NAME, metadata.getName()); + if (metadata.getNamespace() != null) { + MDC.put(NAMESPACE, metadata.getNamespace()); + } + MDC.put(RESOURCE_VERSION, metadata.getResourceVersion()); + if (metadata.getGeneration() != null) { + MDC.put(GENERATION, metadata.getGeneration().toString()); + } + MDC.put(UID, metadata.getUid()); } + } } public static void removeResourceInfo() { - if (enabled) { - MDC.remove(API_VERSION); - MDC.remove(KIND); - MDC.remove(NAME); - MDC.remove(NAMESPACE); - MDC.remove(RESOURCE_VERSION); - MDC.remove(GENERATION); - MDC.remove(UID); - } + if (enabled) { + MDC.remove(API_VERSION); + MDC.remove(KIND); + MDC.remove(NAME); + MDC.remove(NAMESPACE); + MDC.remove(RESOURCE_VERSION); + MDC.remove(GENERATION); + MDC.remove(UID); + } } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java index db69d8134b..3dee373e89 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResource.java @@ -20,7 +20,7 @@ * An abstract implementation of {@link DependentResource} to be used as base for custom * implementations, providing, in particular, the core {@link #reconcile(HasMetadata, Context)} * logic for dependents - * + * * @param the dependent resource type * @param

    the associated primary resource type */ @@ -85,13 +85,15 @@ protected ReconcileResult reconcile(P primary, R actualResource, Context

    c var updatedResource = handleUpdate(actualResource, desired, primary, context); return ReconcileResult.resourceUpdated(updatedResource); } else { - log.debug("Update skipped for dependent {} as it matched the existing one", + log.debug( + "Update skipped for dependent {} as it matched the existing one", actualResource instanceof HasMetadata ? ResourceID.fromResource((HasMetadata) actualResource) : getClass().getSimpleName()); } } else { - log.debug("Update skipped for dependent {} implement Updater interface to modify it", + log.debug( + "Update skipped for dependent {} implement Updater interface to modify it", actualResource instanceof HasMetadata ? ResourceID.fromResource((HasMetadata) actualResource) : getClass().getSimpleName()); @@ -116,7 +118,6 @@ public Optional getSecondaryResource(P primary, Context

    context) { } else { return selectTargetSecondaryResource(secondaryResources, primary, context); } - } /** @@ -132,10 +133,11 @@ public Optional getSecondaryResource(P primary, Context

    context) { * @throws IllegalStateException if more than one candidate is found, in which case some other * mechanism might be necessary to distinguish between candidate secondary resources */ - protected Optional selectTargetSecondaryResource(Set secondaryResources, P primary, - Context

    context) { + protected Optional selectTargetSecondaryResource( + Set secondaryResources, P primary, Context

    context) { R desired = desired(primary, context); - var targetResources = secondaryResources.stream().filter(r -> r.equals(desired)).toList(); + var targetResources = + secondaryResources.stream().filter(r -> r.equals(desired)).toList(); if (targetResources.size() > 1) { throw new IllegalStateException( "More than one secondary resource related to primary: " + targetResources); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractEventSourceHolderDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractEventSourceHolderDependentResource.java index 6745a45a72..5cee9467f1 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractEventSourceHolderDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractEventSourceHolderDependentResource.java @@ -14,7 +14,8 @@ import io.javaoperatorsdk.operator.processing.event.source.EventSource; @Ignore -public abstract class AbstractEventSourceHolderDependentResource> +public abstract class AbstractEventSourceHolderDependentResource< + R, P extends HasMetadata, T extends EventSource> extends AbstractDependentResource implements EventSourceReferencer

    { private T eventSource; @@ -99,15 +100,15 @@ public Optional eventSource() { protected void onCreated(P primary, R created, Context

    context) { if (isCacheFillerEventSource) { - recentOperationCacheFiller().handleRecentResourceCreate(ResourceID.fromResource(primary), - created); + recentOperationCacheFiller() + .handleRecentResourceCreate(ResourceID.fromResource(primary), created); } } protected void onUpdated(P primary, R updated, R actual, Context

    context) { if (isCacheFillerEventSource) { - recentOperationCacheFiller().handleRecentResourceUpdate(ResourceID.fromResource(primary), - updated, actual); + recentOperationCacheFiller() + .handleRecentResourceUpdate(ResourceID.fromResource(primary), updated, actual); } } @@ -115,5 +116,4 @@ protected void onUpdated(P primary, R updated, R actual, Context

    context) { private RecentOperationCacheFiller recentOperationCacheFiller() { return (RecentOperationCacheFiller) eventSource; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java index acb6cb99d3..d3fec69cf0 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/AbstractExternalDependentResource.java @@ -8,14 +8,17 @@ import io.javaoperatorsdk.operator.processing.event.source.EventSource; import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; -public abstract class AbstractExternalDependentResource> +public abstract class AbstractExternalDependentResource< + R, P extends HasMetadata, T extends EventSource> extends AbstractEventSourceHolderDependentResource { private final boolean isDependentResourceWithExplicitState = this instanceof DependentResourceWithExplicitState; private final boolean isBulkDependentResource = this instanceof BulkDependentResource; + @SuppressWarnings("rawtypes") private DependentResourceWithExplicitState dependentResourceWithExplicitState; + private InformerEventSource externalStateEventSource; @SuppressWarnings("unchecked") @@ -31,13 +34,11 @@ protected AbstractExternalDependentResource(Class resourceType) { public void resolveEventSource(EventSourceRetriever

    eventSourceRetriever) { super.resolveEventSource(eventSourceRetriever); if (isDependentResourceWithExplicitState) { - final var eventSourceName = (String) dependentResourceWithExplicitState - .eventSourceName().orElse(null); - externalStateEventSource = (InformerEventSource) eventSourceRetriever - .getEventSourceFor(dependentResourceWithExplicitState.stateResourceClass(), - eventSourceName); + final var eventSourceName = + (String) dependentResourceWithExplicitState.eventSourceName().orElse(null); + externalStateEventSource = (InformerEventSource) eventSourceRetriever.getEventSourceFor( + dependentResourceWithExplicitState.stateResourceClass(), eventSourceName); } - } @Override @@ -83,18 +84,17 @@ public Matcher.Result match(R resource, P primary, Context

    context) { } @SuppressWarnings("unchecked") - public void deleteTargetResource(P primary, R resource, String key, - Context

    context) { + public void deleteTargetResource(P primary, R resource, String key, Context

    context) { if (isDependentResourceWithExplicitState) { - context.getClient() + context + .getClient() .resource(dependentResourceWithExplicitState.stateResource(primary, resource)) .delete(); } handleDeleteTargetResource(primary, resource, key, context); } - public void handleDeleteTargetResource(P primary, R resource, String key, - Context

    context) { + public void handleDeleteTargetResource(P primary, R resource, String key, Context

    context) { throw new IllegalStateException("Override this method in case you manage an bulk resource"); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/BulkDependentResourceReconciler.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/BulkDependentResourceReconciler.java index 1ed36edaa2..ab559a4c30 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/BulkDependentResourceReconciler.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/BulkDependentResourceReconciler.java @@ -29,9 +29,8 @@ public ReconcileResult reconcile(P primary, Context

    context) { if (!(bulkDependentResource instanceof Creator) && !(bulkDependentResource instanceof Deleter) && !(bulkDependentResource instanceof Updater)) { - return ReconcileResult - .aggregatedResult(actualResources.values().stream().map(ReconcileResult::noOperation) - .toList()); + return ReconcileResult.aggregatedResult( + actualResources.values().stream().map(ReconcileResult::noOperation).toList()); } final var desiredResources = bulkDependentResource.desiredResources(primary, context); @@ -56,8 +55,8 @@ public void delete(P primary, Context

    context) { deleteExtraResources(Collections.emptySet(), actualResources, primary, context); } - private void deleteExtraResources(Set expectedKeys, - Map actualResources, P primary, Context

    context) { + private void deleteExtraResources( + Set expectedKeys, Map actualResources, P primary, Context

    context) { actualResources.forEach((key, value) -> { if (!expectedKeys.contains(key)) { bulkDependentResource.deleteTargetResource(primary, value, key, context); @@ -74,13 +73,12 @@ private void deleteExtraResources(Set expectedKeys, */ @Ignore private static class BulkDependentResourceInstance - extends AbstractDependentResource - implements Creator, Deleter

    , Updater { + extends AbstractDependentResource implements Creator, Deleter

    , Updater { private final BulkDependentResource bulkDependentResource; private final R desired; - private BulkDependentResourceInstance(BulkDependentResource bulkDependentResource, - R desired) { + private BulkDependentResourceInstance( + BulkDependentResource bulkDependentResource, R desired) { this.bulkDependentResource = bulkDependentResource; this.desired = desired; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/CRUDBulkDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/CRUDBulkDependentResource.java index aa650bf1b5..6e86f04a5c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/CRUDBulkDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/CRUDBulkDependentResource.java @@ -4,8 +4,4 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Deleter; public interface CRUDBulkDependentResource - extends BulkDependentResource, - Creator, - BulkUpdater, - Deleter

    { -} + extends BulkDependentResource, Creator, BulkUpdater, Deleter

    {} diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceWithExplicitState.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceWithExplicitState.java index 4609b4a9c7..7c3fff3c49 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceWithExplicitState.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/DependentResourceWithExplicitState.java @@ -44,5 +44,4 @@ default Optional eventSourceName() { * @return that stores state */ S stateResource(P primary, R resource); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/Updater.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/Updater.java index 2f229abe34..8780022a73 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/Updater.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/Updater.java @@ -6,5 +6,4 @@ public interface Updater extends Matcher { R update(R actual, R desired, P primary, Context

    context); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java index f315619cde..8cbe9f48d5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PerResourcePollingDependentResource.java @@ -14,7 +14,6 @@ public abstract class PerResourcePollingDependentResource implements PerResourcePollingEventSource.ResourceFetcher { - public PerResourcePollingDependentResource(Class resourceType) { super(resourceType); } @@ -27,9 +26,10 @@ public PerResourcePollingDependentResource(Class resourceType, Duration polli protected ExternalResourceCachingEventSource createEventSource( EventSourceContext

    context) { - return new PerResourcePollingEventSource<>(resourceType(), context, - new PerResourcePollingConfigurationBuilder<>( - this, getPollingPeriod()) + return new PerResourcePollingEventSource<>( + resourceType(), + context, + new PerResourcePollingConfigurationBuilder<>(this, getPollingPeriod()) .withCacheKeyMapper(this) .withName(name()) .build()); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java index 01860cb4c5..674cbdd906 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/external/PollingDependentResource.java @@ -22,8 +22,8 @@ public PollingDependentResource(Class resourceType, CacheKeyMapper cacheKe this.cacheKeyMapper = cacheKeyMapper; } - public PollingDependentResource(Class resourceType, Duration pollingPeriod, - CacheKeyMapper cacheKeyMapper) { + public PollingDependentResource( + Class resourceType, Duration pollingPeriod, CacheKeyMapper cacheKeyMapper) { super(resourceType, pollingPeriod); this.cacheKeyMapper = cacheKeyMapper; } @@ -31,8 +31,8 @@ public PollingDependentResource(Class resourceType, Duration pollingPeriod, @Override protected ExternalResourceCachingEventSource createEventSource( EventSourceContext

    context) { - return new PollingEventSource<>(resourceType(), + return new PollingEventSource<>( + resourceType(), new PollingConfiguration<>(name(), this, getPollingPeriod(), cacheKeyMapper)); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/BooleanWithUndefined.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/BooleanWithUndefined.java index a8aa3f5d05..23ee5295a3 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/BooleanWithUndefined.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/BooleanWithUndefined.java @@ -4,7 +4,9 @@ * A replacement for {@link Boolean}, which can't be used in annotations. */ public enum BooleanWithUndefined { - TRUE, FALSE, UNDEFINED; + TRUE, + FALSE, + UNDEFINED; public Boolean asBoolean() { switch (this) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDKubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDKubernetesDependentResource.java index f4ccf647ed..afe4302fc3 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDKubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDKubernetesDependentResource.java @@ -15,8 +15,7 @@ */ @Ignore public abstract class CRUDKubernetesDependentResource - extends - KubernetesDependentResource + extends KubernetesDependentResource implements Creator, Updater, GarbageCollected

    { public CRUDKubernetesDependentResource(Class resourceType) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDNoGCKubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDNoGCKubernetesDependentResource.java index e335ef74e5..c7c86a9bdb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDNoGCKubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/CRUDNoGCKubernetesDependentResource.java @@ -19,8 +19,7 @@ */ @Ignore public class CRUDNoGCKubernetesDependentResource - extends KubernetesDependentResource - implements Creator, Updater, Deleter

    { + extends KubernetesDependentResource implements Creator, Updater, Deleter

    { public CRUDNoGCKubernetesDependentResource(Class resourceType) { super(resourceType); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java index c5dd08069e..f1dbb97cb4 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesDependentResource.java @@ -20,10 +20,10 @@ public GenericKubernetesDependentResource(GroupVersionKindPlural groupVersionKin this.groupVersionKind = groupVersionKind; } - protected InformerEventSourceConfiguration.Builder informerConfigurationBuilder( - EventSourceContext

    context) { - return InformerEventSourceConfiguration.from(groupVersionKind, - context.getPrimaryResourceClass()); + protected InformerEventSourceConfiguration.Builder + informerConfigurationBuilder(EventSourceContext

    context) { + return InformerEventSourceConfiguration.from( + groupVersionKind, context.getPrimaryResourceClass()); } @SuppressWarnings("unused") diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java index 00f68f36a7..cfcd79d5f8 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcher.java @@ -24,7 +24,6 @@ public class GenericKubernetesResourceMatcher resource * @return results of matching */ - public static Matcher.Result match(R desired, + public static Matcher.Result match( + R desired, R actualResource, boolean labelsAndAnnotationsEquality, - boolean valuesEquality, Context

    context) { - return match(desired, actualResource, - labelsAndAnnotationsEquality, valuesEquality, context, EMPTY_ARRAY); + boolean valuesEquality, + Context

    context) { + return match( + desired, + actualResource, + labelsAndAnnotationsEquality, + valuesEquality, + context, + EMPTY_ARRAY); } - public static Matcher.Result match(R desired, - R actualResource, Context

    context) { - return match(desired, actualResource, - false, false, context, EMPTY_ARRAY); + public static Matcher.Result match( + R desired, R actualResource, Context

    context) { + return match(desired, actualResource, false, false, context, EMPTY_ARRAY); } /** @@ -78,12 +83,14 @@ public static Matcher.Result m * @param resource * @return results of matching */ - public static Matcher.Result match(R desired, + public static Matcher.Result match( + R desired, R actualResource, boolean labelsAndAnnotationsEquality, - Context

    context, String... ignorePaths) { - return match(desired, actualResource, - labelsAndAnnotationsEquality, false, context, ignorePaths); + Context

    context, + String... ignorePaths) { + return match( + desired, actualResource, labelsAndAnnotationsEquality, false, context, ignorePaths); } /** @@ -110,34 +117,39 @@ public static Matcher.Result m * @return a {@link io.javaoperatorsdk.operator.processing.dependent.Matcher.Result} object */ public static Matcher.Result match( - KubernetesDependentResource dependentResource, R actualResource, P primary, + KubernetesDependentResource dependentResource, + R actualResource, + P primary, Context

    context, boolean labelsAndAnnotationsEquality, String... ignorePaths) { final var desired = dependentResource.desired(primary, context); - return match(desired, actualResource, - labelsAndAnnotationsEquality, context, - ignorePaths); + return match(desired, actualResource, labelsAndAnnotationsEquality, context, ignorePaths); } public static Matcher.Result match( - KubernetesDependentResource dependentResource, R actualResource, P primary, + KubernetesDependentResource dependentResource, + R actualResource, + P primary, Context

    context, boolean specEquality, boolean labelsAndAnnotationsEquality, String... ignorePaths) { final var desired = dependentResource.desired(primary, context); - return match(desired, actualResource, - labelsAndAnnotationsEquality, specEquality, context, ignorePaths); + return match( + desired, actualResource, labelsAndAnnotationsEquality, specEquality, context, ignorePaths); } - public static Matcher.Result match(R desired, - R actualResource, boolean labelsAndAnnotationsEquality, boolean valuesEquality, + public static Matcher.Result match( + R desired, + R actualResource, + boolean labelsAndAnnotationsEquality, + boolean valuesEquality, Context

    context, String... ignoredPaths) { - final List ignoreList = - ignoredPaths != null && ignoredPaths.length > 0 ? Arrays.asList(ignoredPaths) - : Collections.emptyList(); + final List ignoreList = ignoredPaths != null && ignoredPaths.length > 0 + ? Arrays.asList(ignoredPaths) + : Collections.emptyList(); if (valuesEquality && !ignoreList.isEmpty()) { throw new IllegalArgumentException( @@ -167,8 +179,7 @@ public static Matcher.Result m return Matcher.Result.computed(matched, desired); } - private static boolean match(boolean equality, JsonNode diff, - final List ignoreList) { + private static boolean match(boolean equality, JsonNode diff, final List ignoreList) { if (equality) { return false; } @@ -186,5 +197,4 @@ static boolean nodeIsChildOf(JsonNode n, List prefixes) { static String getPath(JsonNode n) { return n.get(PATH).asText(); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdater.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdater.java index 4a8fef01e9..c8123c39e5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdater.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdater.java @@ -32,5 +32,4 @@ public static void updateLabelsAndAnnotation(K actual, K actual.getMetadata().getLabels().putAll(desired.getMetadata().getLabels()); actual.getMetadata().getAnnotations().putAll(desired.getMetadata().getAnnotations()); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GroupVersionKindPlural.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GroupVersionKindPlural.java index 3354ccedae..d503e656fe 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GroupVersionKindPlural.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GroupVersionKindPlural.java @@ -24,9 +24,14 @@ protected GroupVersionKindPlural(String apiVersion, String kind, String plural) } protected GroupVersionKindPlural(GroupVersionKind gvk, String plural) { - this(gvk.getGroup(), gvk.getVersion(), gvk.getKind(), - plural != null ? plural - : (gvk instanceof GroupVersionKindPlural ? ((GroupVersionKindPlural) gvk).plural + this( + gvk.getGroup(), + gvk.getVersion(), + gvk.getKind(), + plural != null + ? plural + : (gvk instanceof GroupVersionKindPlural + ? ((GroupVersionKindPlural) gvk).plural : null)); } @@ -37,7 +42,8 @@ protected GroupVersionKindPlural(GroupVersionKind gvk, String plural) { * @return a new GroupVersionKindPlural object matching the specified {@link GroupVersionKind} */ public static GroupVersionKindPlural from(GroupVersionKind gvk) { - return gvk instanceof GroupVersionKindPlural ? ((GroupVersionKindPlural) gvk) + return gvk instanceof GroupVersionKindPlural + ? ((GroupVersionKindPlural) gvk) : gvkWithPlural(gvk, null); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java index 818768474c..acf1fe6dd2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependent.java @@ -7,8 +7,6 @@ import io.javaoperatorsdk.operator.api.config.informer.Informer; - - @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface KubernetesDependent { @@ -16,7 +14,8 @@ /** * Creates the resource only if did not exist before, this applies only if SSA is used. */ - boolean createResourceOnlyIfNotExistingWithSSA() default KubernetesDependentResourceConfig.DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA; + boolean createResourceOnlyIfNotExistingWithSSA() default + KubernetesDependentResourceConfig.DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA; /** * Determines whether to use SSA (Server-Side Apply) for this dependent. If SSA is used, the @@ -31,5 +30,4 @@ BooleanWithUndefined useSSA() default BooleanWithUndefined.UNDEFINED; Informer informer() default @Informer; - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java index 15cb4f172a..5b1e9417e9 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentConverter.java @@ -9,12 +9,13 @@ import static io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResourceConfig.DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA; -public class KubernetesDependentConverter implements - ConfigurationConverter> { +public class KubernetesDependentConverter + implements ConfigurationConverter> { @Override @SuppressWarnings("unchecked") - public KubernetesDependentResourceConfig configFrom(KubernetesDependent configAnnotation, + public KubernetesDependentResourceConfig configFrom( + KubernetesDependent configAnnotation, DependentResourceSpec> spec, ControllerConfiguration controllerConfig) { var createResourceOnlyIfNotExistingWithSSA = @@ -27,12 +28,13 @@ public KubernetesDependentResourceConfig configFrom(KubernetesDependent confi useSSA = configAnnotation.useSSA().asBoolean(); } - var informerConfiguration = createInformerConfig(configAnnotation, + var informerConfiguration = createInformerConfig( + configAnnotation, (DependentResourceSpec>) spec, controllerConfig); - return new KubernetesDependentResourceConfig<>(useSSA, createResourceOnlyIfNotExistingWithSSA, - informerConfiguration); + return new KubernetesDependentResourceConfig<>( + useSSA, createResourceOnlyIfNotExistingWithSSA, informerConfiguration); } @SuppressWarnings({"unchecked"}) @@ -43,14 +45,16 @@ private InformerConfiguration createInformerConfig( Class> dependentResourceClass = (Class>) spec.getDependentResourceClass(); - final var resourceType = controllerConfig.getConfigurationService().dependentResourceFactory() + final var resourceType = controllerConfig + .getConfigurationService() + .dependentResourceFactory() .associatedResourceType(spec); InformerConfiguration.Builder config = InformerConfiguration.builder(resourceType); if (configAnnotation != null) { final var informerConfig = configAnnotation.informer(); - final var context = Utils.contextFor(controllerConfig, dependentResourceClass, - configAnnotation.annotationType()); + final var context = Utils.contextFor( + controllerConfig, dependentResourceClass, configAnnotation.annotationType()); config = config.initFromAnnotation(informerConfig, context); } return config.build(); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java index a3373e2d6c..97b809ca0c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResource.java @@ -28,7 +28,9 @@ import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers; @Ignore -@Configured(by = KubernetesDependent.class, with = KubernetesDependentResourceConfig.class, +@Configured( + by = KubernetesDependent.class, + with = KubernetesDependentResourceConfig.class, converter = KubernetesDependentConverter.class) public abstract class KubernetesDependentResource extends AbstractEventSourceHolderDependentResource> @@ -75,7 +77,9 @@ public R create(R desired, P primary, Context

    context) { public R update(R actual, R desired, P primary, Context

    context) { if (log.isDebugEnabled()) { - log.debug("Updating actual resource: {} version: {}", ResourceID.fromResource(actual), + log.debug( + "Updating actual resource: {} version: {}", + ResourceID.fromResource(actual), actual.getMetadata().getResourceVersion()); } R updatedResource; @@ -83,13 +87,14 @@ public R update(R actual, R desired, P primary, Context

    context) { if (useSSA(context)) { updatedResource = prepare(context, desired, primary, "Updating") .fieldManager(context.getControllerConfiguration().fieldManager()) - .forceConflicts().serverSideApply(); + .forceConflicts() + .serverSideApply(); } else { var updatedActual = GenericResourceUpdater.updateResource(actual, desired, context); updatedResource = prepare(context, updatedActual, primary, "Updating").update(); } - log.debug("Resource version after update: {}", - updatedResource.getMetadata().getResourceVersion()); + log.debug( + "Resource version after update: {}", updatedResource.getMetadata().getResourceVersion()); return updatedResource; } @@ -99,24 +104,26 @@ public Result match(R actualResource, P primary, Context

    context) { return match(actualResource, desired, primary, context); } - public Result match(R actualResource, R desired, P primary, - Context

    context) { + public Result match(R actualResource, R desired, P primary, Context

    context) { final boolean matches; addMetadata(true, actualResource, desired, primary, context); if (useSSA(context)) { matches = SSABasedGenericKubernetesResourceMatcher.getInstance() .matches(actualResource, desired, context); } else { - matches = GenericKubernetesResourceMatcher.match(desired, actualResource, - false, false, context).matched(); + matches = GenericKubernetesResourceMatcher.match( + desired, actualResource, false, false, context) + .matched(); } return Result.computed(matches, desired); } - protected void addMetadata(boolean forMatch, R actualResource, final R target, P primary, - Context

    context) { + protected void addMetadata( + boolean forMatch, R actualResource, final R target, P primary, Context

    context) { if (forMatch) { // keep the current previous annotation - String actual = actualResource.getMetadata().getAnnotations() + String actual = actualResource + .getMetadata() + .getAnnotations() .get(InformerEventSource.PREVIOUS_ANNOTATION_KEY); Map annotations = target.getMetadata().getAnnotations(); if (actual != null) { @@ -125,24 +132,31 @@ protected void addMetadata(boolean forMatch, R actualResource, final R target, P annotations.remove(InformerEventSource.PREVIOUS_ANNOTATION_KEY); } } else if (usePreviousAnnotation(context)) { // set a new one - eventSource().orElseThrow().addPreviousAnnotation( - Optional.ofNullable(actualResource).map(r -> r.getMetadata().getResourceVersion()) - .orElse(null), - target); + eventSource() + .orElseThrow() + .addPreviousAnnotation( + Optional.ofNullable(actualResource) + .map(r -> r.getMetadata().getResourceVersion()) + .orElse(null), + target); } addReferenceHandlingMetadata(target, primary); } protected boolean useSSA(Context

    context) { if (useSSA == null) { - useSSA = context.getControllerConfiguration().getConfigurationService() + useSSA = context + .getControllerConfiguration() + .getConfigurationService() .shouldUseSSA(getClass(), resourceType(), configuration().orElse(null)); } return useSSA; } private boolean usePreviousAnnotation(Context

    context) { - return context.getControllerConfiguration().getConfigurationService() + return context + .getControllerConfiguration() + .getConfigurationService() .previousAnnotationForDependentResourcesEventFiltering(); } @@ -160,7 +174,8 @@ public void deleteTargetResource(P primary, R resource, String key, Context

    c @SuppressWarnings("unused") protected Resource prepare(Context

    context, R desired, P primary, String actionName) { - log.debug("{} target resource with type: {}, with id: {}", + log.debug( + "{} target resource with type: {}, with id: {}", actionName, desired.getClass(), ResourceID.fromResource(desired)); @@ -179,10 +194,10 @@ protected void addReferenceHandlingMetadata(R desired, P primary) { @Override protected InformerEventSource createEventSource(EventSourceContext

    context) { - final InformerEventSourceConfiguration.Builder configBuilder = - informerConfigurationBuilder(context) - .withSecondaryToPrimaryMapper(getSecondaryToPrimaryMapper(context).orElseThrow()) - .withName(name()); + final InformerEventSourceConfiguration.Builder configBuilder = informerConfigurationBuilder( + context) + .withSecondaryToPrimaryMapper(getSecondaryToPrimaryMapper(context).orElseThrow()) + .withName(name()); // update configuration from annotation if specified if (kubernetesDependentResourceConfig != null @@ -208,12 +223,16 @@ private boolean useNonOwnerRefBasedSecondaryToPrimaryMapping() { } protected void addSecondaryToPrimaryMapperAnnotations(R desired, P primary) { - addSecondaryToPrimaryMapperAnnotations(desired, primary, Mappers.DEFAULT_ANNOTATION_FOR_NAME, - Mappers.DEFAULT_ANNOTATION_FOR_NAMESPACE, Mappers.DEFAULT_ANNOTATION_FOR_PRIMARY_TYPE); + addSecondaryToPrimaryMapperAnnotations( + desired, + primary, + Mappers.DEFAULT_ANNOTATION_FOR_NAME, + Mappers.DEFAULT_ANNOTATION_FOR_NAMESPACE, + Mappers.DEFAULT_ANNOTATION_FOR_PRIMARY_TYPE); } - protected void addSecondaryToPrimaryMapperAnnotations(R desired, P primary, String nameKey, - String namespaceKey, String typeKey) { + protected void addSecondaryToPrimaryMapperAnnotations( + R desired, P primary, String nameKey, String namespaceKey, String typeKey) { var annotations = desired.getMetadata().getAnnotations(); annotations.put(nameKey, primary.getMetadata().getName()); var primaryNamespaces = primary.getMetadata().getNamespace(); @@ -224,13 +243,13 @@ protected void addSecondaryToPrimaryMapperAnnotations(R desired, P primary, Stri } @Override - protected Optional selectTargetSecondaryResource(Set secondaryResources, P primary, - Context

    context) { + protected Optional selectTargetSecondaryResource( + Set secondaryResources, P primary, Context

    context) { ResourceID managedResourceID = targetSecondaryResourceID(primary, context); return secondaryResources.stream() - .filter(r -> r.getMetadata().getName().equals(managedResourceID.getName()) && - Objects.equals(r.getMetadata().getNamespace(), - managedResourceID.getNamespace().orElse(null))) + .filter(r -> r.getMetadata().getName().equals(managedResourceID.getName()) + && Objects.equals( + r.getMetadata().getNamespace(), managedResourceID.getNamespace().orElse(null))) .findFirst(); } @@ -273,8 +292,8 @@ protected Optional> getSecondaryToPrimaryMapper( } else { var clustered = !Namespaced.class.isAssignableFrom(context.getPrimaryResourceClass()); if (garbageCollected) { - return Optional - .of(Mappers.fromOwnerReferences(context.getPrimaryResourceClass(), clustered)); + return Optional.of( + Mappers.fromOwnerReferences(context.getPrimaryResourceClass(), clustered)); } else if (isCreatable()) { return Optional.of(Mappers.fromDefaultAnnotations(context.getPrimaryResourceClass())); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java index 2b419c2d0d..c3424750d2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfig.java @@ -1,10 +1,8 @@ package io.javaoperatorsdk.operator.processing.dependent.kubernetes; - import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; - public class KubernetesDependentResourceConfig { public static final boolean DEFAULT_CREATE_RESOURCE_ONLY_IF_NOT_EXISTING_WITH_SSA = true; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java index 3610cb074b..7694fe1d46 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/KubernetesDependentResourceConfigBuilder.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.processing.dependent.kubernetes; - import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.api.config.informer.InformerConfiguration; @@ -32,7 +31,6 @@ public KubernetesDependentResourceConfigBuilder withKubernetesDependentInform public KubernetesDependentResourceConfig build() { return new KubernetesDependentResourceConfig<>( - useSSA, createResourceOnlyIfNotExistingWithSSA, - informerConfiguration); + useSSA, createResourceOnlyIfNotExistingWithSSA, informerConfiguration); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceComparators.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceComparators.java index 037cb597f4..eeb22353d2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceComparators.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceComparators.java @@ -8,13 +8,13 @@ public class ResourceComparators { public static boolean compareConfigMapData(ConfigMap c1, ConfigMap c2) { - return Objects.equals(c1.getData(), c2.getData()) && - Objects.equals(c1.getBinaryData(), c2.getBinaryData()); + return Objects.equals(c1.getData(), c2.getData()) + && Objects.equals(c1.getBinaryData(), c2.getBinaryData()); } public static boolean compareSecretData(Secret s1, Secret s2) { - return Objects.equals(s1.getType(), s2.getType()) && - Objects.equals(s1.getData(), s2.getData()) && - Objects.equals(s1.getStringData(), s2.getStringData()); + return Objects.equals(s1.getType(), s2.getType()) + && Objects.equals(s1.getData(), s2.getData()) + && Objects.equals(s1.getStringData(), s2.getStringData()); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizer.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizer.java index 3d83002692..be1001776d 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizer.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizer.java @@ -27,22 +27,32 @@ */ class ResourceRequirementsSanitizer { - static void sanitizeResourceRequirements(final Map actualMap, - final PodTemplateSpec actualTemplate, final PodTemplateSpec desiredTemplate) { + static void sanitizeResourceRequirements( + final Map actualMap, + final PodTemplateSpec actualTemplate, + final PodTemplateSpec desiredTemplate) { if (actualTemplate == null || desiredTemplate == null) { return; } if (actualTemplate.getSpec() == null || desiredTemplate.getSpec() == null) { return; } - sanitizeResourceRequirements(actualMap, actualTemplate.getSpec().getInitContainers(), - desiredTemplate.getSpec().getInitContainers(), "initContainers"); - sanitizeResourceRequirements(actualMap, actualTemplate.getSpec().getContainers(), - desiredTemplate.getSpec().getContainers(), "containers"); + sanitizeResourceRequirements( + actualMap, + actualTemplate.getSpec().getInitContainers(), + desiredTemplate.getSpec().getInitContainers(), + "initContainers"); + sanitizeResourceRequirements( + actualMap, + actualTemplate.getSpec().getContainers(), + desiredTemplate.getSpec().getContainers(), + "containers"); } - private static void sanitizeResourceRequirements(final Map actualMap, - final List actualContainers, final List desiredContainers, + private static void sanitizeResourceRequirements( + final Map actualMap, + final List actualContainers, + final List desiredContainers, final String containerPath) { int containers = desiredContainers.size(); if (containers == actualContainers.size()) { @@ -52,32 +62,58 @@ private static void sanitizeResourceRequirements(final Map actua if (!desiredContainer.getName().equals(actualContainer.getName())) { return; } - sanitizeResourceRequirements(actualMap, actualContainer.getResources(), + sanitizeResourceRequirements( + actualMap, + actualContainer.getResources(), desiredContainer.getResources(), - containerPath, containerIndex); + containerPath, + containerIndex); } } } - private static void sanitizeResourceRequirements(final Map actualMap, - final ResourceRequirements actualResource, final ResourceRequirements desiredResource, - final String containerPath, final int containerIndex) { + private static void sanitizeResourceRequirements( + final Map actualMap, + final ResourceRequirements actualResource, + final ResourceRequirements desiredResource, + final String containerPath, + final int containerIndex) { if (desiredResource == null || actualResource == null) { return; } - sanitizeQuantities(actualMap, actualResource.getRequests(), desiredResource.getRequests(), - containerPath, containerIndex, "requests"); - sanitizeQuantities(actualMap, actualResource.getLimits(), desiredResource.getLimits(), - containerPath, containerIndex, "limits"); + sanitizeQuantities( + actualMap, + actualResource.getRequests(), + desiredResource.getRequests(), + containerPath, + containerIndex, + "requests"); + sanitizeQuantities( + actualMap, + actualResource.getLimits(), + desiredResource.getLimits(), + containerPath, + containerIndex, + "limits"); } @SuppressWarnings("unchecked") - private static void sanitizeQuantities(final Map actualMap, - final Map actualResource, final Map desiredResource, - final String containerPath, final int containerIndex, final String quantityPath) { - Optional.ofNullable( - GenericKubernetesResource.get(actualMap, "spec", "template", "spec", containerPath, - containerIndex, "resources", quantityPath)) + private static void sanitizeQuantities( + final Map actualMap, + final Map actualResource, + final Map desiredResource, + final String containerPath, + final int containerIndex, + final String quantityPath) { + Optional.ofNullable(GenericKubernetesResource.get( + actualMap, + "spec", + "template", + "spec", + containerPath, + containerIndex, + "resources", + quantityPath)) .map(Map.class::cast) .filter(m -> m.size() == desiredResource.size()) .ifPresent(m -> actualResource.forEach((key, actualQuantity) -> { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java index 0da1aef9dc..d893ff3e86 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceUpdaterMatcher.java @@ -8,5 +8,4 @@ public interface ResourceUpdaterMatcher { R updateResource(R actual, R desired, Context context); boolean matches(R actual, R desired, Context context); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java index 261ab6c825..561db75f68 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcher.java @@ -58,6 +58,7 @@ public class SSABasedGenericKubernetesResourceMatcher { @SuppressWarnings("rawtypes") private static final SSABasedGenericKubernetesResourceMatcher INSTANCE = new SSABasedGenericKubernetesResourceMatcher<>(); + private static final List IGNORED_METADATA = List.of("creationTimestamp", "deletionTimestamp", "generation", "selfLink", "uid"); @@ -80,8 +81,8 @@ public static SSABasedGenericKubernetesResourceMatcher context) { - var optionalManagedFieldsEntry = checkIfFieldManagerExists(actual, - context.getControllerConfiguration().fieldManager()); + var optionalManagedFieldsEntry = + checkIfFieldManagerExists(actual, context.getControllerConfiguration().fieldManager()); // If no field is managed by our controller, that means the controller hasn't touched the // resource yet and the resource probably doesn't match the desired state. Not matching here // means that the resource will need to be updated and since this will be done using SSA, the @@ -101,7 +102,9 @@ public boolean matches(R actual, R desired, Context context) { sanitizeState(actual, desired, actualMap); var prunedActual = new HashMap(actualMap.size()); - keepOnlyManagedFields(prunedActual, actualMap, + keepOnlyManagedFields( + prunedActual, + actualMap, managedFieldsEntry.getFieldsV1().getAdditionalProperties(), objectMapper); @@ -112,13 +115,17 @@ public boolean matches(R actual, R desired, Context context) { var diff = getDiff(prunedActual, desiredMap, objectMapper); log.debug( "Diff between actual and desired state for resource: {} with name: {} in namespace: {} is:\n{}", - actual.getKind(), actual.getMetadata().getName(), actual.getMetadata().getNamespace(), + actual.getKind(), + actual.getMetadata().getName(), + actual.getMetadata().getNamespace(), diff); } return matches; } - private String getDiff(Map prunedActualMap, Map desiredMap, + private String getDiff( + Map prunedActualMap, + Map desiredMap, KubernetesSerialization serialization) { var actualYaml = serialization.asYaml(sortMap(prunedActualMap)); var desiredYaml = serialization.asYaml(sortMap(desiredMap)); @@ -179,31 +186,36 @@ private void sanitizeState(R actual, R desired, Map actualMap) { for (int i = 0; i < claims; i++) { var claim = desiredSpec.getVolumeClaimTemplates().get(i); if (claim.getSpec().getVolumeMode() == null) { - Optional.ofNullable( - GenericKubernetesResource.get(actualMap, "spec", "volumeClaimTemplates", i, "spec")) - .map(Map.class::cast).ifPresent(m -> m.remove("volumeMode")); + Optional.ofNullable(GenericKubernetesResource.get( + actualMap, "spec", "volumeClaimTemplates", i, "spec")) + .map(Map.class::cast) + .ifPresent(m -> m.remove("volumeMode")); } if (claim.getStatus() == null) { Optional.ofNullable( - GenericKubernetesResource.get(actualMap, "spec", "volumeClaimTemplates", i)) - .map(Map.class::cast).ifPresent(m -> m.remove("status")); + GenericKubernetesResource.get(actualMap, "spec", "volumeClaimTemplates", i)) + .map(Map.class::cast) + .ifPresent(m -> m.remove("status")); } } } sanitizeResourceRequirements(actualMap, actualSpec.getTemplate(), desiredSpec.getTemplate()); } else if (actual instanceof Deployment actualDeployment && desired instanceof Deployment desiredDeployment) { - sanitizeResourceRequirements(actualMap, + sanitizeResourceRequirements( + actualMap, actualDeployment.getSpec().getTemplate(), desiredDeployment.getSpec().getTemplate()); } else if (actual instanceof ReplicaSet actualReplicaSet && desired instanceof ReplicaSet desiredReplicaSet) { - sanitizeResourceRequirements(actualMap, + sanitizeResourceRequirements( + actualMap, actualReplicaSet.getSpec().getTemplate(), desiredReplicaSet.getSpec().getTemplate()); } else if (actual instanceof DaemonSet actualDaemonSet && desired instanceof DaemonSet desiredDaemonSet) { - sanitizeResourceRequirements(actualMap, + sanitizeResourceRequirements( + actualMap, actualDaemonSet.getSpec().getTemplate(), desiredDaemonSet.getSpec().getTemplate()); } @@ -223,9 +235,11 @@ private static void removeIrrelevantValues(Map desiredMap) { } @SuppressWarnings("unchecked") - private static void keepOnlyManagedFields(Map result, + private static void keepOnlyManagedFields( + Map result, Map actualMap, - Map managedFields, KubernetesSerialization objectMapper) { + Map managedFields, + KubernetesSerialization objectMapper) { if (managedFields.isEmpty()) { result.putAll(actualMap); return; @@ -244,7 +258,12 @@ private static void keepOnlyManagedFields(Map result, handleSetValues(result, actualMap, objectMapper, keyInActual, managedEntrySet); } else { // basically if we should traverse further - fillResultsAndTraverseFurther(result, actualMap, managedFields, objectMapper, key, + fillResultsAndTraverseFurther( + result, + actualMap, + managedFields, + objectMapper, + key, keyInActual, managedFieldValue); } @@ -263,17 +282,23 @@ private static void keepOnlyManagedFields(Map result, } @SuppressWarnings("unchecked") - private static void fillResultsAndTraverseFurther(Map result, + private static void fillResultsAndTraverseFurther( + Map result, Map actualMap, - Map managedFields, KubernetesSerialization objectMapper, String key, + Map managedFields, + KubernetesSerialization objectMapper, + String key, String keyInActual, Object managedFieldValue) { var emptyMapValue = new HashMap(); result.put(keyInActual, emptyMapValue); var actualMapValue = actualMap.getOrDefault(keyInActual, Collections.emptyMap()); log.debug("key: {} actual map value: managedFieldValue: {}", keyInActual, managedFieldValue); - keepOnlyManagedFields(emptyMapValue, (Map) actualMapValue, - (Map) managedFields.get(key), objectMapper); + keepOnlyManagedFields( + emptyMapValue, + (Map) actualMapValue, + (Map) managedFields.get(key), + objectMapper); } private static boolean isNestedValue(Map managedFieldValue) { @@ -291,9 +316,11 @@ private static boolean isNestedValue(Map managedFieldValue) { * order in managed field. */ @SuppressWarnings("unchecked") - private static void handleListKeyEntrySet(Map result, + private static void handleListKeyEntrySet( + Map result, Map actualMap, - KubernetesSerialization objectMapper, String keyInActual, + KubernetesSerialization objectMapper, + String keyInActual, Set> managedEntrySet) { var valueList = new ArrayList<>(); result.put(keyInActual, valueList); @@ -306,9 +333,8 @@ private static void handleListKeyEntrySet(Map result, if (DOT_KEY.equals(listEntry.getKey())) { continue; } - var actualListEntry = - selectListEntryBasedOnKey(keyWithoutPrefix(listEntry.getKey()), actualValueList, - objectMapper); + var actualListEntry = selectListEntryBasedOnKey( + keyWithoutPrefix(listEntry.getKey()), actualValueList, objectMapper); targetValuesByIndex.put(actualListEntry.getKey(), actualListEntry.getValue()); managedEntryByIndex.put(actualListEntry.getKey(), (Map) listEntry.getValue()); } @@ -329,8 +355,11 @@ private static void handleListKeyEntrySet(Map result, * when prompted. Basically this method just adds the values from {@code "v:"} to the * result. */ - private static void handleSetValues(Map result, Map actualMap, - KubernetesSerialization objectMapper, String keyInActual, + private static void handleSetValues( + Map result, + Map actualMap, + KubernetesSerialization objectMapper, + String keyInActual, Set> managedEntrySet) { var valueList = new ArrayList<>(); result.put(keyInActual, valueList); @@ -346,8 +375,8 @@ private static void handleSetValues(Map result, Map targetClass, - KubernetesSerialization objectMapper) { + public static Object parseKeyValue( + String stringValue, Class targetClass, KubernetesSerialization objectMapper) { var type = Objects.requireNonNullElse(targetClass, Map.class); return objectMapper.unmarshal(stringValue.trim(), type); } @@ -365,8 +394,8 @@ private static boolean isListKeyEntrySet(Set> managedE * those are added when there are more subfields of a referenced field. See test samples. Does not * seem to provide additional functionality, so can be just skipped for now. */ - private static boolean isKeyPrefixedSkippingDotKey(Set> managedEntrySet, - String prefix) { + private static boolean isKeyPrefixedSkippingDotKey( + Set> managedEntrySet, String prefix) { var iterator = managedEntrySet.iterator(); var managedFieldEntry = iterator.next(); if (managedFieldEntry.getKey().equals(DOT_KEY)) { @@ -377,8 +406,7 @@ private static boolean isKeyPrefixedSkippingDotKey(Set @SuppressWarnings("unchecked") private static Map.Entry> selectListEntryBasedOnKey( - String key, - List> values, KubernetesSerialization objectMapper) { + String key, List> values, KubernetesSerialization objectMapper) { Map ids = objectMapper.unmarshal(key, Map.class); var possibleTargets = new ArrayList>(1); int lastIndex = -1; @@ -394,9 +422,8 @@ private static Map.Entry> selectListEntryBasedOnKey + values.stream().map(Map::keySet).toList()); } if (possibleTargets.size() > 1) { - throw new IllegalStateException( - "More targets found in list element for key: " + key + " in map: " - + values.stream().map(Map::keySet).toList()); + throw new IllegalStateException("More targets found in list element for key: " + key + + " in map: " + values.stream().map(Map::keySet).toList()); } return new AbstractMap.SimpleEntry<>(lastIndex, possibleTargets.get(0)); } @@ -410,7 +437,8 @@ private Optional checkIfFieldManagerExists(R actual, String f -> f.getManager().equals(fieldManager) && f.getOperation().equals(APPLY_OPERATION)) .toList(); if (targetManagedFields.isEmpty()) { - log.debug("No field manager exists for resource: {} with name: {} and operation {}", + log.debug( + "No field manager exists for resource: {} with name: {} and operation {}", actual.getKind(), actual.getMetadata().getName(), APPLY_OPERATION); @@ -418,8 +446,9 @@ private Optional checkIfFieldManagerExists(R actual, String } // this should not happen in theory if (targetManagedFields.size() > 1) { - throw new OperatorException("More than one field manager exists with name: " + fieldManager - + " in resource: " + actual.getKind() + " with name: " + actual.getMetadata().getName()); + throw new OperatorException( + "More than one field manager exists with name: " + fieldManager + " in resource: " + + actual.getKind() + " with name: " + actual.getMetadata().getName()); } return Optional.of(targetManagedFields.get(0)); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java index 60d137fa1a..d8e14e5b1a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutor.java @@ -29,6 +29,7 @@ abstract class AbstractWorkflowExecutor

    { * Covers both deleted and reconciled */ private final Map> actualExecutions = new ConcurrentHashMap<>(); + private final ExecutorService executorService; protected AbstractWorkflowExecutor(DefaultWorkflow

    workflow, P primary, Context

    context) { @@ -87,8 +88,8 @@ protected boolean isMarkedForDelete(DependentResourceNode drn) { protected synchronized BaseWorkflowResult.DetailBuilder createOrGetResultFor( DependentResourceNode dependentResourceNode) { - return results.computeIfAbsent(dependentResourceNode, - unused -> new BaseWorkflowResult.DetailBuilder()); + return results.computeIfAbsent( + dependentResourceNode, unused -> new BaseWorkflowResult.DetailBuilder()); } protected synchronized Optional> getResultFor( @@ -96,7 +97,8 @@ protected synchronized Optional> getResultFo return Optional.ofNullable(results.get(dependentResourceNode)); } - protected boolean getResultFlagFor(DependentResourceNode dependentResourceNode, + protected boolean getResultFlagFor( + DependentResourceNode dependentResourceNode, Function, Boolean> flag) { return getResultFor(dependentResourceNode).map(flag).orElse(false); } @@ -105,14 +107,13 @@ protected boolean isExecutingNow(DependentResourceNode dependentResourceNo return actualExecutions.containsKey(dependentResourceNode); } - protected void markAsExecuting(DependentResourceNode dependentResourceNode, - Future future) { + protected void markAsExecuting( + DependentResourceNode dependentResourceNode, Future future) { actualExecutions.put(dependentResourceNode, future); } protected synchronized void handleExceptionInExecutor( - DependentResourceNode dependentResourceNode, - RuntimeException e) { + DependentResourceNode dependentResourceNode, RuntimeException e) { createOrGetResultFor(dependentResourceNode).withError(e); } @@ -138,27 +139,33 @@ protected boolean isConditionMet( Optional> condition, DependentResourceNode dependentResource) { final var dr = dependentResource.getDependentResource(); - return condition.map(c -> { - final DetailedCondition.Result r = c.detailedIsMet(dr, primary, context); - synchronized (this) { - results.computeIfAbsent(dependentResource, unused -> new BaseWorkflowResult.DetailBuilder()) - .withResultForCondition(c, r); - } - return r; - }).orElse(DetailedCondition.Result.metWithoutResult).isSuccess(); - } - - protected void submit(DependentResourceNode dependentResourceNode, - NodeExecutor nodeExecutor, String operation) { + return condition + .map(c -> { + final DetailedCondition.Result r = c.detailedIsMet(dr, primary, context); + synchronized (this) { + results + .computeIfAbsent( + dependentResource, unused -> new BaseWorkflowResult.DetailBuilder()) + .withResultForCondition(c, r); + } + return r; + }) + .orElse(DetailedCondition.Result.metWithoutResult) + .isSuccess(); + } + + protected void submit( + DependentResourceNode dependentResourceNode, + NodeExecutor nodeExecutor, + String operation) { final Future future = executorService.submit(nodeExecutor); markAsExecuting(dependentResourceNode, future); - logger().debug("Submitted to {}: {} primaryID: {}", operation, dependentResourceNode, - primaryID); + logger() + .debug("Submitted to {}: {} primaryID: {}", operation, dependentResourceNode, primaryID); } protected void registerOrDeregisterEventSourceBasedOnActivation( - boolean activationConditionMet, - DependentResourceNode dependentResourceNode) { + boolean activationConditionMet, DependentResourceNode dependentResourceNode) { if (dependentResourceNode.getActivationCondition().isPresent()) { final var dr = dependentResourceNode.getDependentResource(); final var eventSourceRetriever = context.eventSourceRetriever(); @@ -168,14 +175,15 @@ protected void registerOrDeregisterEventSourceBasedOnActivation( var es = eventSource.orElseThrow(); eventSourceRetriever.dynamicallyRegisterEventSource(es); } else { - eventSourceRetriever.dynamicallyDeRegisterEventSource(eventSource.orElseThrow().name()); + eventSourceRetriever.dynamicallyDeRegisterEventSource( + eventSource.orElseThrow().name()); } } } protected synchronized Map> asDetails() { return results.entrySet().stream() - .collect( - Collectors.toMap(e -> e.getKey().getDependentResource(), e -> e.getValue().build())); + .collect(Collectors.toMap( + e -> e.getKey().getDependentResource(), e -> e.getValue().build())); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResult.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResult.java index cf759022dc..621ea8386b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResult.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResult.java @@ -44,8 +44,10 @@ public Optional getDependentResourceByName(String name) { } @Override - public Optional getDependentConditionResult(DependentResource dependentResource, - Condition.Type conditionType, Class expectedResultType) { + public Optional getDependentConditionResult( + DependentResource dependentResource, + Condition.Type conditionType, + Class expectedResultType) { if (dependentResource == null) { return Optional.empty(); } @@ -57,15 +59,16 @@ public Optional getDependentConditionResult(DependentResource dependentRe .map(r -> result[0] = r.getDetail()) .map(expectedResultType::cast); } catch (Exception e) { - throw new IllegalArgumentException("Condition " + - "result " + result[0] + - " for Dependent " + dependentResource.name() + " doesn't match expected type " - + expectedResultType.getSimpleName(), e); + throw new IllegalArgumentException( + "Condition " + "result " + + result[0] + " for Dependent " + + dependentResource.name() + " doesn't match expected type " + + expectedResultType.getSimpleName(), + e); } } - protected List listFilteredBy( - Function filter) { + protected List listFilteredBy(Function filter) { return results.entrySet().stream() .filter(e -> filter.apply(e.getValue())) .map(Map.Entry::getKey) @@ -83,7 +86,8 @@ public boolean erroredDependentsExist() { @Override public void throwAggregateExceptionIfErrorsPresent() { if (erroredDependentsExist()) { - throw new AggregatedOperatorException("Exception(s) during workflow execution.", + throw new AggregatedOperatorException( + "Exception(s) during workflow execution.", getErroredDependentsStream() .collect(Collectors.toMap(e -> e.getKey().name(), e -> e.getValue().error))); } @@ -102,21 +106,27 @@ static class DetailBuilder { private boolean markedForDelete; Detail build() { - return new Detail<>(error, reconcileResult, activationConditionResult, - deletePostconditionResult, readyPostconditionResult, reconcilePostconditionResult, - deleted, visited, markedForDelete); + return new Detail<>( + error, + reconcileResult, + activationConditionResult, + deletePostconditionResult, + readyPostconditionResult, + reconcilePostconditionResult, + deleted, + visited, + markedForDelete); } DetailBuilder withResultForCondition( - ConditionWithType conditionWithType, - DetailedCondition.Result conditionResult) { + ConditionWithType conditionWithType, DetailedCondition.Result conditionResult) { switch (conditionWithType.type()) { case ACTIVATION -> activationConditionResult = conditionResult; case DELETE -> deletePostconditionResult = conditionResult; case READY -> readyPostconditionResult = conditionResult; case RECONCILE -> reconcilePostconditionResult = conditionResult; - default -> - throw new IllegalStateException("Unexpected condition type: " + conditionWithType); + default -> throw new IllegalStateException( + "Unexpected condition type: " + conditionWithType); } return this; } @@ -167,16 +177,20 @@ DetailBuilder markForDelete() { } } - - record Detail(Exception error, ReconcileResult reconcileResult, + record Detail( + Exception error, + ReconcileResult reconcileResult, DetailedCondition.Result activationConditionResult, DetailedCondition.Result deletePostconditionResult, DetailedCondition.Result readyPostconditionResult, DetailedCondition.Result reconcilePostconditionResult, - boolean deleted, boolean visited, boolean markedForDelete) { + boolean deleted, + boolean visited, + boolean markedForDelete) { boolean isConditionWithTypeMet(Condition.Type conditionType) { - return getResultForConditionWithType(conditionType).map(DetailedCondition.Result::isSuccess) + return getResultForConditionWithType(conditionType) + .map(DetailedCondition.Result::isSuccess) .orElse(true); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationCondition.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationCondition.java index 5a60b63d41..01b049b8a7 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationCondition.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationCondition.java @@ -42,27 +42,24 @@ public CRDPresentActivationCondition(int checkLimit, Duration crdCheckInterval) } // for testing purposes only - CRDPresentActivationCondition(CRDPresentChecker crdPresentChecker, int checkLimit, - Duration crdCheckInterval) { + CRDPresentActivationCondition( + CRDPresentChecker crdPresentChecker, int checkLimit, Duration crdCheckInterval) { this.crdPresentChecker = crdPresentChecker; this.checkLimit = checkLimit; this.crdCheckInterval = crdCheckInterval; } @Override - public boolean isMet(DependentResource dependentResource, - P primary, Context

    context) { + public boolean isMet(DependentResource dependentResource, P primary, Context

    context) { var resourceClass = dependentResource.resourceType(); final var crdName = HasMetadata.getFullResourceName(resourceClass); - var crdCheckState = crdPresenceCache.computeIfAbsent(crdName, - g -> new CRDCheckState()); + var crdCheckState = crdPresenceCache.computeIfAbsent(crdName, g -> new CRDCheckState()); synchronized (crdCheckState) { if (shouldCheckStateNow(crdCheckState)) { - boolean isPresent = crdPresentChecker - .checkIfCRDPresent(crdName, context.getClient()); + boolean isPresent = crdPresentChecker.checkIfCRDPresent(crdName, context.getClient()); crdCheckState.checkedNow(isPresent); } } @@ -119,8 +116,7 @@ public int getCheckCount() { public static class CRDPresentChecker { boolean checkIfCRDPresent(String crdName, KubernetesClient client) { - return client.resources(CustomResourceDefinition.class) - .withName(crdName).get() != null; + return client.resources(CustomResourceDefinition.class).withName(crdName).get() != null; } } @@ -128,5 +124,4 @@ boolean checkIfCRDPresent(String crdName, KubernetesClient client) { public static void clearState() { crdPresenceCache.clear(); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java index de96c99ca5..066174da91 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/Condition.java @@ -7,7 +7,10 @@ public interface Condition { enum Type { - ACTIVATION, DELETE, READY, RECONCILE + ACTIVATION, + DELETE, + READY, + RECONCILE } /** diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ConditionWithType.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ConditionWithType.java index de95830a92..97e00a760c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ConditionWithType.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ConditionWithType.java @@ -19,13 +19,12 @@ public Type type() { @SuppressWarnings("unchecked") @Override - public Result detailedIsMet(DependentResource dependentResource, P primary, - Context

    context) { + public Result detailedIsMet( + DependentResource dependentResource, P primary, Context

    context) { if (condition instanceof DetailedCondition detailedCondition) { return detailedCondition.detailedIsMet(dependentResource, primary, context); } else { - return Result - .withoutResult(condition.isMet(dependentResource, primary, context)); + return Result.withoutResult(condition.isMet(dependentResource, primary, context)); } } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultManagedWorkflow.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultManagedWorkflow.java index 017dbb74a5..91458e558e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultManagedWorkflow.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultManagedWorkflow.java @@ -27,9 +27,8 @@ public class DefaultManagedWorkflow

    implements ManagedWor protected DefaultManagedWorkflow(List orderedSpecs, boolean hasCleaner) { this.hasCleaner = hasCleaner; topLevelResources = new HashSet<>(orderedSpecs.size()); - bottomLevelResources = orderedSpecs.stream() - .map(DependentResourceSpec::getName) - .collect(Collectors.toSet()); + bottomLevelResources = + orderedSpecs.stream().map(DependentResourceSpec::getName).collect(Collectors.toSet()); this.orderedSpecs = orderedSpecs; for (DependentResourceSpec spec : orderedSpecs) { // add cycle detection? @@ -73,8 +72,7 @@ public boolean isEmpty() { @Override @SuppressWarnings("unchecked") - public Workflow

    resolve(KubernetesClient client, - ControllerConfiguration

    configuration) { + public Workflow

    resolve(KubernetesClient client, ControllerConfiguration

    configuration) { final var alreadyResolved = new HashMap(orderedSpecs.size()); for (DependentResourceSpec spec : orderedSpecs) { final var dependentResource = resolve(spec, client, configuration); @@ -85,43 +83,49 @@ public Workflow

    resolve(KubernetesClient client, spec.getActivationCondition(), dependentResource); alreadyResolved.put(dependentResource.name(), node); - spec.getDependsOn() - .forEach(depend -> node.addDependsOnRelation(alreadyResolved.get(depend))); + spec.getDependsOn().forEach(depend -> node.addDependsOnRelation(alreadyResolved.get(depend))); } final var bottom = bottomLevelResources.stream().map(alreadyResolved::get).collect(Collectors.toSet()); final var top = topLevelResources.stream().map(alreadyResolved::get).collect(Collectors.toSet()); - return new DefaultWorkflow<>(alreadyResolved, bottom, top, - configuration.getWorkflowSpec().map(w -> !w.handleExceptionsInReconciler()).orElseThrow(), + return new DefaultWorkflow<>( + alreadyResolved, + bottom, + top, + configuration + .getWorkflowSpec() + .map(w -> !w.handleExceptionsInReconciler()) + .orElseThrow(), hasCleaner); } @SuppressWarnings({"rawtypes", "unchecked"}) - private DependentResource resolve(DependentResourceSpec spec, + private DependentResource resolve( + DependentResourceSpec spec, KubernetesClient client, ControllerConfiguration

    configuration) { - final DependentResource dependentResource = - configuration.getConfigurationService().dependentResourceFactory() - .createFrom(spec, configuration); + final DependentResource dependentResource = configuration + .getConfigurationService() + .dependentResourceFactory() + .createFrom(spec, configuration); final var name = spec.getName(); if (name != null && !NO_VALUE_SET.equals(name) && dependentResource instanceof NameSetter) { ((NameSetter) dependentResource).setName(name); } - spec.getUseEventSourceWithName() - .ifPresent(esName -> { - if (dependentResource instanceof EventSourceReferencer) { - ((EventSourceReferencer) dependentResource).useEventSourceWithName(esName); - } else { - throw new IllegalStateException( - "DependentResource " + spec + " wants to use EventSource named " + esName - + " but doesn't implement support for this feature by implementing " - + EventSourceReferencer.class.getSimpleName()); - } - }); + spec.getUseEventSourceWithName().ifPresent(esName -> { + if (dependentResource instanceof EventSourceReferencer) { + ((EventSourceReferencer) dependentResource).useEventSourceWithName(esName); + } else { + throw new IllegalStateException( + "DependentResource " + spec + " wants to use EventSource named " + esName + + " but doesn't implement support for this feature by implementing " + + EventSourceReferencer.class.getSimpleName()); + } + }); return dependentResource; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java index 3b928ad78a..b763c4fb0a 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflow.java @@ -36,7 +36,8 @@ class DefaultWorkflow

    implements Workflow

    { this(dependentResourceNodes, THROW_EXCEPTION_AUTOMATICALLY_DEFAULT, false); } - DefaultWorkflow(Set dependentResourceNodes, + DefaultWorkflow( + Set dependentResourceNodes, boolean throwExceptionAutomatically, boolean hasCleaner) { this.throwExceptionAutomatically = throwExceptionAutomatically; @@ -53,8 +54,10 @@ class DefaultWorkflow

    implements Workflow

    { } } - protected DefaultWorkflow(Map dependentResourceNodes, - Set bottomLevelResource, Set topLevelResources, + protected DefaultWorkflow( + Map dependentResourceNodes, + Set bottomLevelResource, + Set topLevelResources, boolean throwExceptionAutomatically, boolean hasCleaner) { this.throwExceptionAutomatically = throwExceptionAutomatically; @@ -151,8 +154,8 @@ public int size() { @Override public Map getDependentResourcesByName() { final var resources = new HashMap(dependentResourceNodes.size()); - dependentResourceNodes - .forEach((name, node) -> resources.put(name, node.getDependentResource())); + dependentResourceNodes.forEach( + (name, node) -> resources.put(name, node.getDependentResource())); return resources; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflowReconcileResult.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflowReconcileResult.java index 3221308312..c7ed8290d0 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflowReconcileResult.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DefaultWorkflowReconcileResult.java @@ -12,7 +12,6 @@ class DefaultWorkflowReconcileResult extends BaseWorkflowResult implements Workf super(results); } - public List getReconciledDependents() { return listFilteredBy(detail -> detail.reconcileResult() != null); } @@ -21,8 +20,8 @@ public List getNotReadyDependents() { return listFilteredBy(detail -> !detail.isConditionWithTypeMet(Condition.Type.READY)); } - public Optional getNotReadyDependentResult(DependentResource dependentResource, - Class expectedResultType) { + public Optional getNotReadyDependentResult( + DependentResource dependentResource, Class expectedResultType) { return getDependentConditionResult(dependentResource, Condition.Type.READY, expectedResultType); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DependentResourceNode.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DependentResourceNode.java index aa8bb31c66..2e84d5e61c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DependentResourceNode.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DependentResourceNode.java @@ -23,9 +23,12 @@ class DependentResourceNode { this(null, null, null, null, dependentResource); } - public DependentResourceNode(Condition reconcilePrecondition, - Condition deletePostcondition, Condition readyPostcondition, - Condition activationCondition, DependentResource dependentResource) { + public DependentResourceNode( + Condition reconcilePrecondition, + Condition deletePostcondition, + Condition readyPostcondition, + Condition activationCondition, + DependentResource dependentResource) { setReconcilePrecondition(reconcilePrecondition); setDeletePostcondition(deletePostcondition); setReadyPostcondition(readyPostcondition); @@ -67,22 +70,26 @@ public List getParents() { } void setReconcilePrecondition(Condition reconcilePrecondition) { - this.reconcilePrecondition = reconcilePrecondition == null ? null + this.reconcilePrecondition = reconcilePrecondition == null + ? null : new ConditionWithType<>(reconcilePrecondition, Condition.Type.RECONCILE); } void setDeletePostcondition(Condition deletePostcondition) { - this.deletePostcondition = deletePostcondition == null ? null + this.deletePostcondition = deletePostcondition == null + ? null : new ConditionWithType<>(deletePostcondition, Condition.Type.DELETE); } void setActivationCondition(Condition activationCondition) { - this.activationCondition = activationCondition == null ? null + this.activationCondition = activationCondition == null + ? null : new ConditionWithType<>(activationCondition, Condition.Type.ACTIVATION); } void setReadyPostcondition(Condition readyPostcondition) { - this.readyPostcondition = readyPostcondition == null ? null + this.readyPostcondition = readyPostcondition == null + ? null : new ConditionWithType<>(readyPostcondition, Condition.Type.READY); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DetailedCondition.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DetailedCondition.java index 200743cc0e..ae78f97f7f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DetailedCondition.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/DetailedCondition.java @@ -6,7 +6,7 @@ /** * A condition that can return extra information in addition of whether it is met or not. - * + * * @param the resource type this condition applies to * @param

    the primary resource type associated with the dependent workflow this condition is * part of @@ -17,7 +17,7 @@ public interface DetailedCondition extends Conditio /** * Checks whether a condition holds true for the specified {@link DependentResource}, returning * additional information as needed. - * + * * @param dependentResource the {@link DependentResource} for which we want to check the condition * @param primary the primary resource being considered * @param context the current reconciliation {@link Context} @@ -34,7 +34,7 @@ default boolean isMet(DependentResource dependentResource, P primary, Cont /** * Holds a more detailed {@link Condition} result. - * + * * @param the type of the extra information provided in condition evaluation */ @SuppressWarnings({"rawtypes", "unchecked"}) @@ -51,7 +51,7 @@ interface Result { /** * Creates a {@link Result} without extra information - * + * * @param success whether or not the condition has been met * @return a {@link Result} without extra information */ @@ -61,7 +61,7 @@ static Result withoutResult(boolean success) { /** * Creates a {@link Result} with the specified condition evaluation result and extra information - * + * * @param success whether or not the condition has been met * @param detail the extra information that the condition provided during its evaluation * @return a {@link Result} with the specified condition evaluation result and extra information @@ -78,7 +78,7 @@ default String asString() { /** * The extra information provided by the associated {@link DetailedCondition} during its * evaluation - * + * * @return extra information provided by the associated {@link DetailedCondition} during its * evaluation or {@code null} if none was provided */ @@ -86,7 +86,7 @@ default String asString() { /** * Whether the associated condition held true - * + * * @return {@code true} if the associated condition was met, {@code false} otherwise */ boolean isSuccess(); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/KubernetesResourceDeletedCondition.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/KubernetesResourceDeletedCondition.java index 28342f2d17..4137ac9519 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/KubernetesResourceDeletedCondition.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/KubernetesResourceDeletedCondition.java @@ -15,8 +15,10 @@ public class KubernetesResourceDeletedCondition implements Condition { @Override - public boolean isMet(DependentResource dependentResource, - HasMetadata primary, Context context) { + public boolean isMet( + DependentResource dependentResource, + HasMetadata primary, + Context context) { var optionalResource = dependentResource.getSecondaryResource(primary, context); if (optionalResource.isEmpty()) { return true; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupport.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupport.java index d6404aa392..626f37c80f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupport.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupport.java @@ -122,8 +122,8 @@ String name() { } } - private boolean isReadyForVisit(DependentResourceSpec dr, Set alreadyVisited, - String alreadyPresentName) { + private boolean isReadyForVisit( + DependentResourceSpec dr, Set alreadyVisited, String alreadyPresentName) { for (var name : dr.getDependsOn()) { if (name.equals(alreadyPresentName)) { continue; @@ -137,7 +137,8 @@ private boolean isReadyForVisit(DependentResourceSpec dr, Set alreadyVis private Set getTopDependentResources( List dependentResourceSpecs) { - return dependentResourceSpecs.stream().filter(r -> r.getDependsOn().isEmpty()) + return dependentResourceSpecs.stream() + .filter(r -> r.getDependsOn().isEmpty()) .collect(Collectors.toSet()); } @@ -155,5 +156,4 @@ private Map createDRInfos(List dependentR return infos; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/NodeExecutor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/NodeExecutor.java index 2006486dc1..740d10710d 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/NodeExecutor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/NodeExecutor.java @@ -7,7 +7,8 @@ abstract class NodeExecutor implements Runnable { private final DependentResourceNode dependentResourceNode; private final AbstractWorkflowExecutor

    workflowExecutor; - protected NodeExecutor(DependentResourceNode dependentResourceNode, + protected NodeExecutor( + DependentResourceNode dependentResourceNode, AbstractWorkflowExecutor

    workflowExecutor) { this.dependentResourceNode = dependentResourceNode; this.workflowExecutor = workflowExecutor; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilder.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilder.java index 7493058723..e85434f10f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilder.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilder.java @@ -60,8 +60,8 @@ public Workflow

    build() { } DefaultWorkflow

    buildAsDefaultWorkflow() { - return new DefaultWorkflow(new HashSet<>(dependentResourceNodes.values()), - throwExceptionAutomatically, isCleaner); + return new DefaultWorkflow( + new HashSet<>(dependentResourceNodes.values()), throwExceptionAutomatically, isCleaner); } public class WorkflowNodeConfigurationBuilder { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutor.java index 4681502a3b..f18ea528d7 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutor.java @@ -21,8 +21,8 @@ class WorkflowCleanupExecutor

    extends AbstractWorkflowExe } public synchronized WorkflowCleanupResult cleanup() { - for (DependentResourceNode dependentResourceNode : workflow - .getBottomLevelDependentResources()) { + for (DependentResourceNode dependentResourceNode : + workflow.getBottomLevelDependentResources()) { handleCleanup(dependentResourceNode); } waitForScheduledExecutionsToRun(); @@ -57,8 +57,11 @@ private synchronized void handleCleanup(DependentResourceNode dependentResourceN if (hasErroredDependent) { causes.add("errored dependent"); } - log.debug("Skipping: {} primaryID: {} causes: {}", dependentResourceNode, - primaryID, String.join(", ", causes)); + log.debug( + "Skipping: {} primaryID: {} causes: {}", + dependentResourceNode, + primaryID, + String.join(", ", causes)); } return; } @@ -66,7 +69,6 @@ private synchronized void handleCleanup(DependentResourceNode dependentResourceN submit(dependentResourceNode, new CleanupExecutor<>(dependentResourceNode), CLEANUP); } - private class CleanupExecutor extends NodeExecutor { private CleanupExecutor(DependentResourceNode drn) { @@ -105,8 +107,11 @@ private synchronized void handleDependentCleaned( var dependOns = dependentResourceNode.getDependsOn(); if (dependOns != null) { dependOns.forEach(d -> { - log.debug("Handle cleanup for dependent: {} of parent: {} primaryID: {}", d, - dependentResourceNode, primaryID); + log.debug( + "Handle cleanup for dependent: {} of parent: {} primaryID: {}", + d, + dependentResourceNode, + primaryID); handleCleanup(d); }); } @@ -116,8 +121,7 @@ private synchronized void handleDependentCleaned( private boolean allDependentsCleaned(DependentResourceNode dependentResourceNode) { List parents = dependentResourceNode.getParents(); return parents.isEmpty() - || parents.stream() - .allMatch(d -> alreadyVisited(d) && !postDeleteConditionNotMet(d)); + || parents.stream().allMatch(d -> alreadyVisited(d) && !postDeleteConditionNotMet(d)); } @SuppressWarnings("unchecked") diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java index 432a168ad7..f588a7068c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutor.java @@ -44,7 +44,10 @@ private synchronized void handleReconcile(DependentResourceNode depend final var isWaitingOnParents = !allParentsReconciledAndReady(dependentResourceNode); final var isMarkedForDelete = isMarkedForDelete(dependentResourceNode); final var hasErroredParent = hasErroredParent(dependentResourceNode); - if (isWaitingOnParents || alreadyVisited || executingNow || isMarkedForDelete + if (isWaitingOnParents + || alreadyVisited + || executingNow + || isMarkedForDelete || hasErroredParent) { if (log.isDebugEnabled()) { final var causes = new ArrayList(); @@ -63,20 +66,23 @@ private synchronized void handleReconcile(DependentResourceNode depend if (hasErroredParent) { causes.add("errored parent"); } - log.debug("Skipping: {} primaryID: {} causes: {}", dependentResourceNode, - primaryID, String.join(", ", causes)); + log.debug( + "Skipping: {} primaryID: {} causes: {}", + dependentResourceNode, + primaryID, + String.join(", ", causes)); } return; } - boolean activationConditionMet = isConditionMet(dependentResourceNode.getActivationCondition(), - dependentResourceNode); + boolean activationConditionMet = + isConditionMet(dependentResourceNode.getActivationCondition(), dependentResourceNode); registerOrDeregisterEventSourceBasedOnActivation(activationConditionMet, dependentResourceNode); boolean reconcileConditionMet = true; if (activationConditionMet) { - reconcileConditionMet = isConditionMet(dependentResourceNode.getReconcilePrecondition(), - dependentResourceNode); + reconcileConditionMet = + isConditionMet(dependentResourceNode.getReconcilePrecondition(), dependentResourceNode); } if (!reconcileConditionMet || !activationConditionMet) { handleReconcileOrActivationConditionNotMet(dependentResourceNode, activationConditionMet); @@ -107,21 +113,23 @@ private synchronized void handleDelete(DependentResourceNode dependentResourceNo if (isWaitingOnDependents) { causes.add("waiting on dependents"); } - log.debug("Skipping submit for delete of: {} primaryID: {} causes: {}", + log.debug( + "Skipping submit for delete of: {} primaryID: {} causes: {}", dependentResourceNode, - primaryID, String.join(", ", causes)); + primaryID, + String.join(", ", causes)); } return; } - submit(dependentResourceNode, - new NodeDeleteExecutor<>(dependentResourceNode), DELETE); + submit(dependentResourceNode, new NodeDeleteExecutor<>(dependentResourceNode), DELETE); } private boolean allDependentsDeletedAlready(DependentResourceNode dependentResourceNode) { var dependents = dependentResourceNode.getParents(); - return dependents.stream().allMatch(d -> alreadyVisited(d) && isReady(d) - && !isInError(d) && !postDeleteConditionNotMet(d)); + return dependents.stream() + .allMatch( + d -> alreadyVisited(d) && isReady(d) && !isInError(d) && !postDeleteConditionNotMet(d)); } private class NodeReconcileExecutor extends NodeExecutor { @@ -133,15 +141,14 @@ private NodeReconcileExecutor(DependentResourceNode dependentResourceNode) @Override protected void doRun(DependentResourceNode dependentResourceNode) { final var dependentResource = dependentResourceNode.getDependentResource(); - log.debug( - "Reconciling for primary: {} node: {} ", primaryID, dependentResourceNode); + log.debug("Reconciling for primary: {} node: {} ", primaryID, dependentResourceNode); ReconcileResult reconcileResult = dependentResource.reconcile(primary, context); final var detailBuilder = createOrGetResultFor(dependentResourceNode); detailBuilder.withReconcileResult(reconcileResult).markAsVisited(); if (isConditionMet(dependentResourceNode.getReadyPostcondition(), dependentResourceNode)) { - log.debug("Setting already reconciled for: {} primaryID: {}", - dependentResourceNode, primaryID); + log.debug( + "Setting already reconciled for: {} primaryID: {}", dependentResourceNode, primaryID); handleDependentsReconcile(dependentResourceNode); } else { log.debug("Setting already reconciled but not ready for: {}", dependentResourceNode); @@ -181,8 +188,11 @@ protected void doRun(DependentResourceNode dependentResourceNode) { private synchronized void handleDependentDeleted( DependentResourceNode dependentResourceNode) { dependentResourceNode.getDependsOn().forEach(dr -> { - log.debug("Handle deleted for: {} with dependent: {} primaryID: {}", dr, - dependentResourceNode, primaryID); + log.debug( + "Handle deleted for: {} with dependent: {} primaryID: {}", + dr, + dependentResourceNode, + primaryID); handleDelete(dr); }); } @@ -191,22 +201,26 @@ private synchronized void handleDependentsReconcile( DependentResourceNode dependentResourceNode) { var dependents = dependentResourceNode.getParents(); dependents.forEach(d -> { - log.debug("Handle reconcile for dependent: {} of parent:{} primaryID: {}", d, - dependentResourceNode, primaryID); + log.debug( + "Handle reconcile for dependent: {} of parent:{} primaryID: {}", + d, + dependentResourceNode, + primaryID); handleReconcile(d); }); } private void handleReconcileOrActivationConditionNotMet( - DependentResourceNode dependentResourceNode, - boolean activationConditionMet) { + DependentResourceNode dependentResourceNode, boolean activationConditionMet) { Set bottomNodes = new HashSet<>(); markDependentsForDelete(dependentResourceNode, bottomNodes, activationConditionMet); bottomNodes.forEach(this::handleDelete); } - private void markDependentsForDelete(DependentResourceNode dependentResourceNode, - Set bottomNodes, boolean activationConditionMet) { + private void markDependentsForDelete( + DependentResourceNode dependentResourceNode, + Set bottomNodes, + boolean activationConditionMet) { // this is a check so the activation condition is not evaluated twice, // so if the activation condition was false, this node is not meant to be deleted. var dependents = dependentResourceNode.getParents(); @@ -236,8 +250,7 @@ private boolean allParentsReconciledAndReady(DependentResourceNode depende private boolean hasErroredParent(DependentResourceNode dependentResourceNode) { return !dependentResourceNode.getDependsOn().isEmpty() - && dependentResourceNode.getDependsOn().stream() - .anyMatch(this::isInError); + && dependentResourceNode.getDependsOn().stream().anyMatch(this::isInError); } private WorkflowReconcileResult createReconcileResult() { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileResult.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileResult.java index dd05e3f8e3..939f112697 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileResult.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileResult.java @@ -17,8 +17,8 @@ default List getNotReadyDependents() { return List.of(); } - default Optional getNotReadyDependentResult(DependentResource dependentResource, - Class expectedResultType) { + default Optional getNotReadyDependentResult( + DependentResource dependentResource, Class expectedResultType) { return Optional.empty(); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowResult.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowResult.java index 0d7e74fa78..39894d5457 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowResult.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowResult.java @@ -35,10 +35,11 @@ default Optional getDependentResourceByName(String name) { * @return the dependent condition result if it exists or {@link Optional#empty()} otherwise * @throws IllegalArgumentException if a result exists but is not of the expected type */ - default Optional getDependentConditionResult(String dependentResourceName, - Condition.Type conditionType, Class expectedResultType) { + default Optional getDependentConditionResult( + String dependentResourceName, Condition.Type conditionType, Class expectedResultType) { return getDependentConditionResult( - getDependentResourceByName(dependentResourceName).orElse(null), conditionType, + getDependentResourceByName(dependentResourceName).orElse(null), + conditionType, expectedResultType); } @@ -54,8 +55,10 @@ default Optional getDependentConditionResult(String dependentResourceName * @return the dependent condition result if it exists or {@link Optional#empty()} otherwise * @throws IllegalArgumentException if a result exists but is not of the expected type */ - default Optional getDependentConditionResult(DependentResource dependentResource, - Condition.Type conditionType, Class expectedResultType) { + default Optional getDependentConditionResult( + DependentResource dependentResource, + Condition.Type conditionType, + Class expectedResultType) { return Optional.empty(); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/Event.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/Event.java index 227a297795..9ed00625bb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/Event.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/Event.java @@ -16,17 +16,13 @@ public ResourceID getRelatedCustomResourceID() { @Override public String toString() { - return "Event{" + - "relatedCustomResource=" + relatedCustomResource + - '}'; + return "Event{" + "relatedCustomResource=" + relatedCustomResource + '}'; } @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; Event event = (Event) o; return Objects.equals(relatedCustomResource, event.relatedCustomResource); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventHandler.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventHandler.java index 73f7867da4..064b566220 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventHandler.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventHandler.java @@ -3,5 +3,4 @@ public interface EventHandler { void handleEvent(Event event); - } 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 e05ea4830f..45d57f84ee 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 @@ -47,12 +47,14 @@ public class EventProcessor

    implements EventHandler, Life private final Map metricsMetadata; private ExecutorService executor; - public EventProcessor(EventSourceManager

    eventSourceManager, - ConfigurationService configurationService) { + public EventProcessor( + EventSourceManager

    eventSourceManager, ConfigurationService configurationService) { this( eventSourceManager.getController().getConfiguration(), - new ReconciliationDispatcher<>(eventSourceManager.getController()), eventSourceManager, - configurationService.getMetrics(), eventSourceManager.getControllerEventSource()); + new ReconciliationDispatcher<>(eventSourceManager.getController()), + eventSourceManager, + configurationService.getMetrics(), + eventSourceManager.getControllerEventSource()); } @SuppressWarnings("rawtypes") @@ -63,7 +65,9 @@ public EventProcessor(EventSourceManager

    eventSourceManager, Metrics metrics) { this( controllerConfiguration, - reconciliationDispatcher, eventSourceManager, metrics, + reconciliationDispatcher, + eventSourceManager, + metrics, eventSourceManager.getControllerEventSource()); } @@ -71,7 +75,9 @@ public EventProcessor(EventSourceManager

    eventSourceManager, private EventProcessor( ControllerConfiguration controllerConfiguration, ReconciliationDispatcher

    reconciliationDispatcher, - EventSourceManager

    eventSourceManager, Metrics metrics, Cache

    cache) { + EventSourceManager

    eventSourceManager, + Metrics metrics, + Cache

    cache) { this.controllerConfiguration = controllerConfiguration; this.running = false; this.reconciliationDispatcher = reconciliationDispatcher; @@ -206,10 +212,11 @@ private boolean isResourceMarkedForDeletion(ResourceEvent resourceEvent) { private void handleRateLimitedSubmission(ResourceID resourceID, Duration minimalDuration) { var minimalDurationMillis = minimalDuration.toMillis(); - log.debug("Rate limited resource: {}, rescheduled in {} millis", resourceID, - minimalDurationMillis); - retryEventSource().scheduleOnce(resourceID, - Math.max(minimalDurationMillis, MINIMAL_RATE_LIMIT_RESCHEDULE_DURATION)); + log.debug( + "Rate limited resource: {}, rescheduled in {} millis", resourceID, minimalDurationMillis); + retryEventSource() + .scheduleOnce( + resourceID, Math.max(minimalDurationMillis, MINIMAL_RATE_LIMIT_RESCHEDULE_DURATION)); } synchronized void eventProcessingFinished( @@ -255,10 +262,12 @@ synchronized void eventProcessingFinished( /** * In case retry is configured more complex error logging takes place, see handleRetryOnException */ - private void logErrorIfNoRetryConfigured(ExecutionScope

    executionScope, - PostExecutionControl

    postExecutionControl) { + private void logErrorIfNoRetryConfigured( + ExecutionScope

    executionScope, PostExecutionControl

    postExecutionControl) { if (!isRetryConfigured() && postExecutionControl.exceptionDuringExecution()) { - log.error("Error during event processing {}", executionScope, + log.error( + "Error during event processing {}", + executionScope, postExecutionControl.getRuntimeException().orElseThrow()); } } @@ -268,24 +277,26 @@ private void reScheduleExecutionIfInstructed( postExecutionControl .getReScheduleDelay() - .ifPresentOrElse(delay -> { - var resourceID = ResourceID.fromResource(customResource); - log.debug("Rescheduling event for resource: {} with delay: {}", resourceID, delay); - retryEventSource().scheduleOnce(resourceID, delay); - }, () -> scheduleExecutionForMaxReconciliationInterval(customResource)); + .ifPresentOrElse( + delay -> { + var resourceID = ResourceID.fromResource(customResource); + log.debug("Rescheduling event for resource: {} with delay: {}", resourceID, delay); + retryEventSource().scheduleOnce(resourceID, delay); + }, + () -> scheduleExecutionForMaxReconciliationInterval(customResource)); } private void scheduleExecutionForMaxReconciliationInterval(P customResource) { - this.controllerConfiguration - .maxReconciliationInterval() - .ifPresent(m -> { - var resourceID = ResourceID.fromResource(customResource); - var delay = m.toMillis(); - log.debug("Rescheduling event for max reconciliation interval for resource: {} : " + - "with delay: {}", - resourceID, delay); - retryEventSource().scheduleOnce(resourceID, delay); - }); + this.controllerConfiguration.maxReconciliationInterval().ifPresent(m -> { + var resourceID = ResourceID.fromResource(customResource); + var delay = m.toMillis(); + log.debug( + "Rescheduling event for max reconciliation interval for resource: {} : " + + "with delay: {}", + resourceID, + delay); + retryEventSource().scheduleOnce(resourceID, delay); + }); } TimerEventSource

    retryEventSource() { @@ -297,8 +308,7 @@ TimerEventSource

    retryEventSource() { * events (received meanwhile retry is in place or already in buffer) instantly or always wait * according to the retry timing if there was an exception. */ - private void handleRetryOnException( - ExecutionScope

    executionScope, Exception exception) { + private void handleRetryOnException(ExecutionScope

    executionScope, Exception exception) { final var state = getOrInitRetryExecution(executionScope); var resourceID = state.getId(); boolean eventPresent = state.eventPresent(); @@ -315,9 +325,7 @@ private void handleRetryOnException( nextDelay.ifPresentOrElse( delay -> { log.debug( - "Scheduling timer event for retry with delay:{} for resource: {}", - delay, - resourceID); + "Scheduling timer event for retry with delay:{} for resource: {}", delay, resourceID); metrics.failedReconciliation(executionScope.getResource(), exception, metricsMetadata); retryEventSource().scheduleOnce(resourceID, delay); }, @@ -327,22 +335,25 @@ private void handleRetryOnException( }); } - private void retryAwareErrorLogging(RetryExecution retry, boolean eventPresent, + private void retryAwareErrorLogging( + RetryExecution retry, + boolean eventPresent, Exception exception, ExecutionScope

    executionScope) { - if (!eventPresent && !retry.isLastAttempt() + if (!eventPresent + && !retry.isLastAttempt() && exception instanceof KubernetesClientException ex) { if (ex.getCode() == HttpURLConnection.HTTP_CONFLICT) { - log.debug("Full client conflict error during event processing {}", executionScope, - exception); + log.debug( + "Full client conflict error during event processing {}", executionScope, exception); log.warn( "Resource Kubernetes Resource Creator/Update Conflict during reconciliation. Message: {} Resource name: {}", - ex.getMessage(), ex.getFullResourceName()); + ex.getMessage(), + ex.getFullResourceName()); return; } } - log.error("Error during event processing {}", executionScope, - exception); + log.error("Error during event processing {}", executionScope, exception); } private void cleanupOnSuccessfulExecution(ExecutionScope

    executionScope) { @@ -391,7 +402,9 @@ public synchronized void stop() { public synchronized void start() throws OperatorException { log.debug("Starting event processor: {}", this); // on restart new executor service is created and needs to be set here - executor = controllerConfiguration.getConfigurationService().getExecutorServiceManager() + executor = controllerConfiguration + .getConfigurationService() + .getExecutorServiceManager() .reconcileExecutorService(); this.running = true; handleAlreadyMarkedEvents(); @@ -432,8 +445,7 @@ public void run() { try { var actualResource = cache.get(resourceID); if (actualResource.isEmpty()) { - log.debug("Skipping execution; primary resource missing from cache: {}", - resourceID); + log.debug("Skipping execution; primary resource missing from cache: {}", resourceID); return; } actualResource.ifPresent(executionScope::setResource); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java index 174ffa0978..0261067904 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceManager.java @@ -70,14 +70,14 @@ public synchronized void start() { startEventSource(eventSources.controllerEventSource()); executorServiceManager.boundedExecuteAndWaitForAllToComplete( - eventSources.additionalEventSources() - .filter(es -> es.priority().equals(EventSourceStartPriority.RESOURCE_STATE_LOADER)), + eventSources.additionalEventSources().filter(es -> es.priority() + .equals(EventSourceStartPriority.RESOURCE_STATE_LOADER)), this::startEventSource, getThreadNamer("start")); executorServiceManager.boundedExecuteAndWaitForAllToComplete( - eventSources.additionalEventSources() - .filter(es -> es.priority().equals(EventSourceStartPriority.DEFAULT)), + eventSources.additionalEventSources().filter(es -> es.priority() + .equals(EventSourceStartPriority.DEFAULT)), this::startEventSource, getThreadNamer("start")); } @@ -95,16 +95,13 @@ private static Function getEventSourceThreadNamer(S public synchronized void stop() { stopEventSource(eventSources.controllerEventSource()); executorServiceManager.boundedExecuteAndWaitForAllToComplete( - eventSources.additionalEventSources(), - this::stopEventSource, - getThreadNamer("stop")); + eventSources.additionalEventSources(), this::stopEventSource, getThreadNamer("stop")); } @SuppressWarnings("rawtypes") private void logEventSourceEvent(EventSource eventSource, String event) { if (log.isDebugEnabled()) { - log.debug("{} event source {} for {}", event, eventSource.name(), - eventSource.resourceType()); + log.debug("{} event source {} for {}", event, eventSource.name(), eventSource.resourceType()); } } @@ -138,38 +135,38 @@ public final synchronized void registerEventSource(EventSource eventSo Objects.requireNonNull(eventSource, "EventSource must not be null"); try { if (eventSource instanceof ManagedInformerEventSource managedInformerEventSource) { - managedInformerEventSource.setControllerConfiguration( - controller.getConfiguration()); + managedInformerEventSource.setControllerConfiguration(controller.getConfiguration()); } eventSources.add(eventSource); eventSource.setEventHandler(controller.getEventProcessor()); } catch (IllegalStateException | MissingCRDException e) { throw e; // leave untouched } catch (Exception e) { - throw new OperatorException("Couldn't register event source: " + eventSource.name() + " for " - + controller.getConfiguration().getName() + " controller", e); + throw new OperatorException( + "Couldn't register event source: " + eventSource.name() + " for " + + controller.getConfiguration().getName() + " controller", + e); } } @SuppressWarnings("unchecked") public void broadcastOnResourceEvent(ResourceAction action, P resource, P oldResource) { - eventSources.additionalEventSources() - .forEach(source -> { - if (source instanceof ResourceEventAware) { - var lifecycleAwareES = ((ResourceEventAware

    ) source); - switch (action) { - case ADDED: - lifecycleAwareES.onResourceCreated(resource); - break; - case UPDATED: - lifecycleAwareES.onResourceUpdated(resource, oldResource); - break; - case DELETED: - lifecycleAwareES.onResourceDeleted(resource); - break; - } - } - }); + eventSources.additionalEventSources().forEach(source -> { + if (source instanceof ResourceEventAware) { + var lifecycleAwareES = ((ResourceEventAware

    ) source); + switch (action) { + case ADDED: + lifecycleAwareES.onResourceCreated(resource); + break; + case UPDATED: + lifecycleAwareES.onResourceUpdated(resource, oldResource); + break; + case DELETED: + lifecycleAwareES.onResourceDeleted(resource); + break; + } + } + }); } public void changeNamespaces(Set namespaces) { @@ -179,16 +176,17 @@ public void changeNamespaces(Set namespaces) { .filter(NamespaceChangeable.class::isInstance) .map(NamespaceChangeable.class::cast) .filter(NamespaceChangeable::allowsNamespaceChanges); - executorServiceManager.boundedExecuteAndWaitForAllToComplete(namespaceChangeables, e -> { - e.changeNamespaces(namespaces); - return null; - }, + executorServiceManager.boundedExecuteAndWaitForAllToComplete( + namespaceChangeables, + e -> { + e.changeNamespaces(namespaces); + return null; + }, getEventSourceThreadNamer("changeNamespace")); } public Set> getRegisteredEventSources() { - return eventSources.flatMappedSources() - .collect(Collectors.toCollection(LinkedHashSet::new)); + return eventSources.flatMappedSources().collect(Collectors.toCollection(LinkedHashSet::new)); } @SuppressWarnings("rawtypes") @@ -196,7 +194,6 @@ public List allEventSources() { return eventSources.allEventSources().toList(); } - @SuppressWarnings("unused") public Stream> getEventSourcesStream() { return eventSources.flatMappedSources(); @@ -243,8 +240,7 @@ public EventSourceContext

    eventSourceContextForDynamicRegistration() { } @Override - public EventSource getEventSourceFor( - Class dependentType, String name) { + public EventSource getEventSourceFor(Class dependentType, String name) { Objects.requireNonNull(dependentType, "dependentType is Mandatory"); return eventSources.get(dependentType, name); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java index 16b03303a4..ba1c6786d5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSourceRetriever.java @@ -70,5 +70,4 @@ default EventSource getEventSourceFor(Class dependentType) { Optional> dynamicallyDeRegisterEventSource(String name); EventSourceContext

    eventSourceContextForDynamicRegistration(); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java index c21509f41c..5716497849 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/EventSources.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.processing.event; - import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -31,12 +30,13 @@ public void add(EventSource eventSource) { final var name = eventSource.name(); var existing = sourceByName.get(name); if (existing != null) { - throw new IllegalArgumentException("Event source " + existing - + " is already registered with name: " + name); + throw new IllegalArgumentException( + "Event source " + existing + " is already registered with name: " + name); } sourceByName.put(name, eventSource); - sources.computeIfAbsent(keyFor(eventSource), k -> new ConcurrentHashMap<>()).put(name, - eventSource); + sources + .computeIfAbsent(keyFor(eventSource), k -> new ConcurrentHashMap<>()) + .put(name, eventSource); } public EventSource remove(String name) { @@ -76,16 +76,13 @@ public Stream allEventSources() { @SuppressWarnings("rawtypes") Stream additionalEventSources() { return Stream.concat( - Stream.of(retryEventSource()).filter(Objects::nonNull), - flatMappedSources()); + Stream.of(retryEventSource()).filter(Objects::nonNull), flatMappedSources()); } Stream> flatMappedSources() { return sources.values().stream().flatMap(c -> c.values().stream()); } - - private String keyFor(EventSource source) { return keyFor(source.resourceType()); } @@ -119,8 +116,8 @@ public EventSource get(Class dependentType, String name) { source = (EventSource) sourcesForType.get(name); if (source == null) { - throw new IllegalArgumentException("There is no event source found for class:" + - " " + dependentType.getName() + ", name:" + name); + throw new IllegalArgumentException("There is no event source found for class:" + " " + + dependentType.getName() + ", name:" + name); } } @@ -147,7 +144,6 @@ public List> getEventSources(Class dependentType) { if (sourcesForType == null) { return Collections.emptyList(); } - return sourcesForType.values().stream() - .map(es -> (EventSource) es).toList(); + return sourcesForType.values().stream().map(es -> (EventSource) es).toList(); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/PostExecutionControl.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/PostExecutionControl.java index 3343cff80a..42311c1cb5 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/PostExecutionControl.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/PostExecutionControl.java @@ -16,7 +16,8 @@ final class PostExecutionControl { private PostExecutionControl( boolean finalizerRemoved, R updatedCustomResource, - boolean updateIsStatusPatch, Exception runtimeException) { + boolean updateIsStatusPatch, + Exception runtimeException) { this.finalizerRemoved = finalizerRemoved; this.updatedCustomResource = updatedCustomResource; this.updateIsStatusPatch = updateIsStatusPatch; 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 baa7c36121..dd9fe3877f 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 @@ -57,9 +57,12 @@ class ReconciliationDispatcher

    { } public ReconciliationDispatcher(Controller

    controller) { - this(controller, - new CustomResourceFacade<>(controller.getCRClient(), controller.getConfiguration(), - controller.getConfiguration().getConfigurationService().getResourceCloner())); + this( + controller, + new CustomResourceFacade<>( + controller.getCRClient(), + controller.getConfiguration(), + controller.getConfiguration().getConfigurationService().getResourceCloner())); } public PostExecutionControl

    handleExecution(ExecutionScope

    executionScope) { @@ -74,7 +77,9 @@ private PostExecutionControl

    handleDispatch(ExecutionScope

    executionScope) throws Exception { P originalResource = executionScope.getResource(); var resourceForExecution = cloneResource(originalResource); - log.debug("Handling dispatch for resource name: {} namespace: {}", getName(originalResource), + log.debug( + "Handling dispatch for resource name: {} namespace: {}", + getName(originalResource), originalResource.getMetadata().getNamespace()); final var markedForDeletion = originalResource.isMarkedForDeletion(); @@ -96,14 +101,17 @@ private PostExecutionControl

    handleDispatch(ExecutionScope

    executionScope) } private boolean shouldNotDispatchToCleanupWhenMarkedForDeletion(P resource) { - var alreadyRemovedFinalizer = controller.useFinalizer() - && !resource.hasFinalizer(configuration().getFinalizerName()); + var alreadyRemovedFinalizer = + controller.useFinalizer() && !resource.hasFinalizer(configuration().getFinalizerName()); return !controller.useFinalizer() || alreadyRemovedFinalizer; } private PostExecutionControl

    handleReconcile( - ExecutionScope

    executionScope, P resourceForExecution, P originalResource, - Context

    context) throws Exception { + ExecutionScope

    executionScope, + P resourceForExecution, + P originalResource, + Context

    context) + throws Exception { if (controller.useFinalizer() && !originalResource.hasFinalizer(configuration().getFinalizerName())) { /* @@ -116,8 +124,7 @@ private PostExecutionControl

    handleReconcile( if (useSSA) { updatedResource = addFinalizerWithSSA(originalResource); } else { - updatedResource = - updateCustomResourceWithFinalizer(resourceForExecution, originalResource); + updatedResource = updateCustomResourceWithFinalizer(resourceForExecution, originalResource); } return PostExecutionControl.onlyFinalizerAdded(updatedResource); } else { @@ -133,8 +140,12 @@ private P cloneResource(P resource) { return cloner.clone(resource); } - private PostExecutionControl

    reconcileExecution(ExecutionScope

    executionScope, - P resourceForExecution, P originalResource, Context

    context) throws Exception { + private PostExecutionControl

    reconcileExecution( + ExecutionScope

    executionScope, + P resourceForExecution, + P originalResource, + Context

    context) + throws Exception { log.debug( "Reconciling resource {} with version: {} with execution scope: {}", getName(resourceForExecution), @@ -152,14 +163,16 @@ private PostExecutionControl

    reconcileExecution(ExecutionScope

    executionSc toUpdate = updateControl.getResource().orElseThrow(); } } else { - toUpdate = - updateControl.isNoUpdate() ? originalResource : updateControl.getResource().orElseThrow(); + toUpdate = updateControl.isNoUpdate() + ? originalResource + : updateControl.getResource().orElseThrow(); } if (updateControl.isPatchResource()) { updatedCustomResource = patchResource(toUpdate, originalResource); if (!useSSA) { - toUpdate.getMetadata() + toUpdate + .getMetadata() .setResourceVersion(updatedCustomResource.getMetadata().getResourceVersion()); } } @@ -171,9 +184,8 @@ private PostExecutionControl

    reconcileExecution(ExecutionScope

    executionSc } @SuppressWarnings("unchecked") - private PostExecutionControl

    handleErrorStatusHandler(P resource, P originalResource, - Context

    context, - Exception e) throws Exception { + private PostExecutionControl

    handleErrorStatusHandler( + P resource, P originalResource, Context

    context, Exception e) throws Exception { RetryInfo retryInfo = context.getRetryInfo().orElseGet(() -> new RetryInfo() { @Override @@ -184,13 +196,13 @@ public int getAttemptCount() { @Override public boolean isLastAttempt() { // check also if the retry is limited to 0 - return retryConfigurationHasZeroAttempts || - controller.getConfiguration().getRetry() == null; + return retryConfigurationHasZeroAttempts + || controller.getConfiguration().getRetry() == null; } }); ((DefaultContext

    ) context).setRetryInfo(retryInfo); - var errorStatusUpdateControl = controller.getReconciler() - .updateErrorStatus(resource, context, e); + var errorStatusUpdateControl = + controller.getReconciler().updateErrorStatus(resource, context, e); if (errorStatusUpdateControl.isDefaultErrorProcessing()) { throw e; @@ -198,26 +210,24 @@ public boolean isLastAttempt() { P updatedResource = null; if (errorStatusUpdateControl.getResource().isPresent()) { - updatedResource = customResourceFacade - .patchStatus(errorStatusUpdateControl.getResource().orElseThrow(), originalResource); + updatedResource = customResourceFacade.patchStatus( + errorStatusUpdateControl.getResource().orElseThrow(), originalResource); } if (errorStatusUpdateControl.isNoRetry()) { PostExecutionControl

    postExecutionControl; if (updatedResource != null) { - postExecutionControl = - PostExecutionControl.customResourceStatusPatched(updatedResource); + postExecutionControl = PostExecutionControl.customResourceStatusPatched(updatedResource); } else { postExecutionControl = PostExecutionControl.defaultDispatch(); } - errorStatusUpdateControl.getScheduleDelay() - .ifPresent(postExecutionControl::withReSchedule); + errorStatusUpdateControl.getScheduleDelay().ifPresent(postExecutionControl::withReSchedule); return postExecutionControl; } throw e; } - private PostExecutionControl

    createPostExecutionControl(P updatedCustomResource, - UpdateControl

    updateControl) { + private PostExecutionControl

    createPostExecutionControl( + P updatedCustomResource, UpdateControl

    updateControl) { PostExecutionControl

    postExecutionControl; if (updatedCustomResource != null) { postExecutionControl = @@ -230,13 +240,12 @@ private PostExecutionControl

    createPostExecutionControl(P updatedCustomResour } private void updatePostExecutionControlWithReschedule( - PostExecutionControl

    postExecutionControl, - BaseControl baseControl) { + PostExecutionControl

    postExecutionControl, BaseControl baseControl) { baseControl.getScheduleDelay().ifPresent(postExecutionControl::withReSchedule); } - private PostExecutionControl

    handleCleanup(P resourceForExecution, - P originalResource, Context

    context) { + private PostExecutionControl

    handleCleanup( + P resourceForExecution, P originalResource, Context

    context) { if (log.isDebugEnabled()) { log.debug( "Executing delete for resource: {} with version: {}", @@ -250,18 +259,23 @@ private PostExecutionControl

    handleCleanup(P resourceForExecution, // cleanup is finished, nothing left to be done final var finalizerName = configuration().getFinalizerName(); if (deleteControl.isRemoveFinalizer() && resourceForExecution.hasFinalizer(finalizerName)) { - P customResource = conflictRetryingPatch(resourceForExecution, originalResource, r -> { - // the operator might not be allowed to retrieve the resource on a retry, e.g. when its - // permissions are removed by deleting the namespace concurrently - if (r == null) { - log.warn( - "Could not remove finalizer on null resource: {} with version: {}", - getUID(resourceForExecution), - getVersion(resourceForExecution)); - return false; - } - return r.removeFinalizer(finalizerName); - }, true); + P customResource = conflictRetryingPatch( + resourceForExecution, + originalResource, + r -> { + // the operator might not be allowed to retrieve the resource on a retry, e.g. when + // its + // permissions are removed by deleting the namespace concurrently + if (r == null) { + log.warn( + "Could not remove finalizer on null resource: {} with version: {}", + getUID(resourceForExecution), + getVersion(resourceForExecution)); + return false; + } + return r.removeFinalizer(finalizerName); + }, + true); return PostExecutionControl.customResourceFinalizerRemoved(customResource); } } @@ -280,7 +294,8 @@ private PostExecutionControl

    handleCleanup(P resourceForExecution, private P addFinalizerWithSSA(P originalResource) { log.debug( "Adding finalizer (using SSA) for resource: {} version: {}", - getUID(originalResource), getVersion(originalResource)); + getUID(originalResource), + getVersion(originalResource)); try { P resource = (P) originalResource.getClass().getConstructor().newInstance(); ObjectMeta objectMeta = new ObjectMeta(); @@ -289,26 +304,32 @@ private P addFinalizerWithSSA(P originalResource) { resource.setMetadata(objectMeta); resource.addFinalizer(configuration().getFinalizerName()); return customResourceFacade.patchResourceWithSSA(resource); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException + } catch (InstantiationException + | IllegalAccessException + | InvocationTargetException | NoSuchMethodException e) { - throw new RuntimeException("Issue with creating custom resource instance with reflection." + - " Custom Resources must provide a no-arg constructor. Class: " - + originalResource.getClass().getName(), + throw new RuntimeException( + "Issue with creating custom resource instance with reflection." + + " Custom Resources must provide a no-arg constructor. Class: " + + originalResource.getClass().getName(), e); } } private P updateCustomResourceWithFinalizer(P resourceForExecution, P originalResource) { log.debug( - "Adding finalizer for resource: {} version: {}", getUID(originalResource), + "Adding finalizer for resource: {} version: {}", + getUID(originalResource), getVersion(originalResource)); - return conflictRetryingPatch(resourceForExecution, originalResource, - r -> r.addFinalizer(configuration().getFinalizerName()), false); + return conflictRetryingPatch( + resourceForExecution, + originalResource, + r -> r.addFinalizer(configuration().getFinalizerName()), + false); } private P patchResource(P resource, P originalResource) { - log.debug("Updating resource: {} with version: {}", getUID(resource), - getVersion(resource)); + log.debug("Updating resource: {} with version: {}", getUID(resource), getVersion(resource)); log.trace("Resource before update: {}", resource); final var finalizerName = configuration().getFinalizerName(); @@ -323,8 +344,11 @@ ControllerConfiguration

    configuration() { return controller.getConfiguration(); } - public P conflictRetryingPatch(P resource, P originalResource, - Function modificationFunction, boolean forceNotUseSSA) { + public P conflictRetryingPatch( + P resource, + P originalResource, + Function modificationFunction, + boolean forceNotUseSSA) { if (log.isDebugEnabled()) { log.debug("Conflict retrying update for: {}", ResourceID.fromResource(resource)); } @@ -348,13 +372,12 @@ public P conflictRetryingPatch(P resource, P originalResource, throw e; } if (retryIndex >= MAX_UPDATE_RETRY) { - throw new OperatorException( - "Exceeded maximum (" + MAX_UPDATE_RETRY - + ") retry attempts to patch resource: " - + ResourceID.fromResource(resource)); + throw new OperatorException("Exceeded maximum (" + MAX_UPDATE_RETRY + + ") retry attempts to patch resource: " + + ResourceID.fromResource(resource)); } - resource = customResourceFacade.getResource(resource.getMetadata().getNamespace(), - resource.getMetadata().getName()); + resource = customResourceFacade.getResource( + resource.getMetadata().getNamespace(), resource.getMetadata().getName()); } } } @@ -368,11 +391,11 @@ static class CustomResourceFacade { private final Cloner cloner; public CustomResourceFacade( - MixedOperation, Resource> resourceOperation, - ControllerConfiguration configuration, Cloner cloner) { + MixedOperation, Resource> resourceOperation, + ControllerConfiguration configuration, + Cloner cloner) { this.resourceOperation = resourceOperation; - this.useSSA = - configuration.getConfigurationService().useSSAToPatchPrimaryResource(); + this.useSSA = configuration.getConfigurationService().useSSAToPatchPrimaryResource(); this.fieldManager = configuration.fieldManager(); this.cloner = cloner; } @@ -410,11 +433,12 @@ public R patchStatus(R resource, R originalResource) { try { resource.getMetadata().setManagedFields(null); var res = resource(resource); - return res.subresource("status").patch(new PatchContext.Builder() - .withFieldManager(fieldManager) - .withForce(true) - .withPatchType(PatchType.SERVER_SIDE_APPLY) - .build()); + return res.subresource("status") + .patch(new PatchContext.Builder() + .withFieldManager(fieldManager) + .withForce(true) + .withPatchType(PatchType.SERVER_SIDE_APPLY) + .build()); } finally { resource.getMetadata().setManagedFields(managedFields); } @@ -441,17 +465,18 @@ private R editStatus(R resource, R originalResource) { } public R patchResourceWithSSA(R resource) { - return resource(resource).patch(new PatchContext.Builder() - .withFieldManager(fieldManager) - .withForce(true) - .withPatchType(PatchType.SERVER_SIDE_APPLY) - .build()); + return resource(resource) + .patch(new PatchContext.Builder() + .withFieldManager(fieldManager) + .withForce(true) + .withPatchType(PatchType.SERVER_SIDE_APPLY) + .build()); } private Resource resource(R resource) { - return resource instanceof Namespaced ? resourceOperation - .inNamespace(resource.getMetadata().getNamespace()) - .resource(resource) : resourceOperation.resource(resource); + return resource instanceof Namespaced + ? resourceOperation.inNamespace(resource.getMetadata().getNamespace()).resource(resource) + : resourceOperation.resource(resource); } } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceID.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceID.java index 071dd49f29..7ae85485b2 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceID.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceID.java @@ -10,14 +10,14 @@ public class ResourceID implements Serializable { public static ResourceID fromResource(HasMetadata resource) { - return new ResourceID(resource.getMetadata().getName(), - resource.getMetadata().getNamespace()); + return new ResourceID( + resource.getMetadata().getName(), resource.getMetadata().getNamespace()); } - public static ResourceID fromOwnerReference(HasMetadata resource, OwnerReference ownerReference, - boolean clusterScoped) { - return new ResourceID(ownerReference.getName(), - clusterScoped ? null : resource.getMetadata().getNamespace()); + public static ResourceID fromOwnerReference( + HasMetadata resource, OwnerReference ownerReference, boolean clusterScoped) { + return new ResourceID( + ownerReference.getName(), clusterScoped ? null : resource.getMetadata().getNamespace()); } private final String name; @@ -42,19 +42,16 @@ public Optional getNamespace() { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; ResourceID that = (ResourceID) o; - return Objects.equals(name, that.name) && Objects.equals(namespace, - that.namespace); + return Objects.equals(name, that.name) && Objects.equals(namespace, that.namespace); } public boolean isSameResource(HasMetadata hasMetadata) { final var metadata = hasMetadata.getMetadata(); - return getName().equals(metadata.getName()) && - getNamespace().map(ns -> ns.equals(metadata.getNamespace())).orElse(true); + return getName().equals(metadata.getName()) + && getNamespace().map(ns -> ns.equals(metadata.getNamespace())).orElse(true); } @Override @@ -72,10 +69,6 @@ public static String toString(HasMetadata resource) { } private static String toString(String name, String namespace) { - return "ResourceID{" + - "name='" + name + '\'' + - ", namespace='" + namespace + '\'' + - '}'; + return "ResourceID{" + "name='" + name + '\'' + ", namespace='" + namespace + '\'' + '}'; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceState.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceState.java index d52c1b19ec..fa6b8d22a4 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceState.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceState.java @@ -15,7 +15,8 @@ class ResourceState { * for cleanup. */ private enum EventingState { - EVENT_PRESENT, NO_EVENT_PRESENT, + EVENT_PRESENT, + NO_EVENT_PRESENT, /** * Resource has been marked for deletion, and cleanup already executed successfully */ @@ -114,12 +115,11 @@ public void unMarkEventReceived() { @Override public String toString() { - return "ResourceState{" + - "id=" + id + - ", underProcessing=" + underProcessing + - ", retry=" + retry + - ", eventing=" + eventing + - ", rateLimit=" + rateLimit + - '}'; + return "ResourceState{" + "id=" + + id + ", underProcessing=" + + underProcessing + ", retry=" + + retry + ", eventing=" + + eventing + ", rateLimit=" + + rateLimit + '}'; } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManager.java index 4e03d1a34e..6932e1ca5e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManager.java @@ -11,7 +11,6 @@ class ResourceStateManager { // take time and memory? private final Map states = new ConcurrentHashMap<>(100); - public ResourceState getOrCreate(ResourceID resourceID) { return states.computeIfAbsent(resourceID, ResourceState::new); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiter.java index 2692b60bd0..42b8ba522b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiter.java @@ -14,6 +14,7 @@ public class LinearRateLimiter /** To turn off rate limiting set limit for period to a non-positive number */ public static final int NO_LIMIT_PERIOD = -1; + public static final int DEFAULT_REFRESH_PERIOD_SECONDS = 10; public static final Duration DEFAULT_REFRESH_PERIOD = Duration.ofSeconds(DEFAULT_REFRESH_PERIOD_SECONDS); @@ -43,7 +44,8 @@ public Optional isLimited(RateLimitState rateLimitState) { if (actualState.getCount() < limitForPeriod) { actualState.increaseCount(); return Optional.empty(); - } else if (actualState.getLastRefreshTime() + } else if (actualState + .getLastRefreshTime() .isBefore(LocalDateTime.now().minus(refreshPeriod))) { actualState.reset(); actualState.increaseCount(); @@ -60,8 +62,8 @@ public RateState initState() { @Override public void initFrom(RateLimited configuration) { - this.refreshPeriod = Duration.of(configuration.within(), - configuration.unit().toChronoUnit()); + this.refreshPeriod = + Duration.of(configuration.within(), configuration.unit().toChronoUnit()); this.limitForPeriod = configuration.maxReconciliations(); } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/RateLimiter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/RateLimiter.java index 7708e6dfe3..4878e6eccc 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/RateLimiter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/rate/RateLimiter.java @@ -6,8 +6,7 @@ import io.javaoperatorsdk.operator.processing.event.rate.RateLimiter.RateLimitState; public interface RateLimiter { - interface RateLimitState { - } + interface RateLimitState {} /** * @param rateLimitState state implementation diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSource.java index a2306378d4..fc27e79124 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSource.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.processing.event.source; - import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.OperatorException; import io.javaoperatorsdk.operator.processing.event.EventHandler; @@ -80,18 +79,15 @@ public void setOnAddFilter(OnAddFilter onAddFilter) { this.onAddFilter = onAddFilter; } - public void setOnUpdateFilter( - OnUpdateFilter onUpdateFilter) { + public void setOnUpdateFilter(OnUpdateFilter onUpdateFilter) { this.onUpdateFilter = onUpdateFilter; } - public void setOnDeleteFilter( - OnDeleteFilter onDeleteFilter) { + public void setOnDeleteFilter(OnDeleteFilter onDeleteFilter) { this.onDeleteFilter = onDeleteFilter; } public void setGenericFilter(GenericFilter genericFilter) { this.genericFilter = genericFilter; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/CacheKeyMapper.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/CacheKeyMapper.java index d290e15496..a77e6448cb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/CacheKeyMapper.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/CacheKeyMapper.java @@ -14,5 +14,4 @@ public interface CacheKeyMapper { static CacheKeyMapper singleResourceCacheKeyMapper() { return r -> "id"; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java index 850a9deb35..5a78454673 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSource.java @@ -67,7 +67,7 @@ default EventSourceStartPriority priority() { * Retrieves the optional unique secondary resource associated with the specified primary * resource. Note that this operation will fail if multiple resources are associated with the * specified primary resource. - * + * * @param primary the primary resource for which the secondary resource is requested * @return the secondary resource associated with the specified primary resource * @throws IllegalStateException if multiple resources are associated with the primary one @@ -86,7 +86,7 @@ default Optional getSecondaryResource(P primary) { /** * Retrieves a potential empty set of resources tracked by this EventSource associated with the * specified primary resource - * + * * @param primary the primary resource for which the secondary resource is requested * @return the set of secondary resources associated with the specified primary */ diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSourceStartPriority.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSourceStartPriority.java index 8284d611f2..3bc08516da 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSourceStartPriority.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/EventSourceStartPriority.java @@ -12,7 +12,7 @@ public enum EventSourceStartPriority { * In this situation, it is needed to initialize this event source before the one associated with * resources which state is being tracked since that state information might be required to * properly retrieve the other resources. - * + * *

    * For example a {@code ConfigMap} could store the identifier of a fictional external resource * {@code A}. In this case, the event source tracking {@code A} resources might need the @@ -23,5 +23,6 @@ public enum EventSourceStartPriority { * started. *

    */ - RESOURCE_STATE_LOADER, DEFAULT + RESOURCE_STATE_LOADER, + DEFAULT } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java index 130e3db179..7df7cb3f59 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSource.java @@ -49,13 +49,13 @@ public abstract class ExternalResourceCachingEventSource> cache = new ConcurrentHashMap<>(); - protected ExternalResourceCachingEventSource(Class resourceClass, - CacheKeyMapper cacheKeyMapper) { + protected ExternalResourceCachingEventSource( + Class resourceClass, CacheKeyMapper cacheKeyMapper) { this(null, resourceClass, cacheKeyMapper); } - protected ExternalResourceCachingEventSource(String name, Class resourceClass, - CacheKeyMapper cacheKeyMapper) { + protected ExternalResourceCachingEventSource( + String name, Class resourceClass, CacheKeyMapper cacheKeyMapper) { super(resourceClass, name); this.cacheKeyMapper = cacheKeyMapper; } @@ -68,8 +68,8 @@ protected synchronized void handleDelete(ResourceID primaryID) { } protected synchronized void handleDeletes(ResourceID primaryID, Set resource) { - handleDelete(primaryID, - resource.stream().map(cacheKeyMapper::keyFor).collect(Collectors.toSet())); + handleDelete( + primaryID, resource.stream().map(cacheKeyMapper::keyFor).collect(Collectors.toSet())); } protected synchronized void handleDelete(ResourceID primaryID, R resource) { @@ -81,9 +81,11 @@ protected synchronized void handleDelete(ResourceID primaryID, Set resou return; } var cachedValues = cache.get(primaryID); - List removedResources = cachedValues == null ? Collections.emptyList() + List removedResources = cachedValues == null + ? Collections.emptyList() : resourceIDs.stream() - .flatMap(id -> Stream.ofNullable(cachedValues.remove(id))).collect(Collectors.toList()); + .flatMap(id -> Stream.ofNullable(cachedValues.remove(id))) + .collect(Collectors.toList()); if (cachedValues != null && cachedValues.isEmpty()) { cache.remove(primaryID); @@ -102,15 +104,16 @@ protected synchronized void handleResources(ResourceID primaryID, Set newReso } protected synchronized void handleResources(Map> allNewResources) { - var toDelete = cache.keySet().stream().filter(k -> !allNewResources.containsKey(k)).toList(); + var toDelete = + cache.keySet().stream().filter(k -> !allNewResources.containsKey(k)).toList(); toDelete.forEach(this::handleDelete); allNewResources.forEach(this::handleResources); } - protected synchronized void handleResources(ResourceID primaryID, Set newResources, - boolean propagateEvent) { - log.debug("Handling resources update for: {} numberOfResources: {} ", primaryID, - newResources.size()); + protected synchronized void handleResources( + ResourceID primaryID, Set newResources, boolean propagateEvent) { + log.debug( + "Handling resources update for: {} numberOfResources: {} ", primaryID, newResources.size()); if (!isRunning()) { return; } @@ -121,21 +124,21 @@ protected synchronized void handleResources(ResourceID primaryID, Set newReso var newResourcesMap = newResources.stream().collect(Collectors.toMap(cacheKeyMapper::keyFor, r -> r)); cache.put(primaryID, newResourcesMap); - if (propagateEvent && !newResourcesMap.equals(cachedResources) + if (propagateEvent + && !newResourcesMap.equals(cachedResources) && acceptedByFiler(cachedResources, newResourcesMap)) { getEventHandler().handleEvent(new Event(primaryID)); } } - private boolean acceptedByFiler(Map cachedResourceMap, - Map newResourcesMap) { + private boolean acceptedByFiler( + Map cachedResourceMap, Map newResourcesMap) { var addedResources = new HashMap<>(newResourcesMap); addedResources.keySet().removeAll(cachedResourceMap.keySet()); if (onAddFilter != null || genericFilter != null) { - var anyAddAccepted = - addedResources.values().stream().anyMatch(r -> acceptedByGenericFiler(r) && - onAddFilter.accept(r)); + var anyAddAccepted = addedResources.values().stream() + .anyMatch(r -> acceptedByGenericFiler(r) && onAddFilter.accept(r)); if (anyAddAccepted) { return true; } @@ -146,9 +149,8 @@ private boolean acceptedByFiler(Map cachedResourceMap, var deletedResource = new HashMap<>(cachedResourceMap); deletedResource.keySet().removeAll(newResourcesMap.keySet()); if (onDeleteFilter != null || genericFilter != null) { - var anyDeleteAccepted = - deletedResource.values().stream() - .anyMatch(r -> acceptedByGenericFiler(r) && onDeleteFilter.accept(r, false)); + var anyDeleteAccepted = deletedResource.values().stream() + .anyMatch(r -> acceptedByGenericFiler(r) && onDeleteFilter.accept(r, false)); if (anyDeleteAccepted) { return true; } @@ -159,20 +161,16 @@ private boolean acceptedByFiler(Map cachedResourceMap, Map possibleUpdatedResources = new HashMap<>(cachedResourceMap); possibleUpdatedResources.keySet().retainAll(newResourcesMap.keySet()); possibleUpdatedResources = possibleUpdatedResources.entrySet().stream() - .filter(entry -> !newResourcesMap - .get(entry.getKey()).equals(entry.getValue())) + .filter(entry -> !newResourcesMap.get(entry.getKey()).equals(entry.getValue())) .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue)); if (onUpdateFilter != null || genericFilter != null) { - return possibleUpdatedResources.entrySet().stream() - .anyMatch( - entry -> { - var newResource = newResourcesMap.get(entry.getKey()); - return acceptedByGenericFiler(newResource) && - onUpdateFilter.accept(newResource, entry.getValue()); - }); - } else - return !possibleUpdatedResources.isEmpty(); + return possibleUpdatedResources.entrySet().stream().anyMatch(entry -> { + var newResource = newResourcesMap.get(entry.getKey()); + return acceptedByGenericFiler(newResource) + && onUpdateFilter.accept(newResource, entry.getValue()); + }); + } else return !possibleUpdatedResources.isEmpty(); } private boolean acceptedByGenericFiler(R resource) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventAware.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventAware.java index dcb15a4229..9ff14d83e0 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventAware.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/ResourceEventAware.java @@ -9,5 +9,4 @@ default void onResourceCreated(T resource) {} default void onResourceUpdated(T newResource, T oldResource) {} default void onResourceDeleted(T resource) {} - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCache.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCache.java index 1651d44dc7..4c6deb82b1 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCache.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedCache.java @@ -7,5 +7,4 @@ public interface BoundedCache { R remove(K key); void put(K key, R object); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStore.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStore.java index 4f0fcad280..f24153a3fc 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStore.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStore.java @@ -17,8 +17,7 @@ import io.fabric8.kubernetes.client.informers.cache.ItemStore; import io.javaoperatorsdk.operator.api.config.Utils; -public class BoundedItemStore - implements ItemStore { +public class BoundedItemStore implements ItemStore { private static final Logger log = LoggerFactory.getLogger(BoundedItemStore.class); @@ -28,13 +27,17 @@ public class BoundedItemStore private final Map existingMinimalResources = new ConcurrentHashMap<>(); private final Constructor resourceConstructor; - public BoundedItemStore(BoundedCache cache, Class resourceClass, - KubernetesClient client) { - this(cache, resourceClass, namespaceKeyFunc(), + public BoundedItemStore( + BoundedCache cache, Class resourceClass, KubernetesClient client) { + this( + cache, + resourceClass, + namespaceKeyFunc(), new KubernetesResourceFetcher<>(resourceClass, client)); } - public BoundedItemStore(BoundedCache cache, + public BoundedItemStore( + BoundedCache cache, Class resourceClass, Function keyFunction, ResourceFetcher resourceFetcher) { @@ -113,7 +116,8 @@ public boolean isFullState() { } public static Function namespaceKeyFunc() { - return r -> Cache.namespaceKeyFunc(r.getMetadata().getNamespace(), r.getMetadata().getName()); + return r -> + Cache.namespaceKeyFunc(r.getMetadata().getNamespace(), r.getMetadata().getName()); } protected R refreshMissingStateFromServer(String key) { diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java index ad996afc36..5c9740eb39 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcher.java @@ -17,9 +17,8 @@ public KubernetesResourceFetcher(Class rClass, KubernetesClient client) { this(rClass, client, inverseNamespaceKeyFunction()); } - public KubernetesResourceFetcher(Class rClass, - KubernetesClient client, - Function resourceIDFunction) { + public KubernetesResourceFetcher( + Class rClass, KubernetesClient client, Function resourceIDFunction) { this.rClass = rClass; this.client = client; this.resourceIDFunction = resourceIDFunction; @@ -28,8 +27,13 @@ public KubernetesResourceFetcher(Class rClass, @Override public R fetchResource(String key) { var resourceId = resourceIDFunction.apply(key); - return resourceId.getNamespace().map(ns -> client.resources(rClass).inNamespace(ns) - .withName(resourceId.getName()).get()) + return resourceId + .getNamespace() + .map(ns -> client + .resources(rClass) + .inNamespace(ns) + .withName(resourceId.getName()) + .get()) .orElse(client.resources(rClass).withName(resourceId.getName()).get()); } @@ -43,5 +47,4 @@ public static Function inverseNamespaceKeyFunction() { } }; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/ResourceFetcher.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/ResourceFetcher.java index 9cc4fe7a35..702b9efdb9 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/ResourceFetcher.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/cache/ResourceFetcher.java @@ -3,5 +3,4 @@ public interface ResourceFetcher { R fetchResource(K key); - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSource.java index 07e5bd3fa2..87e5da8a07 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSource.java @@ -36,17 +36,17 @@ public ControllerEventSource(Controller controller) { this.controller = controller; final var config = controller.getConfiguration(); - OnUpdateFilter internalOnUpdateFilter = - onUpdateFinalizerNeededAndApplied(controller.useFinalizer(), - config.getFinalizerName()) - .or(onUpdateGenerationAware(config.isGenerationAware())) - .or(onUpdateMarkedForDeletion()); + OnUpdateFilter internalOnUpdateFilter = onUpdateFinalizerNeededAndApplied( + controller.useFinalizer(), config.getFinalizerName()) + .or(onUpdateGenerationAware(config.isGenerationAware())) + .or(onUpdateMarkedForDeletion()); // by default the on add should be processed in all cases regarding internal filters final var informerConfig = config.getInformerConfig(); Optional.ofNullable(informerConfig.getOnAddFilter()).ifPresent(this::setOnAddFilter); Optional.ofNullable(informerConfig.getOnUpdateFilter()) - .ifPresentOrElse(filter -> setOnUpdateFilter(filter.and(internalOnUpdateFilter)), + .ifPresentOrElse( + filter -> setOnUpdateFilter(filter.and(internalOnUpdateFilter)), () -> setOnUpdateFilter(internalOnUpdateFilter)); Optional.ofNullable(informerConfig.getGenericFilter()).ifPresent(this::setGenericFilter); setControllerConfiguration(config); @@ -65,19 +65,21 @@ public synchronized void start() { public void eventReceived(ResourceAction action, T resource, T oldResource) { try { if (log.isDebugEnabled()) { - log.debug("Event received for resource: {} version: {} uuid: {} action: {}", + log.debug( + "Event received for resource: {} version: {} uuid: {} action: {}", ResourceID.fromResource(resource), - getVersion(resource), resource.getMetadata().getUid(), action); + getVersion(resource), + resource.getMetadata().getUid(), + action); log.trace("Event Old resource: {},\n new resource: {}", oldResource, resource); } MDCUtils.addResourceInfo(resource); controller.getEventSourceManager().broadcastOnResourceEvent(action, resource, oldResource); if (isAcceptedByFilters(action, resource, oldResource)) { - getEventHandler().handleEvent( - new ResourceEvent(action, ResourceID.fromResource(resource), resource)); + getEventHandler() + .handleEvent(new ResourceEvent(action, ResourceID.fromResource(resource), resource)); } else { - log.debug("Skipping event handling resource {}", - ResourceID.fromResource(resource)); + log.debug("Skipping event handling resource {}", ResourceID.fromResource(resource)); } } finally { MDCUtils.removeResourceInfo(); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java index b7c4249411..c7055df85f 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/InternalEventFilters.java @@ -11,8 +11,8 @@ static OnUpdateFilter onUpdateMarkedForDeletion() { // the old resource is checked since in corner cases users might still want to update the status // for a resource that is marked for deletion - return (newResource, oldResource) -> !oldResource.isMarkedForDeletion() - && newResource.isMarkedForDeletion(); + return (newResource, oldResource) -> + !oldResource.isMarkedForDeletion() && newResource.isMarkedForDeletion(); } static OnUpdateFilter onUpdateGenerationAware( @@ -27,14 +27,13 @@ static OnUpdateFilter onUpdateGenerationAware( return true; } - return oldResource.getMetadata().getGeneration() < newResource - .getMetadata().getGeneration(); + return oldResource.getMetadata().getGeneration() + < newResource.getMetadata().getGeneration(); }; } static OnUpdateFilter onUpdateFinalizerNeededAndApplied( - boolean useFinalizer, - String finalizerName) { + boolean useFinalizer, String finalizerName) { return (newResource, oldResource) -> { if (useFinalizer) { boolean oldFinalizer = oldResource.hasFinalizer(finalizerName); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceAction.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceAction.java index 7a04dc9164..d1dbcb9e1b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceAction.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceAction.java @@ -1,5 +1,7 @@ package io.javaoperatorsdk.operator.processing.event.source.controller; public enum ResourceAction { - ADDED, UPDATED, DELETED + ADDED, + UPDATED, + DELETED } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceEvent.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceEvent.java index ba9ea72cd9..c952777048 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceEvent.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/controller/ResourceEvent.java @@ -12,8 +12,7 @@ public class ResourceEvent extends Event { private final ResourceAction action; private final HasMetadata resource; - public ResourceEvent(ResourceAction action, - ResourceID resourceID, HasMetadata resource) { + public ResourceEvent(ResourceAction action, ResourceID resourceID, HasMetadata resource) { super(resourceID); this.action = action; this.resource = resource; @@ -21,10 +20,9 @@ public ResourceEvent(ResourceAction action, @Override public String toString() { - return "ResourceEvent{" + - "action=" + action + - ", associated resource id=" + getRelatedCustomResourceID() + - '}'; + return "ResourceEvent{" + "action=" + + action + ", associated resource id=" + + getRelatedCustomResourceID() + '}'; } public ResourceAction getAction() { @@ -37,12 +35,9 @@ public Optional getResource() { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; - if (!super.equals(o)) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + if (!super.equals(o)) return false; ResourceEvent that = (ResourceEvent) o; return action == that.action; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnDeleteFilter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnDeleteFilter.java index 0a0f5955a7..06fbdc17c4 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnDeleteFilter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnDeleteFilter.java @@ -18,5 +18,4 @@ default OnDeleteFilter or(OnDeleteFilter OnDeleteFilter) { default OnDeleteFilter not() { return (resource, deletedFinalStateUnknown) -> !this.accept(resource, deletedFinalStateUnknown); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnUpdateFilter.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnUpdateFilter.java index 0e7fdab276..dec1d9be6e 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnUpdateFilter.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/filter/OnUpdateFilter.java @@ -6,17 +6,16 @@ public interface OnUpdateFilter { boolean accept(R newResource, R oldResource); default OnUpdateFilter and(OnUpdateFilter onUpdateFilter) { - return (newResource, oldResource) -> this.accept(newResource, oldResource) - && onUpdateFilter.accept(newResource, oldResource); + return (newResource, oldResource) -> + this.accept(newResource, oldResource) && onUpdateFilter.accept(newResource, oldResource); } default OnUpdateFilter or(OnUpdateFilter onUpdateFilter) { - return (newResource, oldResource) -> this.accept(newResource, oldResource) - || onUpdateFilter.accept(newResource, oldResource); + return (newResource, oldResource) -> + this.accept(newResource, oldResource) || onUpdateFilter.accept(newResource, oldResource); } default OnUpdateFilter not() { return (newResource, oldResource) -> !this.accept(newResource, oldResource); } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/CachingInboundEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/CachingInboundEventSource.java index 450e308904..6c3ebf6916 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/CachingInboundEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/inbound/CachingInboundEventSource.java @@ -12,14 +12,14 @@ import io.javaoperatorsdk.operator.processing.event.source.ResourceEventAware; public class CachingInboundEventSource - extends ExternalResourceCachingEventSource - implements ResourceEventAware

    { + extends ExternalResourceCachingEventSource implements ResourceEventAware

    { private final ResourceFetcher resourceFetcher; private final Set fetchedForPrimaries = ConcurrentHashMap.newKeySet(); public CachingInboundEventSource( - ResourceFetcher resourceFetcher, Class resourceClass, + ResourceFetcher resourceFetcher, + Class resourceClass, CacheKeyMapper cacheKeyMapper) { super(resourceClass, cacheKeyMapper); this.resourceFetcher = resourceFetcher; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/DefaultPrimaryToSecondaryIndex.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/DefaultPrimaryToSecondaryIndex.java index a1a5a96d36..894596154b 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/DefaultPrimaryToSecondaryIndex.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/DefaultPrimaryToSecondaryIndex.java @@ -19,30 +19,27 @@ public DefaultPrimaryToSecondaryIndex(SecondaryToPrimaryMapper secondaryToPri @Override public synchronized void onAddOrUpdate(R resource) { Set primaryResources = secondaryToPrimaryMapper.toPrimaryResourceIDs(resource); - primaryResources.forEach( - primaryResource -> { - var resourceSet = - index.computeIfAbsent(primaryResource, pr -> ConcurrentHashMap.newKeySet()); - resourceSet.add(ResourceID.fromResource(resource)); - }); + primaryResources.forEach(primaryResource -> { + var resourceSet = index.computeIfAbsent(primaryResource, pr -> ConcurrentHashMap.newKeySet()); + resourceSet.add(ResourceID.fromResource(resource)); + }); } @Override public synchronized void onDelete(R resource) { Set primaryResources = secondaryToPrimaryMapper.toPrimaryResourceIDs(resource); - primaryResources.forEach( - primaryResource -> { - var secondaryResources = index.get(primaryResource); - // this can be null in just very special cases, like when the secondaryToPrimaryMapper is - // changing dynamically. Like if a list of ResourceIDs mapped dynamically extended in the - // mapper between the onAddOrUpdate and onDelete is called. - if (secondaryResources != null) { - secondaryResources.remove(ResourceID.fromResource(resource)); - if (secondaryResources.isEmpty()) { - index.remove(primaryResource); - } - } - }); + primaryResources.forEach(primaryResource -> { + var secondaryResources = index.get(primaryResource); + // this can be null in just very special cases, like when the secondaryToPrimaryMapper is + // changing dynamically. Like if a list of ResourceIDs mapped dynamically extended in the + // mapper between the onAddOrUpdate and onDelete is called. + if (secondaryResources != null) { + secondaryResources.remove(ResourceID.fromResource(resource)); + if (secondaryResources.isEmpty()) { + index.remove(primaryResource); + } + } + }); } @Override diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java index 48534a27b3..bb2edf183c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSource.java @@ -78,9 +78,12 @@ public class InformerEventSource public InformerEventSource( InformerEventSourceConfiguration configuration, EventSourceContext

    context) { - this(configuration, + this( + configuration, configuration.getKubernetesClient().orElse(context.getClient()), - context.getControllerConfiguration().getConfigurationService() + context + .getControllerConfiguration() + .getConfigurationService() .parseResourceVersionsForEventFilteringAndCaching()); } @@ -89,14 +92,18 @@ public InformerEventSource( } @SuppressWarnings({"unchecked", "rawtypes"}) - private InformerEventSource(InformerEventSourceConfiguration configuration, + private InformerEventSource( + InformerEventSourceConfiguration configuration, KubernetesClient client, boolean parseResourceVersions) { - super(configuration.name(), - configuration.getGroupVersionKind() + super( + configuration.name(), + configuration + .getGroupVersionKind() .map(gvk -> client.genericKubernetesResources(gvk.apiVersion(), gvk.getKind())) .orElseGet(() -> (MixedOperation) client.resources(configuration.getResourceClass())), - configuration, parseResourceVersions); + configuration, + parseResourceVersions); // If there is a primary to secondary mapper there is no need for primary to secondary index. primaryToSecondaryMapper = configuration.getPrimaryToSecondaryMapper(); if (primaryToSecondaryMapper == null) { @@ -117,13 +124,15 @@ private InformerEventSource(InformerEventSourceConfiguration configuration, @Override public void onAdd(R newResource) { if (log.isDebugEnabled()) { - log.debug("On add event received for resource id: {} type: {} version: {}", + log.debug( + "On add event received for resource id: {} type: {} version: {}", ResourceID.fromResource(newResource), - resourceType().getSimpleName(), newResource.getMetadata().getResourceVersion()); + resourceType().getSimpleName(), + newResource.getMetadata().getResourceVersion()); } primaryToSecondaryIndex.onAddOrUpdate(newResource); - onAddOrUpdate(Operation.ADD, newResource, null, - () -> InformerEventSource.super.onAdd(newResource)); + onAddOrUpdate( + Operation.ADD, newResource, null, () -> InformerEventSource.super.onAdd(newResource)); } @Override @@ -137,14 +146,18 @@ public void onUpdate(R oldObject, R newObject) { oldObject.getMetadata().getResourceVersion()); } primaryToSecondaryIndex.onAddOrUpdate(newObject); - onAddOrUpdate(Operation.UPDATE, newObject, oldObject, + onAddOrUpdate( + Operation.UPDATE, + newObject, + oldObject, () -> InformerEventSource.super.onUpdate(oldObject, newObject)); } @Override public void onDelete(R resource, boolean b) { if (log.isDebugEnabled()) { - log.debug("On delete event received for resource id: {} type: {}", + log.debug( + "On delete event received for resource id: {} type: {}", ResourceID.fromResource(resource), resourceType().getSimpleName()); } @@ -155,8 +168,8 @@ public void onDelete(R resource, boolean b) { } } - private synchronized void onAddOrUpdate(Operation operation, R newObject, R oldObject, - Runnable superOnOp) { + private synchronized void onAddOrUpdate( + Operation operation, R newObject, R oldObject, Runnable superOnOp) { var resourceID = ResourceID.fromResource(newObject); if (canSkipEvent(newObject, oldObject, resourceID)) { @@ -187,10 +200,14 @@ private boolean canSkipEvent(R newObject, R oldObject, ResourceID resourceID) { if (res.isEmpty()) { return isEventKnownFromAnnotation(newObject, oldObject); } - boolean resVersionsEqual = newObject.getMetadata().getResourceVersion() + boolean resVersionsEqual = newObject + .getMetadata() + .getResourceVersion() .equals(res.get().getMetadata().getResourceVersion()); - log.debug("Resource found in temporal cache for id: {} resource versions equal: {}", - resourceID, resVersionsEqual); + log.debug( + "Resource found in temporal cache for id: {} resource versions equal: {}", + resourceID, + resVersionsEqual); return resVersionsEqual; } @@ -202,7 +219,8 @@ private boolean isEventKnownFromAnnotation(R newObject, R oldObject) { if (id.equals(parts[0])) { if (oldObject == null && parts.length == 1) { known = true; - } else if (oldObject != null && parts.length == 2 + } else if (oldObject != null + && parts.length == 2 && oldObject.getMetadata().getResourceVersion().equals(parts[1])) { known = true; } @@ -217,19 +235,18 @@ private void propagateEvent(R object) { if (primaryResourceIdSet.isEmpty()) { return; } - primaryResourceIdSet.forEach( - resourceId -> { - Event event = new Event(resourceId); - /* - * In fabric8 client for certain cases informers can be created on in a way that they are - * automatically started, what would cause a NullPointerException here, since an event - * might be received between creation and registration. - */ - final EventHandler eventHandler = getEventHandler(); - if (eventHandler != null) { - eventHandler.handleEvent(event); - } - }); + primaryResourceIdSet.forEach(resourceId -> { + Event event = new Event(resourceId); + /* + * In fabric8 client for certain cases informers can be created on in a way that they are + * automatically started, what would cause a NullPointerException here, since an event + * might be received between creation and registration. + */ + final EventHandler eventHandler = getEventHandler(); + if (eventHandler != null) { + eventHandler.handleEvent(event); + } + }); } @Override @@ -240,20 +257,24 @@ public Set getSecondaryResources(P primary) { secondaryIDs = primaryToSecondaryIndex.getSecondaryResources(primaryResourceID); log.debug( "Using PrimaryToSecondaryIndex to find secondary resources for primary: {}. Found secondary ids: {} ", - primaryResourceID, secondaryIDs); + primaryResourceID, + secondaryIDs); } else { secondaryIDs = primaryToSecondaryMapper.toSecondaryResourceIDs(primary); log.debug( "Using PrimaryToSecondaryMapper to find secondary resources for primary: {}. Found secondary ids: {} ", - primary, secondaryIDs); + primary, + secondaryIDs); } - return secondaryIDs.stream().map(this::get).flatMap(Optional::stream) + return secondaryIDs.stream() + .map(this::get) + .flatMap(Optional::stream) .collect(Collectors.toSet()); } @Override - public synchronized void handleRecentResourceUpdate(ResourceID resourceID, R resource, - R previousVersionOfResource) { + public synchronized void handleRecentResourceUpdate( + ResourceID resourceID, R resource, R previousVersionOfResource) { handleRecentCreateOrUpdate(Operation.UPDATE, resource, previousVersionOfResource); } @@ -264,8 +285,11 @@ public synchronized void handleRecentResourceCreate(ResourceID resourceID, R res private void handleRecentCreateOrUpdate(Operation operation, R newResource, R oldResource) { primaryToSecondaryIndex.onAddOrUpdate(newResource); - temporaryResourceCache.putResource(newResource, Optional.ofNullable(oldResource) - .map(r -> r.getMetadata().getResourceVersion()).orElse(null)); + temporaryResourceCache.putResource( + newResource, + Optional.ofNullable(oldResource) + .map(r -> r.getMetadata().getResourceVersion()) + .orElse(null)); } private boolean useSecondaryToPrimaryIndex() { @@ -289,8 +313,8 @@ private boolean eventAcceptedByFilter(Operation operation, R newObject, R oldObj } private boolean acceptedByDeleteFilters(R resource, boolean b) { - return (onDeleteFilter == null || onDeleteFilter.accept(resource, b)) && - (genericFilter == null || genericFilter.accept(resource)); + return (onDeleteFilter == null || onDeleteFilter.accept(resource, b)) + && (genericFilter == null || genericFilter.accept(resource)); } /** @@ -300,12 +324,17 @@ private boolean acceptedByDeleteFilters(R resource, boolean b) { * @param target mutable resource that will be returned */ public R addPreviousAnnotation(String resourceVersion, R target) { - target.getMetadata().getAnnotations().put(PREVIOUS_ANNOTATION_KEY, - id + Optional.ofNullable(resourceVersion).map(rv -> "," + rv).orElse("")); + target + .getMetadata() + .getAnnotations() + .put( + PREVIOUS_ANNOTATION_KEY, + id + Optional.ofNullable(resourceVersion).map(rv -> "," + rv).orElse("")); return target; } private enum Operation { - ADD, UPDATE + ADD, + UPDATE } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java index 57bbf2a8ce..3c56388e46 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerManager.java @@ -41,7 +41,8 @@ class InformerManager> private final Map>> indexers = new HashMap<>(); private ControllerConfiguration controllerConfiguration; - InformerManager(MixedOperation, Resource> client, + InformerManager( + MixedOperation, Resource> client, C configuration, ResourceEventHandler eventHandler) { this.client = client; @@ -57,7 +58,9 @@ void setControllerConfiguration(ControllerConfiguration controllerConfigurati public void start() throws OperatorException { initSources(); // make sure informers are all started before proceeding further - controllerConfiguration.getConfigurationService().getExecutorServiceManager() + controllerConfiguration + .getConfigurationService() + .getExecutorServiceManager() .boundedExecuteAndWaitForAllToComplete( sources.values().stream(), iw -> { @@ -78,12 +81,10 @@ private void initSources() { var source = createEventSourceForNamespace(WATCH_ALL_NAMESPACES); log.debug("Registered {} -> {} for any namespace", this, source); } else { - targetNamespaces.forEach( - ns -> { - final var source = createEventSourceForNamespace(ns); - log.debug("Registered {} -> {} for namespace: {}", this, source, - ns); - }); + targetNamespaces.forEach(ns -> { + final var source = createEventSourceForNamespace(ns); + log.debug("Registered {} -> {} for namespace: {}", this, source, ns); + }); } } @@ -92,8 +93,8 @@ C configuration() { } public void changeNamespaces(Set namespaces) { - var sourcesToRemove = sources.keySet().stream() - .filter(k -> !namespaces.contains(k)).collect(Collectors.toSet()); + var sourcesToRemove = + sources.keySet().stream().filter(k -> !namespaces.contains(k)).collect(Collectors.toSet()); log.debug("Stopped informer {} for namespaces: {}", this, sourcesToRemove); sourcesToRemove.forEach(k -> sources.remove(k).stop()); @@ -101,24 +102,20 @@ public void changeNamespaces(Set namespaces) { if (!sources.containsKey(ns)) { final InformerWrapper source = createEventSourceForNamespace(ns); source.start(); - log.debug("Registered new {} -> {} for namespace: {}", this, source, - ns); + log.debug("Registered new {} -> {} for namespace: {}", this, source, ns); } }); } - private InformerWrapper createEventSourceForNamespace(String namespace) { final InformerWrapper source; final var labelSelector = configuration.getInformerConfig().getLabelSelector(); if (namespace.equals(WATCH_ALL_NAMESPACES)) { - final var filteredBySelectorClient = - client.inAnyNamespace().withLabelSelector(labelSelector); + final var filteredBySelectorClient = client.inAnyNamespace().withLabelSelector(labelSelector); source = createEventSource(filteredBySelectorClient, eventHandler, WATCH_ALL_NAMESPACES); } else { source = createEventSource( - client.inNamespace(namespace).withLabelSelector(labelSelector), - eventHandler, namespace); + client.inNamespace(namespace).withLabelSelector(labelSelector), eventHandler, namespace); } source.addIndexers(indexers); return source; @@ -126,14 +123,16 @@ private InformerWrapper createEventSourceForNamespace(String namespace) { private InformerWrapper createEventSource( FilterWatchListDeletable, Resource> filteredBySelectorClient, - ResourceEventHandler eventHandler, String namespaceIdentifier) { + ResourceEventHandler eventHandler, + String namespaceIdentifier) { final var informerConfig = configuration.getInformerConfig(); var informer = Optional.ofNullable(informerConfig.getInformerListLimit()) .map(filteredBySelectorClient::withLimit) - .orElse(filteredBySelectorClient).runnableInformer(0); + .orElse(filteredBySelectorClient) + .runnableInformer(0); Optional.ofNullable(informerConfig.getItemStore()).ifPresent(informer::itemStore); - var source = new InformerWrapper<>(informer, controllerConfiguration.getConfigurationService(), - namespaceIdentifier); + var source = new InformerWrapper<>( + informer, controllerConfiguration.getConfigurationService(), namespaceIdentifier); source.addEventHandler(eventHandler); sources.put(namespaceIdentifier, source); return source; @@ -167,9 +166,7 @@ public Stream list(String namespace, Predicate predicate) { .map(source -> source.list(namespace, predicate)) .orElseGet(Stream::empty); } else { - return getSource(namespace) - .map(source -> source.list(predicate)) - .orElseGet(Stream::empty); + return getSource(namespace).map(source -> source.list(predicate)).orElseGet(Stream::empty); } } @@ -177,10 +174,14 @@ public Stream list(String namespace, Predicate predicate) { public Optional get(ResourceID resourceID) { return getSource(resourceID.getNamespace().orElse(WATCH_ALL_NAMESPACES)) .flatMap(source -> source.get(resourceID)) - .map(r -> controllerConfiguration.getConfigurationService() - .cloneSecondaryResourcesWhenGettingFromCache() - ? controllerConfiguration.getConfigurationService().getResourceCloner().clone(r) - : r); + .map(r -> controllerConfiguration + .getConfigurationService() + .cloneSecondaryResourcesWhenGettingFromCache() + ? controllerConfiguration + .getConfigurationService() + .getResourceCloner() + .clone(r) + : r); } @Override @@ -204,8 +205,10 @@ public void addIndexers(Map>> indexers) { @Override public List byIndex(String indexName, String indexKey) { - return sources.values().stream().map(s -> s.byIndex(indexName, indexKey)) - .flatMap(List::stream).collect(Collectors.toList()); + return sources.values().stream() + .map(s -> s.byIndex(indexName, indexKey)) + .flatMap(List::stream) + .collect(Collectors.toList()); } @Override diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerWrapper.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerWrapper.java index 28cf33a041..5212fd13a3 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerWrapper.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerWrapper.java @@ -38,7 +38,9 @@ class InformerWrapper private final String namespaceIdentifier; private final ConfigurationService configurationService; - public InformerWrapper(SharedIndexInformer informer, ConfigurationService configurationService, + public InformerWrapper( + SharedIndexInformer informer, + ConfigurationService configurationService, String namespaceIdentifier) { this.informer = informer; this.namespaceIdentifier = namespaceIdentifier; @@ -60,8 +62,7 @@ public void start() throws OperatorException { }); } else { final var apiTypeClass = informer.getApiTypeClass(); - final var fullResourceName = - HasMetadata.getFullResourceName(apiTypeClass); + final var fullResourceName = HasMetadata.getFullResourceName(apiTypeClass); final var version = HasMetadata.getVersion(apiTypeClass); throw new IllegalStateException( "Cannot retrieve 'stopped' callback to listen to informer stopping for informer for " @@ -77,18 +78,21 @@ public void start() throws OperatorException { try { thread.setName(informerInfo() + " " + thread.getId()); final var resourceName = informer.getApiTypeClass().getSimpleName(); - log.debug("Starting informer for namespace: {} resource: {}", namespaceIdentifier, - resourceName); + log.debug( + "Starting informer for namespace: {} resource: {}", namespaceIdentifier, resourceName); var start = informer.start(); // note that in case we don't put here timeout and stopOnInformerErrorDuringStartup is // false, and there is a rbac issue the get never returns; therefore operator never really // starts - log.trace("Waiting informer to start namespace: {} resource: {}", namespaceIdentifier, - resourceName); - start.toCompletableFuture().get(configurationService.cacheSyncTimeout().toMillis(), - TimeUnit.MILLISECONDS); - log.debug("Started informer for namespace: {} resource: {}", namespaceIdentifier, + log.trace( + "Waiting informer to start namespace: {} resource: {}", + namespaceIdentifier, resourceName); + start + .toCompletableFuture() + .get(configurationService.cacheSyncTimeout().toMillis(), TimeUnit.MILLISECONDS); + log.debug( + "Started informer for namespace: {} resource: {}", namespaceIdentifier, resourceName); } catch (TimeoutException | ExecutionException e) { if (configurationService.stopOnInformerErrorDuringStartup()) { log.error("Informer startup error. Operator will be stopped. Informer: {}", informer, e); @@ -105,8 +109,8 @@ public void start() throws OperatorException { } } catch (Exception e) { - ReconcilerUtils.handleKubernetesClientException(e, - HasMetadata.getFullResourceName(informer.getApiTypeClass())); + ReconcilerUtils.handleKubernetesClientException( + e, HasMetadata.getFullResourceName(informer.getApiTypeClass())); throw new OperatorException( "Couldn't start informer for " + versionedFullResourceName() + " resources", e); } @@ -141,8 +145,8 @@ public Stream list(Predicate predicate) { @Override public Stream list(String namespace, Predicate predicate) { - final var stream = cache.list().stream() - .filter(r -> namespace.equals(r.getMetadata().getNamespace())); + final var stream = + cache.list().stream().filter(r -> namespace.equals(r.getMetadata().getNamespace())); return predicate != null ? stream.filter(predicate) : stream; } @@ -194,8 +198,12 @@ public Status getStatus() { var status = isRunning() && hasSynced() && isWatching() ? Status.HEALTHY : Status.UNHEALTHY; log.debug( "Informer status: {} for for type: {}, namespace: {}, details[ is running: {}, has synced: {}, is watching: {} ]", - status, informer.getApiTypeClass().getSimpleName(), namespaceIdentifier, isRunning(), - hasSynced(), isWatching()); + status, + informer.getApiTypeClass().getSimpleName(), + namespaceIdentifier, + isRunning(), + hasSynced(), + isWatching()); return status; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java index f5e899826d..d108393321 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/ManagedInformerEventSource.java @@ -27,11 +27,16 @@ import io.javaoperatorsdk.operator.processing.event.source.*; @SuppressWarnings("rawtypes") -public abstract class ManagedInformerEventSource> +public abstract class ManagedInformerEventSource< + R extends HasMetadata, P extends HasMetadata, C extends Informable> extends AbstractEventSource - implements ResourceEventHandler, Cache, IndexerResourceCache, - RecentOperationCacheFiller, NamespaceChangeable, - InformerWrappingEventSourceHealthIndicator, Configurable { + implements ResourceEventHandler, + Cache, + IndexerResourceCache, + RecentOperationCacheFiller, + NamespaceChangeable, + InformerWrappingEventSourceHealthIndicator, + Configurable { private static final Logger log = LoggerFactory.getLogger(ManagedInformerEventSource.class); private InformerManager cache; @@ -42,9 +47,8 @@ public abstract class ManagedInformerEventSource temporaryResourceCache; protected MixedOperation client; - protected ManagedInformerEventSource(String name, - MixedOperation client, C configuration, - boolean parseResourceVersions) { + protected ManagedInformerEventSource( + String name, MixedOperation client, C configuration, boolean parseResourceVersions) { super(configuration.getResourceClass(), name); this.parseResourceVersions = parseResourceVersions; this.client = client; @@ -101,10 +105,10 @@ public synchronized void stop() { } @Override - public void handleRecentResourceUpdate(ResourceID resourceID, R resource, - R previousVersionOfResource) { - temporaryResourceCache.putResource(resource, - previousVersionOfResource.getMetadata().getResourceVersion()); + public void handleRecentResourceUpdate( + ResourceID resourceID, R resource, R previousVersionOfResource) { + temporaryResourceCache.putResource( + resource, previousVersionOfResource.getMetadata().getResourceVersion()); } @Override @@ -119,8 +123,10 @@ public Optional get(ResourceID resourceID) { log.debug("Resource found in temporary cache for Resource ID: {}", resourceID); return resource; } else { - log.debug("Resource not found in temporary cache reading it from informer cache," + - " for Resource ID: {}", resourceID); + log.debug( + "Resource not found in temporary cache reading it from informer cache," + + " for Resource ID: {}", + resourceID); var res = cache.get(resourceID); log.debug("Resource found in cache: {} for id: {}", res.isPresent(), resourceID); return res; @@ -181,13 +187,11 @@ public C configuration() { @Override public String toString() { - return getClass().getSimpleName() + "{" + - "resourceClass: " + configuration().getResourceClass().getSimpleName() + - "}"; + return getClass().getSimpleName() + "{" + "resourceClass: " + + configuration().getResourceClass().getSimpleName() + "}"; } public void setControllerConfiguration(ControllerConfiguration controllerConfiguration) { this.controllerConfiguration = controllerConfiguration; } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/Mappers.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/Mappers.java index db3877376c..a62748f318 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/Mappers.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/Mappers.java @@ -26,27 +26,33 @@ public static SecondaryToPrimaryMapper fromAnnotation @SuppressWarnings("unused") public static SecondaryToPrimaryMapper fromAnnotation( - String nameKey, String namespaceKey, String typeKey, + String nameKey, + String namespaceKey, + String typeKey, Class primaryResourceType) { return fromMetadata(nameKey, namespaceKey, typeKey, primaryResourceType, false); } @SuppressWarnings("unused") - public static SecondaryToPrimaryMapper fromLabel(String nameKey, - String typeKey, - Class primaryResourceType) { + public static SecondaryToPrimaryMapper fromLabel( + String nameKey, String typeKey, Class primaryResourceType) { return fromLabel(nameKey, null, typeKey, primaryResourceType); } public static SecondaryToPrimaryMapper fromDefaultAnnotations( Class primaryResourceType) { - return fromAnnotation(DEFAULT_ANNOTATION_FOR_NAME, DEFAULT_ANNOTATION_FOR_NAMESPACE, - DEFAULT_ANNOTATION_FOR_PRIMARY_TYPE, primaryResourceType); + return fromAnnotation( + DEFAULT_ANNOTATION_FOR_NAME, + DEFAULT_ANNOTATION_FOR_NAMESPACE, + DEFAULT_ANNOTATION_FOR_PRIMARY_TYPE, + primaryResourceType); } @SuppressWarnings("unused") public static SecondaryToPrimaryMapper fromLabel( - String nameKey, String namespaceKey, String typeKey, + String nameKey, + String namespaceKey, + String typeKey, Class primaryResourceType) { return fromMetadata(nameKey, namespaceKey, typeKey, primaryResourceType, true); } @@ -58,7 +64,8 @@ public static SecondaryToPrimaryMapper fromOwnerRefer public static SecondaryToPrimaryMapper fromOwnerReferences( Class primaryResourceType, boolean clusterScoped) { - return fromOwnerReferences(HasMetadata.getApiVersion(primaryResourceType), + return fromOwnerReferences( + HasMetadata.getApiVersion(primaryResourceType), HasMetadata.getKind(primaryResourceType), clusterScoped); } @@ -69,26 +76,25 @@ public static SecondaryToPrimaryMapper fromOwnerRefer } public static SecondaryToPrimaryMapper fromOwnerReferences( - HasMetadata primaryResource, - boolean clusterScoped) { - return fromOwnerReferences(primaryResource.getApiVersion(), primaryResource.getKind(), - clusterScoped); + HasMetadata primaryResource, boolean clusterScoped) { + return fromOwnerReferences( + primaryResource.getApiVersion(), primaryResource.getKind(), clusterScoped); } public static SecondaryToPrimaryMapper fromOwnerReferences( - String apiVersion, String kind, - boolean clusterScope) { - return resource -> resource.getMetadata().getOwnerReferences() - .stream() - .filter(r -> r.getKind().equals(kind) - && r.getApiVersion().equals(apiVersion)) + String apiVersion, String kind, boolean clusterScope) { + return resource -> resource.getMetadata().getOwnerReferences().stream() + .filter(r -> r.getKind().equals(kind) && r.getApiVersion().equals(apiVersion)) .map(or -> ResourceID.fromOwnerReference(resource, or, clusterScope)) .collect(Collectors.toSet()); } private static SecondaryToPrimaryMapper fromMetadata( - String nameKey, String namespaceKey, String typeKey, - Class primaryResourceType, boolean isLabel) { + String nameKey, + String namespaceKey, + String typeKey, + Class primaryResourceType, + boolean isLabel) { return resource -> { final var metadata = resource.getMetadata(); if (metadata == null) { @@ -107,8 +113,8 @@ private static SecondaryToPrimaryMapper fromMetadata( String gvkSimple = map.get(typeKey); - if (gvkSimple != null && - !GroupVersionKind.fromString(gvkSimple) + if (gvkSimple != null + && !GroupVersionKind.fromString(gvkSimple) .equals(GroupVersionKind.gvkFor(primaryResourceType))) { return Set.of(); } @@ -134,8 +140,8 @@ public static ResourceID fromString(String cacheKey) { /** * Produces a mapper that will associate a secondary resource with all owners of the primary type. */ - public static SecondaryToPrimaryMapper fromOwnerType( - Class clazz) { + public static + SecondaryToPrimaryMapper fromOwnerType(Class clazz) { String kind = HasMetadata.getKind(clazz); return resource -> { var meta = resource.getMetadata(); @@ -168,5 +174,4 @@ public Set toPrimaryResourceIDs(HasMetadata resource) { return Mappers.fromDefaultAnnotations(primaryResourceType).toPrimaryResourceIDs(resource); } } - } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/NOOPPrimaryToSecondaryIndex.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/NOOPPrimaryToSecondaryIndex.java index 0830d8bb1b..abefbba638 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/NOOPPrimaryToSecondaryIndex.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/NOOPPrimaryToSecondaryIndex.java @@ -5,8 +5,7 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.processing.event.ResourceID; -class NOOPPrimaryToSecondaryIndex - implements PrimaryToSecondaryIndex { +class NOOPPrimaryToSecondaryIndex implements PrimaryToSecondaryIndex { @SuppressWarnings("rawtypes") private static final NOOPPrimaryToSecondaryIndex instance = new NOOPPrimaryToSecondaryIndex(); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCache.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCache.java index 07c9e0a6cc..a8303ae8f9 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCache.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCache.java @@ -84,7 +84,8 @@ void clean() { private final boolean parseResourceVersions; private final ExpirationCache knownResourceVersions; - public TemporaryResourceCache(ManagedInformerEventSource managedInformerEventSource, + public TemporaryResourceCache( + ManagedInformerEventSource managedInformerEventSource, boolean parseResourceVersions) { this.managedInformerEventSource = managedInformerEventSource; this.parseResourceVersions = parseResourceVersions; @@ -106,9 +107,10 @@ public synchronized void onAddOrUpdateEvent(T resource) { } synchronized void onEvent(T resource, boolean unknownState) { - cache.computeIfPresent(ResourceID.fromResource(resource), - (id, cached) -> (unknownState || !isLaterResourceVersion(id, cached, resource)) ? null - : cached); + cache.computeIfPresent( + ResourceID.fromResource(resource), + (id, cached) -> + (unknownState || !isLaterResourceVersion(id, cached, resource)) ? null : cached); } public synchronized void putAddedResource(T newResource) { @@ -134,7 +136,8 @@ public synchronized void putResource(T newResource, String previousResourceVersi if (tombstones.contains(newResource.getMetadata().getUid())) { log.debug( "Won't resurrect uid {} for resource id: {}", - newResource.getMetadata().getUid(), resourceId); + newResource.getMetadata().getUid(), + resourceId); return; } // we can skip further checks as this is a simple add and there's no previous entry to @@ -144,11 +147,15 @@ public synchronized void putResource(T newResource, String previousResourceVersi if (moveAhead || (cachedResource != null - && (cachedResource.getMetadata().getResourceVersion().equals(previousResourceVersion)) + && (cachedResource + .getMetadata() + .getResourceVersion() + .equals(previousResourceVersion)) || isLaterResourceVersion(resourceId, newResource, cachedResource))) { log.debug( "Temporarily moving ahead to target version {} for resource id: {}", - newResource.getMetadata().getResourceVersion(), resourceId); + newResource.getMetadata().getResourceVersion(), + resourceId); cache.put(resourceId, newResource); } else if (cache.remove(resourceId) != null) { log.debug("Removed an obsolete resource from cache for id: {}", resourceId); @@ -168,15 +175,16 @@ public synchronized boolean isKnownResourceVersion(T resource) { private boolean isLaterResourceVersion(ResourceID resourceId, T newResource, T cachedResource) { try { if (parseResourceVersions - && Long.parseLong(newResource.getMetadata().getResourceVersion()) > Long - .parseLong(cachedResource.getMetadata().getResourceVersion())) { + && Long.parseLong(newResource.getMetadata().getResourceVersion()) + > Long.parseLong(cachedResource.getMetadata().getResourceVersion())) { return true; } } catch (NumberFormatException e) { log.debug( "Could not compare resourceVersions {} and {} for {}", newResource.getMetadata().getResourceVersion(), - cachedResource.getMetadata().getResourceVersion(), resourceId); + cachedResource.getMetadata().getResourceVersion(), + resourceId); } return false; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStore.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStore.java index e5f682b210..0088f99084 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStore.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStore.java @@ -19,8 +19,8 @@ public TransformingItemStore(UnaryOperator transformationFunction) { this(Cache::metaNamespaceKeyFunc, transformationFunction); } - public TransformingItemStore(Function keyFunction, - UnaryOperator transformationFunction) { + public TransformingItemStore( + Function keyFunction, UnaryOperator transformationFunction) { this.keyFunction = keyFunction; this.transformationFunction = transformationFunction; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfiguration.java index 52e1fbcd68..b1304dcd37 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfiguration.java @@ -9,25 +9,31 @@ import io.fabric8.kubernetes.api.model.HasMetadata; import io.javaoperatorsdk.operator.processing.event.source.CacheKeyMapper; -public record PerResourcePollingConfiguration(String name,ScheduledExecutorService executorService, CacheKeyMapper cacheKeyMapper, - PerResourcePollingEventSource.ResourceFetcher resourceFetcher, - Predicate

    registerPredicate, Duration defaultPollingPeriod) { +public record PerResourcePollingConfiguration( + String name, + ScheduledExecutorService executorService, + CacheKeyMapper cacheKeyMapper, + PerResourcePollingEventSource.ResourceFetcher resourceFetcher, + Predicate

    registerPredicate, + Duration defaultPollingPeriod) { - public static final int DEFAULT_EXECUTOR_THREAD_NUMBER = 1; + public static final int DEFAULT_EXECUTOR_THREAD_NUMBER = 1; - public PerResourcePollingConfiguration( - String name, - ScheduledExecutorService executorService, - CacheKeyMapper cacheKeyMapper, - PerResourcePollingEventSource.ResourceFetcher resourceFetcher, - Predicate

    registerPredicate, - Duration defaultPollingPeriod) { - this.name = name; - this.executorService = executorService == null ? new ScheduledThreadPoolExecutor(DEFAULT_EXECUTOR_THREAD_NUMBER) - : executorService; - this.cacheKeyMapper = cacheKeyMapper == null ? CacheKeyMapper.singleResourceCacheKeyMapper() : cacheKeyMapper; - this.resourceFetcher = Objects.requireNonNull(resourceFetcher); - this.registerPredicate = registerPredicate; - this.defaultPollingPeriod = defaultPollingPeriod; - } + public PerResourcePollingConfiguration( + String name, + ScheduledExecutorService executorService, + CacheKeyMapper cacheKeyMapper, + PerResourcePollingEventSource.ResourceFetcher resourceFetcher, + Predicate

    registerPredicate, + Duration defaultPollingPeriod) { + this.name = name; + this.executorService = executorService == null + ? new ScheduledThreadPoolExecutor(DEFAULT_EXECUTOR_THREAD_NUMBER) + : executorService; + this.cacheKeyMapper = + cacheKeyMapper == null ? CacheKeyMapper.singleResourceCacheKeyMapper() : cacheKeyMapper; + this.resourceFetcher = Objects.requireNonNull(resourceFetcher); + this.registerPredicate = registerPredicate; + this.defaultPollingPeriod = defaultPollingPeriod; + } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfigurationBuilder.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfigurationBuilder.java index 85b1fcf2b0..4fab88ffd8 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfigurationBuilder.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingConfigurationBuilder.java @@ -49,7 +49,12 @@ public PerResourcePollingConfigurationBuilder withName(String name) { } public PerResourcePollingConfiguration build() { - return new PerResourcePollingConfiguration<>(name, executorService, cacheKeyMapper, - resourceFetcher, registerPredicate, defaultPollingPeriod); + return new PerResourcePollingConfiguration<>( + name, + executorService, + cacheKeyMapper, + resourceFetcher, + registerPredicate, + defaultPollingPeriod); } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java index 983679a27a..b6c8df1856 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSource.java @@ -23,7 +23,6 @@ import io.javaoperatorsdk.operator.processing.event.source.ExternalResourceCachingEventSource; import io.javaoperatorsdk.operator.processing.event.source.ResourceEventAware; - /** * * Polls the supplier for each controlled resource registered. Resource is registered when created @@ -36,8 +35,7 @@ * @param

    related custom resource */ public class PerResourcePollingEventSource - extends ExternalResourceCachingEventSource - implements ResourceEventAware

    { + extends ExternalResourceCachingEventSource implements ResourceEventAware

    { private static final Logger log = LoggerFactory.getLogger(PerResourcePollingEventSource.class); @@ -50,9 +48,8 @@ public class PerResourcePollingEventSource private final Predicate

    registerPredicate; private final Duration period; - - - public PerResourcePollingEventSource(Class resourceClass, + public PerResourcePollingEventSource( + Class resourceClass, EventSourceContext

    context, PerResourcePollingConfiguration config) { super(config.name(), resourceClass, config.cacheKeyMapper()); @@ -76,8 +73,8 @@ private void scheduleNextExecution(P primary, Set actualResources) { var fetchDelay = resourceFetcher.fetchDelay(actualResources, primary); var fetchDuration = fetchDelay.orElse(period); - ScheduledFuture scheduledFuture = (ScheduledFuture) executorService - .schedule(new FetchingExecutor(primaryID), fetchDuration.toMillis(), TimeUnit.MILLISECONDS); + ScheduledFuture scheduledFuture = (ScheduledFuture) executorService.schedule( + new FetchingExecutor(primaryID), fetchDuration.toMillis(), TimeUnit.MILLISECONDS); scheduledFutures.put(primaryID, scheduledFuture); } @@ -108,8 +105,8 @@ public void onResourceDeleted(P resource) { // important because otherwise there will be a race condition related to the timerTasks. private void checkAndRegisterTask(P resource) { var primaryID = ResourceID.fromResource(resource); - if (scheduledFutures.get(primaryID) == null && (registerPredicate == null - || registerPredicate.test(resource))) { + if (scheduledFutures.get(primaryID) == null + && (registerPredicate == null || registerPredicate.test(resource))) { var cachedResources = cache.get(primaryID); var actualResources = cachedResources == null ? null : new HashSet<>(cachedResources.values()); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfiguration.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfiguration.java index c66ef38c8f..f73547a4db 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfiguration.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfiguration.java @@ -5,15 +5,21 @@ import io.javaoperatorsdk.operator.processing.event.source.CacheKeyMapper; -public record PollingConfiguration(String name,PollingEventSource.GenericResourceFetcher genericResourceFetcher, - Duration period, CacheKeyMapper cacheKeyMapper) { +public record PollingConfiguration( + String name, + PollingEventSource.GenericResourceFetcher genericResourceFetcher, + Duration period, + CacheKeyMapper cacheKeyMapper) { - public PollingConfiguration(String name,PollingEventSource.GenericResourceFetcher genericResourceFetcher, Duration period, - CacheKeyMapper cacheKeyMapper) { + public PollingConfiguration( + String name, + PollingEventSource.GenericResourceFetcher genericResourceFetcher, + Duration period, + CacheKeyMapper cacheKeyMapper) { this.name = name; this.genericResourceFetcher = Objects.requireNonNull(genericResourceFetcher); this.period = period; this.cacheKeyMapper = - cacheKeyMapper == null ? CacheKeyMapper.singleResourceCacheKeyMapper() : cacheKeyMapper; + cacheKeyMapper == null ? CacheKeyMapper.singleResourceCacheKeyMapper() : cacheKeyMapper; } } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfigurationBuilder.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfigurationBuilder.java index c6bccefa82..b86b3be3bb 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfigurationBuilder.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingConfigurationBuilder.java @@ -10,8 +10,8 @@ public final class PollingConfigurationBuilder { private CacheKeyMapper cacheKeyMapper; private String name; - public PollingConfigurationBuilder(PollingEventSource.GenericResourceFetcher fetcher, - Duration period) { + public PollingConfigurationBuilder( + PollingEventSource.GenericResourceFetcher fetcher, Duration period) { this.genericResourceFetcher = fetcher; this.period = period; } diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSource.java index 6549030c4b..d5fde6c779 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSource.java @@ -52,8 +52,6 @@ public class PollingEventSource private final Duration period; private final AtomicBoolean healthy = new AtomicBoolean(true); - - public PollingEventSource(Class resourceClass, PollingConfiguration config) { super(config.name(), resourceClass, config.cacheKeyMapper()); this.genericResourceFetcher = config.genericResourceFetcher(); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java index b909083a00..53c0d328a8 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSource.java @@ -15,8 +15,7 @@ import io.javaoperatorsdk.operator.processing.event.source.AbstractEventSource; import io.javaoperatorsdk.operator.processing.event.source.ResourceEventAware; -public class TimerEventSource - extends AbstractEventSource +public class TimerEventSource extends AbstractEventSource implements ResourceEventAware { private static final Logger log = LoggerFactory.getLogger(TimerEventSource.class); diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecution.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecution.java index 32bf154f97..a2c7a9a609 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecution.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecution.java @@ -15,8 +15,7 @@ public GenericRetryExecution(GenericRetry genericRetry) { } public Optional nextDelay() { - if (genericRetry.getMaxAttempts() > -1 - && lastAttemptIndex >= genericRetry.getMaxAttempts()) { + if (genericRetry.getMaxAttempts() > -1 && lastAttemptIndex >= genericRetry.getMaxAttempts()) { return Optional.empty(); } if (lastAttemptIndex > 1) { @@ -31,8 +30,7 @@ public Optional nextDelay() { @Override public boolean isLastAttempt() { - return genericRetry.getMaxAttempts() > -1 - && lastAttemptIndex >= genericRetry.getMaxAttempts(); + return genericRetry.getMaxAttempts() > -1 && lastAttemptIndex >= genericRetry.getMaxAttempts(); } @Override diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GradualRetry.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GradualRetry.java index f5033fc7aa..3ba8070141 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GradualRetry.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/GradualRetry.java @@ -15,8 +15,8 @@ long DEFAULT_INITIAL_INTERVAL = 2000L; double DEFAULT_MULTIPLIER = 1.5D; - long DEFAULT_MAX_INTERVAL = (long) (GradualRetry.DEFAULT_INITIAL_INTERVAL * Math.pow( - GradualRetry.DEFAULT_MULTIPLIER, GradualRetry.DEFAULT_MAX_ATTEMPTS)); + long DEFAULT_MAX_INTERVAL = (long) (GradualRetry.DEFAULT_INITIAL_INTERVAL + * Math.pow(GradualRetry.DEFAULT_MULTIPLIER, GradualRetry.DEFAULT_MAX_ATTEMPTS)); long UNSET_VALUE = Long.MAX_VALUE; diff --git a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/Retry.java b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/Retry.java index 78ec6f189c..fb36aaa92c 100644 --- a/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/Retry.java +++ b/operator-framework-core/src/main/java/io/javaoperatorsdk/operator/processing/retry/Retry.java @@ -4,5 +4,4 @@ public interface Retry { RetryExecution initExecution(); - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ControllerManagerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ControllerManagerTest.java index c8c4cb5008..767a165c7b 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ControllerManagerTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ControllerManagerTest.java @@ -20,9 +20,10 @@ class ControllerManagerTest { @Test void addingReconcilerWithSameNameShouldNotWork() { final var controllerConfiguration = - new TestControllerConfiguration<>(new TestCustomReconciler(null), - TestCustomResource.class); - var controller = new Controller<>(controllerConfiguration.reconciler, controllerConfiguration, + new TestControllerConfiguration<>(new TestCustomReconciler(null), TestCustomResource.class); + var controller = new Controller<>( + controllerConfiguration.reconciler, + controllerConfiguration, MockKubernetesClient.client(controllerConfiguration.getResourceClass())); ConfigurationService configurationService = new BaseConfigurationService(); final var controllerManager = @@ -41,13 +42,15 @@ private static class TestControllerConfiguration private final Reconciler reconciler; public TestControllerConfiguration(Reconciler reconciler, Class crClass) { - super(crClass, getControllerName(reconciler), reconciler.getClass(), + super( + crClass, + getControllerName(reconciler), + reconciler.getClass(), new BaseConfigurationService()); this.reconciler = reconciler; } - static String getControllerName( - Reconciler controller) { + static String getControllerName(Reconciler controller) { return controller.getClass().getSimpleName() + "Controller"; } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/LeaderElectionManagerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/LeaderElectionManagerTest.java index ee56d6a99d..4db17c7f61 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/LeaderElectionManagerTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/LeaderElectionManagerTest.java @@ -32,10 +32,9 @@ private LeaderElectionManager leaderElectionManager(Object selfSubjectReview) { ControllerManager controllerManager = mock(ControllerManager.class); final var kubernetesClient = MockKubernetesClient.client(Lease.class, selfSubjectReview); when(kubernetesClient.getConfiguration()).thenReturn(Config.autoConfigure(null)); - var configurationService = - ConfigurationService.newOverriddenConfigurationService( - o -> o.withLeaderElectionConfiguration(new LeaderElectionConfiguration("test")) - .withKubernetesClient(kubernetesClient)); + var configurationService = ConfigurationService.newOverriddenConfigurationService( + o -> o.withLeaderElectionConfiguration(new LeaderElectionConfiguration("test")) + .withKubernetesClient(kubernetesClient)); return new LeaderElectionManager(controllerManager, configurationService); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/MockKubernetesClient.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/MockKubernetesClient.java index 31fec8b924..c6343d8042 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/MockKubernetesClient.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/MockKubernetesClient.java @@ -43,27 +43,26 @@ public static KubernetesClient client(Class clazz) { return client(clazz, null, null); } - public static KubernetesClient client(Class clazz, - Object selfSubjectReview) { + public static KubernetesClient client( + Class clazz, Object selfSubjectReview) { return client(clazz, null, selfSubjectReview); } - public static KubernetesClient client(Class clazz, - Consumer informerRunBehavior) { + public static KubernetesClient client( + Class clazz, Consumer informerRunBehavior) { return client(clazz, informerRunBehavior, null); } @SuppressWarnings({"unchecked", "rawtypes"}) - public static KubernetesClient client(Class clazz, - Consumer informerRunBehavior, - Object selfSubjectReview) { + public static KubernetesClient client( + Class clazz, Consumer informerRunBehavior, Object selfSubjectReview) { final var client = mock(KubernetesClient.class); MixedOperation, Resource> resources = mock(MixedOperation.class); NonNamespaceOperation, Resource> nonNamespaceOperation = mock(NonNamespaceOperation.class); - AnyNamespaceOperation, Resource> inAnyNamespace = mock( - AnyNamespaceOperation.class); + AnyNamespaceOperation, Resource> inAnyNamespace = + mock(AnyNamespaceOperation.class); FilterWatchListDeletable, Resource> filterable = mock(FilterWatchListDeletable.class); when(resources.inNamespace(anyString())).thenReturn(nonNamespaceOperation); @@ -79,13 +78,15 @@ public static KubernetesClient client(Class clazz, when(informer.getApiTypeClass()).thenReturn(clazz); if (informerRunBehavior != null) { doAnswer(invocation -> { - try { - informerRunBehavior.accept(null); - } catch (Exception e) { - stopped.completeExceptionally(e); - } - return stopped; - }).when(informer).start(); + try { + informerRunBehavior.accept(null); + } catch (Exception e) { + stopped.completeExceptionally(e); + } + return stopped; + }) + .when(informer) + .start(); } doAnswer(invocation -> null).when(informer).stop(); Indexer mockIndexer = mock(Indexer.class); 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 d5646c476a..565a549cd4 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 @@ -44,11 +44,13 @@ void shouldBePossibleToRetrieveRegisteredControllerByName() { operator.register(reconciler); final var maybeController = operator.getRegisteredController(name); assertTrue(maybeController.isPresent()); - assertEquals(name, maybeController.map(rc -> rc.getConfiguration().getName()).orElseThrow()); + assertEquals( + name, maybeController.map(rc -> rc.getConfiguration().getName()).orElseThrow()); registeredControllers = operator.getRegisteredControllers(); assertEquals(1, registeredControllers.size()); - assertEquals(maybeController.get(), registeredControllers.stream().findFirst().orElseThrow()); + assertEquals( + maybeController.get(), registeredControllers.stream().findFirst().orElseThrow()); } @ControllerConfiguration @@ -59,5 +61,4 @@ public UpdateControl reconcile(ConfigMap resource, Context context) { return UpdateControl.noUpdate(); } } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ReconcilerUtilsTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ReconcilerUtilsTest.java index 827bf7916a..0fc44bac44 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ReconcilerUtilsTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/ReconcilerUtilsTest.java @@ -122,7 +122,8 @@ void loadYamlAsBuilder() { ReconcilerUtils.loadYaml(DeploymentBuilder.class, getClass(), "deployment.yaml"); builder.accept(ContainerBuilder.class, c -> c.withImage("my-image")); - Deployment deployment = builder.editMetadata().withName("my-deployment").and().build(); + Deployment deployment = + builder.editMetadata().withName("my-deployment").and().build(); assertThat(deployment.getMetadata().getName()).isEqualTo("my-deployment"); } @@ -140,25 +141,30 @@ private Deployment createTestDeployment() { @Test void handleKubernetesExceptionShouldThrowMissingCRDExceptionWhenAppropriate() { var request = mock(HttpRequest.class); - when(request.uri()).thenReturn(URI - .create(RESOURCE_URI)); - assertThrows(MissingCRDException.class, () -> handleKubernetesClientException( - new KubernetesClientException( - "Failure executing: GET at: " + RESOURCE_URI + ". Message: Not Found.", - null, 404, null, request), - HasMetadata.getFullResourceName(Tomcat.class))); + when(request.uri()).thenReturn(URI.create(RESOURCE_URI)); + assertThrows( + MissingCRDException.class, + () -> handleKubernetesClientException( + new KubernetesClientException( + "Failure executing: GET at: " + RESOURCE_URI + ". Message: Not Found.", + null, + 404, + null, + request), + HasMetadata.getFullResourceName(Tomcat.class))); } - @Test void checksIfOwnerReferenceCanBeAdded() { - assertThrows(OperatorException.class, - () -> ReconcilerUtils.checkIfCanAddOwnerReference(namespacedResource(), - namespacedResourceFromOtherNamespace())); + assertThrows( + OperatorException.class, + () -> ReconcilerUtils.checkIfCanAddOwnerReference( + namespacedResource(), namespacedResourceFromOtherNamespace())); - assertThrows(OperatorException.class, - () -> ReconcilerUtils.checkIfCanAddOwnerReference(namespacedResource(), - clusterScopedResource())); + assertThrows( + OperatorException.class, + () -> ReconcilerUtils.checkIfCanAddOwnerReference( + namespacedResource(), clusterScopedResource())); assertDoesNotThrow(() -> { ReconcilerUtils.checkIfCanAddOwnerReference(clusterScopedResource(), clusterScopedResource()); @@ -168,33 +174,26 @@ void checksIfOwnerReferenceCanBeAdded() { private ClusterRole clusterScopedResource() { return new ClusterRoleBuilder() - .withMetadata(new ObjectMetaBuilder() - .build()) + .withMetadata(new ObjectMetaBuilder().build()) .build(); } private ConfigMap namespacedResource() { return new ConfigMapBuilder() - .withMetadata(new ObjectMetaBuilder() - .withNamespace("testns1") - .build()) + .withMetadata(new ObjectMetaBuilder().withNamespace("testns1").build()) .build(); } private ConfigMap namespacedResourceFromOtherNamespace() { return new ConfigMapBuilder() - .withMetadata(new ObjectMetaBuilder() - .withNamespace("testns2") - .build()) + .withMetadata(new ObjectMetaBuilder().withNamespace("testns2").build()) .build(); } @Group("tomcatoperator.io") @Version("v1") @ShortNames("tc") - private static class Tomcat extends CustomResource implements Namespaced { - - } + private static class Tomcat extends CustomResource implements Namespaced {} private static class TomcatSpec { private Integer replicas; diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/TestUtils.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/TestUtils.java index 3b2c5354f5..111e78fd44 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/TestUtils.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/TestUtils.java @@ -34,13 +34,12 @@ public static TestCustomResource testCustomResource1() { public static TestCustomResource testCustomResource(ResourceID id) { TestCustomResource resource = new TestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName(id.getName()) - .withResourceVersion("1") - .withGeneration(1L) - .withNamespace(id.getNamespace().orElse(null)) - .build()); + resource.setMetadata(new ObjectMetaBuilder() + .withName(id.getName()) + .withResourceVersion("1") + .withGeneration(1L) + .withNamespace(id.getNamespace().orElse(null)) + .build()); resource.getMetadata().setAnnotations(new HashMap<>()); resource.setSpec(new TestCustomResourceSpec()); resource.getSpec().setConfigMapName("test-config-map"); @@ -53,5 +52,4 @@ public static T markForDeletion(T customResource) { customResource.getMetadata().setDeletionTimestamp("2019-8-10"); return customResource; } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/DeleteControlTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/DeleteControlTest.java index 9907c0405e..66137ed790 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/DeleteControlTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/DeleteControlTest.java @@ -9,8 +9,7 @@ class DeleteControlTest { @Test void cannotReScheduleForDefaultDelete() { - Assertions.assertThrows(IllegalStateException.class, - () -> DeleteControl.defaultDelete().rescheduleAfter(1000L)); + Assertions.assertThrows( + IllegalStateException.class, () -> DeleteControl.defaultDelete().rescheduleAfter(1000L)); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverriderTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverriderTest.java index 0e2b8e9cc2..ae401acaa3 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverriderTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ConfigurationServiceOverriderTest.java @@ -62,25 +62,23 @@ public R clone(R object) { .withConcurrentReconciliationThreads(25) .withMetrics(new Metrics() {}) .withLeaderElectionConfiguration(new LeaderElectionConfiguration("newLease", "newLeaseNS")) - .withInformerStoppedHandler((informer, ex) -> { - }) + .withInformerStoppedHandler((informer, ex) -> {}) .withReconciliationTerminationTimeout(Duration.ofSeconds(30)) .build(); assertNotEquals(config.closeClientOnStop(), overridden.closeClientOnStop()); - assertNotEquals(config.checkCRDAndValidateLocalModel(), - overridden.checkCRDAndValidateLocalModel()); - assertNotEquals(config.concurrentReconciliationThreads(), - overridden.concurrentReconciliationThreads()); + assertNotEquals( + config.checkCRDAndValidateLocalModel(), overridden.checkCRDAndValidateLocalModel()); + assertNotEquals( + config.concurrentReconciliationThreads(), overridden.concurrentReconciliationThreads()); assertNotEquals(config.getExecutorService(), overridden.getExecutorService()); assertNotEquals(config.getWorkflowExecutorService(), overridden.getWorkflowExecutorService()); assertNotEquals(config.getMetrics(), overridden.getMetrics()); - assertNotEquals(config.getLeaderElectionConfiguration(), - overridden.getLeaderElectionConfiguration()); - assertNotEquals(config.getInformerStoppedHandler(), - overridden.getLeaderElectionConfiguration()); - assertNotEquals(config.reconciliationTerminationTimeout(), - overridden.reconciliationTerminationTimeout()); + assertNotEquals( + config.getLeaderElectionConfiguration(), overridden.getLeaderElectionConfiguration()); + assertNotEquals( + config.getInformerStoppedHandler(), overridden.getLeaderElectionConfiguration()); + assertNotEquals( + config.reconciliationTerminationTimeout(), overridden.reconciliationTerminationTimeout()); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java index 21382adbd5..421c2b2e9c 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/ControllerConfigurationOverriderTest.java @@ -39,8 +39,11 @@ class ControllerConfigurationOverriderTest { @SuppressWarnings("unchecked") private static Object extractDependentKubernetesResourceConfig( io.javaoperatorsdk.operator.api.config.ControllerConfiguration configuration, int index) { - final var spec = - configuration.getWorkflowSpec().orElseThrow().getDependentResourceSpecs().get(index); + final var spec = configuration + .getWorkflowSpec() + .orElseThrow() + .getDependentResourceSpecs() + .get(index); return configuration.getConfigurationFor(spec); } @@ -72,16 +75,15 @@ void overridingNSShouldPreserveUntouchedDependents() { // check that we still have the proper number of dependent configs dependentResources = configuration.getWorkflowSpec().orElseThrow().getDependentResourceSpecs(); assertEquals(2, dependentResources.size()); - final var resourceConfig = extractDependentKubernetesResourceConfig( - configuration, 1); + final var resourceConfig = extractDependentKubernetesResourceConfig(configuration, 1); assertEquals(stringConfig, resourceConfig); } @SuppressWarnings({"rawtypes"}) private KubernetesDependentResourceConfig extractFirstDependentKubernetesResourceConfig( io.javaoperatorsdk.operator.api.config.ControllerConfiguration configuration) { - return (KubernetesDependentResourceConfig) extractDependentKubernetesResourceConfig( - configuration, 0); + return (KubernetesDependentResourceConfig) + extractDependentKubernetesResourceConfig(configuration, 0); } private io.javaoperatorsdk.operator.api.config.ControllerConfiguration createConfiguration( @@ -147,8 +149,7 @@ void overridingNamespacesShouldWork() { void itemStorePreserved() { var configuration = createConfiguration(new WatchCurrentReconciler()); - configuration = ControllerConfigurationOverrider.override(configuration) - .build(); + configuration = ControllerConfigurationOverrider.override(configuration).build(); assertNotNull(configuration.getInformerConfig().getItemStore()); } @@ -161,22 +162,26 @@ void configuredDependentShouldNotChangeOnParentOverrideEvenWhenInitialConfigIsSa // override the parent NS to match the dependent's configuration = ControllerConfigurationOverrider.override(configuration) - .settingNamespace(OverriddenNSDependent.DEP_NS).build(); - assertEquals(Set.of(OverriddenNSDependent.DEP_NS), - configuration.getInformerConfig().getNamespaces()); + .settingNamespace(OverriddenNSDependent.DEP_NS) + .build(); + assertEquals( + Set.of(OverriddenNSDependent.DEP_NS), configuration.getInformerConfig().getNamespaces()); // check that the DependentResource inherits has its own configured NS - assertEquals(Set.of(OverriddenNSDependent.DEP_NS), + assertEquals( + Set.of(OverriddenNSDependent.DEP_NS), kubeDependentConfig.informerConfig().getNamespaces()); // override the parent's NS final var newNS = "bar"; - configuration = - ControllerConfigurationOverrider.override(configuration).settingNamespace(newNS).build(); + configuration = ControllerConfigurationOverrider.override(configuration) + .settingNamespace(newNS) + .build(); // check that dependent config is still using its own NS kubeDependentConfig = extractFirstDependentKubernetesResourceConfig(configuration); - assertEquals(Set.of(OverriddenNSDependent.DEP_NS), + assertEquals( + Set.of(OverriddenNSDependent.DEP_NS), kubeDependentConfig.informerConfig().getNamespaces()); } @@ -190,7 +195,6 @@ void dependentShouldWatchAllNamespacesIfParentDoesAsWell() { // check that the DependentResource inherits the controller's configuration if applicable var informerConfig = config.informerConfig(); assertTrue(inheritsNamespacesFromController(informerConfig.getNamespaces())); - } @SuppressWarnings("unchecked") @@ -202,19 +206,18 @@ void shouldBePossibleToForceDependentToWatchAllNamespaces() { // check that the DependentResource inherits the controller's configuration if applicable assertTrue( - InformerConfiguration - .allNamespacesWatched(config.informerConfig().getNamespaces())); + InformerConfiguration.allNamespacesWatched(config.informerConfig().getNamespaces())); // override the NS final var newNS = "bar"; - configuration = - ControllerConfigurationOverrider.override(configuration).settingNamespace(newNS).build(); + configuration = ControllerConfigurationOverrider.override(configuration) + .settingNamespace(newNS) + .build(); // check that dependent config is still configured to watch all NS config = extractFirstDependentKubernetesResourceConfig(configuration); assertTrue( - InformerConfiguration - .allNamespacesWatched(config.informerConfig().getNamespaces())); + InformerConfiguration.allNamespacesWatched(config.informerConfig().getNamespaces())); } @Test @@ -234,18 +237,17 @@ void alreadyOverriddenDependentNamespacesShouldNotBePropagated() { var config = extractFirstDependentKubernetesResourceConfig(configuration); // DependentResource has its own NS - assertEquals(Set.of(OverriddenNSDependent.DEP_NS), - config.informerConfig().getNamespaces()); + assertEquals(Set.of(OverriddenNSDependent.DEP_NS), config.informerConfig().getNamespaces()); // override the NS final var newNS = "bar"; - configuration = - ControllerConfigurationOverrider.override(configuration).settingNamespace(newNS).build(); + configuration = ControllerConfigurationOverrider.override(configuration) + .settingNamespace(newNS) + .build(); // check that dependent config is still using its own NS config = extractFirstDependentKubernetesResourceConfig(configuration); - assertEquals(Set.of(OverriddenNSDependent.DEP_NS), - config.informerConfig().getNamespaces()); + assertEquals(Set.of(OverriddenNSDependent.DEP_NS), config.informerConfig().getNamespaces()); } @Test @@ -261,7 +263,8 @@ void replaceNamedDependentResourceConfigShouldWork() { var dependentSpec = dependents.stream() .filter(dr -> dr.getName().equals(dependentResourceName)) - .findFirst().orElseThrow(); + .findFirst() + .orElseThrow(); assertEquals(ReadOnlyDependent.class, dependentSpec.getDependentResourceClass()); var maybeConfig = extractFirstDependentKubernetesResourceConfig(configuration); assertNotNull(maybeConfig); @@ -305,11 +308,9 @@ private static class MyItemStore extends BasicItemStore { @Override @@ -341,17 +342,18 @@ public UpdateControl reconcile(ConfigMap resource, Context private static class TestCondition implements Condition { @Override - public boolean isMet(DependentResource dependentResource, + public boolean isMet( + DependentResource dependentResource, ConfigMap primary, Context context) { return true; } } - @Workflow(dependents = @Dependent(type = ReadOnlyDependent.class, - readyPostcondition = TestCondition.class)) - @ControllerConfiguration( - informer = @Informer(namespaces = OneDepReconciler.CONFIGURED_NS)) + @Workflow( + dependents = + @Dependent(type = ReadOnlyDependent.class, readyPostcondition = TestCondition.class)) + @ControllerConfiguration(informer = @Informer(namespaces = OneDepReconciler.CONFIGURED_NS)) private static class OneDepReconciler implements Reconciler { private static final String CONFIGURED_NS = "foo"; @@ -370,10 +372,8 @@ public ReadOnlyDependent() { } } - @KubernetesDependent( - informer = @Informer(namespaces = Constants.WATCH_ALL_NAMESPACES)) - public static class WatchAllNSDependent - extends KubernetesDependentResource + @KubernetesDependent(informer = @Informer(namespaces = Constants.WATCH_ALL_NAMESPACES)) + public static class WatchAllNSDependent extends KubernetesDependentResource implements GarbageCollected { public WatchAllNSDependent() { @@ -406,10 +406,11 @@ public OverriddenNSDependent() { } } - @Workflow(dependents = { - @Dependent(type = NamedDependentReconciler.NamedDependentResource.class), - @Dependent(type = NamedDependentReconciler.ExternalDependentResource.class) - }) + @Workflow( + dependents = { + @Dependent(type = NamedDependentReconciler.NamedDependentResource.class), + @Dependent(type = NamedDependentReconciler.ExternalDependentResource.class) + }) @ControllerConfiguration public static class NamedDependentReconciler implements Reconciler { @@ -427,8 +428,10 @@ public NamedDependentResource() { } } - private static class ExternalDependentResource implements DependentResource, - ConfiguredDependentResource, GarbageCollected { + private static class ExternalDependentResource + implements DependentResource, + ConfiguredDependentResource, + GarbageCollected { private String config = "UNSET"; diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/InformerConfigurationTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/InformerConfigurationTest.java index 2857ab9335..b3b628725f 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/InformerConfigurationTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/InformerConfigurationTest.java @@ -15,12 +15,15 @@ class InformerConfigurationTest { @Test void allNamespacesWatched() { - assertThrows(IllegalArgumentException.class, - () -> InformerConfiguration.allNamespacesWatched(null)); - assertThrows(IllegalArgumentException.class, () -> InformerConfiguration.allNamespacesWatched( - Set.of(Constants.WATCH_CURRENT_NAMESPACE, Constants.WATCH_ALL_NAMESPACES, "foo"))); - assertThrows(IllegalArgumentException.class, () -> InformerConfiguration.allNamespacesWatched( - Collections.emptySet())); + assertThrows( + IllegalArgumentException.class, () -> InformerConfiguration.allNamespacesWatched(null)); + assertThrows( + IllegalArgumentException.class, + () -> InformerConfiguration.allNamespacesWatched( + Set.of(Constants.WATCH_CURRENT_NAMESPACE, Constants.WATCH_ALL_NAMESPACES, "foo"))); + assertThrows( + IllegalArgumentException.class, + () -> InformerConfiguration.allNamespacesWatched(Collections.emptySet())); assertFalse(InformerConfiguration.allNamespacesWatched(Set.of("foo", "bar"))); assertTrue(InformerConfiguration.allNamespacesWatched(Set.of(Constants.WATCH_ALL_NAMESPACES))); assertFalse(InformerConfiguration.allNamespacesWatched(Set.of("foo"))); @@ -30,12 +33,14 @@ void allNamespacesWatched() { @Test void currentNamespaceWatched() { - assertThrows(IllegalArgumentException.class, - () -> InformerConfiguration.currentNamespaceWatched(null)); - assertThrows(IllegalArgumentException.class, + assertThrows( + IllegalArgumentException.class, () -> InformerConfiguration.currentNamespaceWatched(null)); + assertThrows( + IllegalArgumentException.class, () -> InformerConfiguration.currentNamespaceWatched( Set.of(Constants.WATCH_CURRENT_NAMESPACE, Constants.WATCH_ALL_NAMESPACES, "foo"))); - assertThrows(IllegalArgumentException.class, + assertThrows( + IllegalArgumentException.class, () -> InformerConfiguration.currentNamespaceWatched(Collections.emptySet())); assertFalse(InformerConfiguration.currentNamespaceWatched(Set.of("foo", "bar"))); assertFalse( @@ -66,14 +71,20 @@ void shouldFollowControllerNamespacesByDefaultForInformerEventSource() { @Test void failIfNotValid() { assertThrows(IllegalArgumentException.class, () -> InformerConfiguration.failIfNotValid(null)); - assertThrows(IllegalArgumentException.class, + assertThrows( + IllegalArgumentException.class, () -> InformerConfiguration.failIfNotValid(Collections.emptySet())); - assertThrows(IllegalArgumentException.class, () -> InformerConfiguration.failIfNotValid( - Set.of(Constants.WATCH_CURRENT_NAMESPACE, Constants.WATCH_ALL_NAMESPACES, "foo"))); - assertThrows(IllegalArgumentException.class, () -> InformerConfiguration.failIfNotValid( - Set.of(Constants.WATCH_CURRENT_NAMESPACE, "foo"))); - assertThrows(IllegalArgumentException.class, () -> InformerConfiguration.failIfNotValid( - Set.of(Constants.WATCH_ALL_NAMESPACES, "foo"))); + assertThrows( + IllegalArgumentException.class, + () -> InformerConfiguration.failIfNotValid( + Set.of(Constants.WATCH_CURRENT_NAMESPACE, Constants.WATCH_ALL_NAMESPACES, "foo"))); + assertThrows( + IllegalArgumentException.class, + () -> + InformerConfiguration.failIfNotValid(Set.of(Constants.WATCH_CURRENT_NAMESPACE, "foo"))); + assertThrows( + IllegalArgumentException.class, + () -> InformerConfiguration.failIfNotValid(Set.of(Constants.WATCH_ALL_NAMESPACES, "foo"))); // should work InformerConfiguration.failIfNotValid(Set.of("foo", "bar")); diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/UtilsTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/UtilsTest.java index ec1223377c..7a200fe676 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/UtilsTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/UtilsTest.java @@ -87,23 +87,23 @@ void getsFirstTypeArgumentFromExtendedClass() { @Test void getsFirstTypeArgumentFromInterface() { - assertThat(Utils.getFirstTypeArgumentFromInterface(EmptyTestDependentResource.class, - DependentResource.class)) + assertThat(Utils.getFirstTypeArgumentFromInterface( + EmptyTestDependentResource.class, DependentResource.class)) .isEqualTo(Deployment.class); - assertThatIllegalArgumentException().isThrownBy( - () -> Utils.getFirstTypeArgumentFromInterface(TestKubernetesDependentResource.class, - DependentResource.class)); + assertThatIllegalArgumentException() + .isThrownBy(() -> Utils.getFirstTypeArgumentFromInterface( + TestKubernetesDependentResource.class, DependentResource.class)); } @Test void getsFirstTypeArgumentFromInterfaceFromParent() { - assertThat(Utils.getFirstTypeArgumentFromSuperClassOrInterface(ConcreteReconciler.class, - Reconciler.class)).isEqualTo(ConfigMap.class); + assertThat(Utils.getFirstTypeArgumentFromSuperClassOrInterface( + ConcreteReconciler.class, Reconciler.class)) + .isEqualTo(ConfigMap.class); } - public abstract static class AbstractReconciler

    implements Reconciler

    { - } + public abstract static class AbstractReconciler

    implements Reconciler

    {} public static class ConcreteReconciler extends AbstractReconciler { @Override diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/VersionTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/VersionTest.java index d902a75860..2c3134b6ad 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/VersionTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/VersionTest.java @@ -13,5 +13,4 @@ void versionShouldReturnTheSameResultFromMavenAndProperties() { assertEquals(versionFromProperties, versionFromMaven); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolverTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolverTest.java index 5cc5472798..cd12629618 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolverTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/config/dependent/DependentResourceConfigurationResolverTest.java @@ -31,19 +31,21 @@ class DependentResourceConfigurationResolverTest { // subclass to expose configFor method to this test class - private final static class TestConfigurationService extends BaseConfigurationService { + private static final class TestConfigurationService extends BaseConfigurationService { @Override - protected

    io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( - Reconciler

    reconciler) { + protected

    + io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( + Reconciler

    reconciler) { return super.configFor(reconciler); } } private final TestConfigurationService configurationService = new TestConfigurationService(); - private

    io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( - Reconciler

    reconciler) { + private

    + io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( + Reconciler

    reconciler) { // ensure that a new configuration is created each time return configurationService.configFor(reconciler); } @@ -55,7 +57,8 @@ private static Object extractDependentKubernetesResourceConfig( final var spec = configuration.getWorkflowSpec().orElseThrow().getDependentResourceSpecs().stream() .filter(s -> target.isAssignableFrom(s.getDependentResourceClass())) - .findFirst().orElseThrow(); + .findFirst() + .orElseThrow(); return configuration.getConfigurationFor(spec); } @@ -89,8 +92,8 @@ void getConverterShouldWork() { converter = DependentResourceConfigurationResolver.getConverter(ChildCustomAnnotatedDep.class); assertNotNull(converter); assertEquals(CustomConfigConverter.class, converter.getClass()); - assertEquals(DependentResourceConfigurationResolver.getConverter(CustomAnnotatedDep.class), - converter); + assertEquals( + DependentResourceConfigurationResolver.getConverter(CustomAnnotatedDep.class), converter); } @SuppressWarnings("rawtypes") @@ -99,13 +102,14 @@ void registerConverterShouldWork() { final var overriddenConverter = new ConfigurationConverter() { @Override - public Object configFrom(Annotation configAnnotation, DependentResourceSpec spec, + public Object configFrom( + Annotation configAnnotation, + DependentResourceSpec spec, io.javaoperatorsdk.operator.api.config.ControllerConfiguration parentConfiguration) { return null; } }; - DependentResourceConfigurationResolver.registerConverter(ServiceDep.class, - overriddenConverter); + DependentResourceConfigurationResolver.registerConverter(ServiceDep.class, overriddenConverter); configFor(new CustomAnnotationReconciler()); // non overridden dependents should use the default converter @@ -117,12 +121,13 @@ public Object configFrom(Annotation configAnnotation, DependentResourceSpec spec assertEquals(overriddenConverter, converter); } - @Workflow(dependents = { - @Dependent(type = CustomAnnotatedDep.class, name = DR_NAME), - @Dependent(type = ChildCustomAnnotatedDep.class), - @Dependent(type = ConfigMapDep.class), - @Dependent(type = ServiceDep.class) - }) + @Workflow( + dependents = { + @Dependent(type = CustomAnnotatedDep.class, name = DR_NAME), + @Dependent(type = ChildCustomAnnotatedDep.class), + @Dependent(type = ConfigMapDep.class), + @Dependent(type = ServiceDep.class) + }) @ControllerConfiguration static class CustomAnnotationReconciler implements Reconciler { @@ -152,10 +157,14 @@ public ServiceDep() { } @CustomAnnotation(value = CustomAnnotatedDep.PROVIDED_VALUE) - @Configured(by = CustomAnnotation.class, with = CustomConfig.class, + @Configured( + by = CustomAnnotation.class, + with = CustomConfig.class, converter = CustomConfigConverter.class) - private static class CustomAnnotatedDep implements DependentResource, - ConfiguredDependentResource, GarbageCollected { + private static class CustomAnnotatedDep + implements DependentResource, + ConfiguredDependentResource, + GarbageCollected { public static final int PROVIDED_VALUE = 42; private CustomConfig config; @@ -181,14 +190,10 @@ public Optional configuration() { } @Override - public void delete(ConfigMap primary, Context context) { - - } + public void delete(ConfigMap primary, Context context) {} } - private static class ChildCustomAnnotatedDep extends CustomAnnotatedDep { - - } + private static class ChildCustomAnnotatedDep extends CustomAnnotatedDep {} @Retention(RetentionPolicy.RUNTIME) private @interface CustomAnnotation { @@ -215,7 +220,8 @@ private static class CustomConfigConverter static final int CONVERTER_PROVIDED_DEFAULT = 7; @Override - public CustomConfig configFrom(CustomAnnotation configAnnotation, + public CustomConfig configFrom( + CustomAnnotation configAnnotation, DependentResourceSpec spec, io.javaoperatorsdk.operator.api.config.ControllerConfiguration parentConfiguration) { if (configAnnotation == null) { diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContextTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContextTest.java index 3d8fc9563e..296974c4cd 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContextTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/DefaultContextTest.java @@ -33,5 +33,4 @@ void getSecondaryResourceReturnsEmptyOptionalOnNonActivatedDRType() { assertThat(res).isEmpty(); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedDependentResourceContextTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedDependentResourceContextTest.java index 3ea53668fa..31e207418c 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedDependentResourceContextTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/api/reconciler/dependent/managed/DefaultManagedDependentResourceContextTest.java @@ -83,8 +83,9 @@ void getMandatory() { @Test void getMandatoryWhenEmpty() { assertThatThrownBy(() -> { - context.getMandatory("key", String.class); - }).isInstanceOf(IllegalStateException.class) + context.getMandatory("key", String.class); + }) + .isInstanceOf(IllegalStateException.class) .hasMessage( "Mandatory attribute (key: key, type: java.lang.String) is missing or not of the expected type"); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java index a81f524326..efc78cfeb2 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/ControllerTest.java @@ -53,15 +53,14 @@ void crdShouldNotBeCheckedForNativeResources() { void crdShouldNotBeCheckedForCustomResourcesIfDisabled() { final var client = MockKubernetesClient.client(TestCustomResource.class); ConfigurationService configurationService = - ConfigurationService.newOverriddenConfigurationService(new BaseConfigurationService(), - o -> o.checkingCRDAndValidateLocalModel(false)); + ConfigurationService.newOverriddenConfigurationService( + new BaseConfigurationService(), o -> o.checkingCRDAndValidateLocalModel(false)); final var configuration = MockControllerConfiguration.forResource(TestCustomResource.class, configurationService); final var controller = new Controller(reconciler, configuration, client); controller.start(); verify(client, never()).apiextensions(); - } @Test @@ -70,24 +69,26 @@ void usesFinalizerIfThereIfReconcilerImplementsCleaner() { final var configuration = MockControllerConfiguration.forResource(Secret.class); when(configuration.getConfigurationService()).thenReturn(new BaseConfigurationService()); - final var controller = new Controller(reconciler, configuration, - MockKubernetesClient.client(Secret.class)); + final var controller = new Controller( + reconciler, configuration, MockKubernetesClient.client(Secret.class)); assertThat(controller.useFinalizer()).isTrue(); } @ParameterizedTest @CsvSource({ - "true, true, true, false", - "true, true, false, true", - "false, true, true, true", - "false, true, false, true", - "true, false, true, false", + "true, true, true, false", + "true, true, false, true", + "false, true, true, true", + "false, true, false, true", + "true, false, true, false", }) - void callsCleanupOnWorkflowWhenHasCleanerAndReconcilerIsNotCleaner(boolean reconcilerIsCleaner, + void callsCleanupOnWorkflowWhenHasCleanerAndReconcilerIsNotCleaner( + boolean reconcilerIsCleaner, boolean workflowIsCleaner, boolean isExplicitWorkflowInvocation, - boolean workflowCleanerExecuted) throws Exception { + boolean workflowCleanerExecuted) + throws Exception { Reconciler reconciler; if (reconcilerIsCleaner) { @@ -116,8 +117,8 @@ void callsCleanupOnWorkflowWhenHasCleanerAndReconcilerIsNotCleaner(boolean recon var managedWorkflowMock = workflow(workflowIsCleaner); when(mockManagedWorkflow.resolve(any(), any())).thenReturn(managedWorkflowMock); - final var controller = new Controller(reconciler, configuration, - MockKubernetesClient.client(Secret.class)); + final var controller = new Controller( + reconciler, configuration, MockKubernetesClient.client(Secret.class)); controller.cleanup(new Secret(), new DefaultContext<>(null, controller, new Secret())); diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/GroupVersionKindTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/GroupVersionKindTest.java index b7aeaae670..149629a3fd 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/GroupVersionKindTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/GroupVersionKindTest.java @@ -29,15 +29,14 @@ void parseGVK() { assertThat(gvk.getVersion()).isEqualTo("v1"); assertThat(gvk.getKind()).isEqualTo("Deployment"); - gvk = GroupVersionKind.fromString("v1/ConfigMap"); assertThat(gvk.getGroup()).isNull(); assertThat(gvk.getVersion()).isEqualTo("v1"); assertThat(gvk.getKind()).isEqualTo("ConfigMap"); assertThrows(IllegalArgumentException.class, () -> GroupVersionKind.fromString("v1#ConfigMap")); - assertThrows(IllegalArgumentException.class, - () -> GroupVersionKind.fromString("api/beta/v1/ConfigMap")); + assertThrows( + IllegalArgumentException.class, () -> GroupVersionKind.fromString("api/beta/v1/ConfigMap")); } @Test @@ -71,8 +70,8 @@ void pluralShouldBeEmptyIfNotProvided() { @Test void pluralShouldOverrideDefaultComputedVersionIfProvided() { - var gvk = GroupVersionKindPlural.gvkWithPlural(new GroupVersionKind("josdk.io", "v1", "MyKind"), - "MyPlural"); + var gvk = GroupVersionKindPlural.gvkWithPlural( + new GroupVersionKind("josdk.io", "v1", "MyKind"), "MyPlural"); assertThat(gvk.getPlural()).hasValue("MyPlural"); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResourceTest.java index 330f5b85b7..939d046e5d 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/AbstractDependentResourceTest.java @@ -21,9 +21,9 @@ void throwsExceptionIfDesiredIsNullOnCreate() { testDependentResource.setSecondary(null); testDependentResource.setDesired(null); - assertThrows(DependentResourceException.class, + assertThrows( + DependentResourceException.class, () -> testDependentResource.reconcile(new TestCustomResource(), null)); - } @Test @@ -32,7 +32,8 @@ void throwsExceptionIfDesiredIsNullOnUpdate() { testDependentResource.setSecondary(configMap()); testDependentResource.setDesired(null); - assertThrows(DependentResourceException.class, + assertThrows( + DependentResourceException.class, () -> testDependentResource.reconcile(new TestCustomResource(), null)); } @@ -42,7 +43,8 @@ void throwsExceptionIfCreateReturnsNull() { testDependentResource.setSecondary(null); testDependentResource.setDesired(configMap()); - assertThrows(DependentResourceException.class, + assertThrows( + DependentResourceException.class, () -> testDependentResource.reconcile(new TestCustomResource(), null)); } @@ -52,16 +54,15 @@ void throwsExceptionIfUpdateReturnsNull() { testDependentResource.setSecondary(configMap()); testDependentResource.setDesired(configMap()); - assertThrows(DependentResourceException.class, + assertThrows( + DependentResourceException.class, () -> testDependentResource.reconcile(new TestCustomResource(), null)); } private ConfigMap configMap() { ConfigMap configMap = new ConfigMap(); - configMap.setMetadata(new ObjectMetaBuilder() - .withName("test") - .withNamespace("default") - .build()); + configMap.setMetadata( + new ObjectMetaBuilder().withName("test").withNamespace("default").build()); return configMap; } @@ -78,17 +79,20 @@ public Class resourceType() { } @Override - public Optional getSecondaryResource(TestCustomResource primary, - Context context) { + public Optional getSecondaryResource( + TestCustomResource primary, Context context) { return Optional.ofNullable(secondary); } @Override - protected void onCreated(TestCustomResource primary, ConfigMap created, - Context context) {} + protected void onCreated( + TestCustomResource primary, ConfigMap created, Context context) {} @Override - protected void onUpdated(TestCustomResource primary, ConfigMap updated, ConfigMap actual, + protected void onUpdated( + TestCustomResource primary, + ConfigMap updated, + ConfigMap actual, Context context) {} @Override @@ -115,21 +119,24 @@ public TestDependentResource setDesired(ConfigMap desired) { } @Override - public ConfigMap create(ConfigMap desired, TestCustomResource primary, - Context context) { + public ConfigMap create( + ConfigMap desired, TestCustomResource primary, Context context) { return null; } @Override - public ConfigMap update(ConfigMap actual, ConfigMap desired, TestCustomResource primary, + public ConfigMap update( + ConfigMap actual, + ConfigMap desired, + TestCustomResource primary, Context context) { return null; } @Override @SuppressWarnings("unchecked") - public Matcher.Result match(ConfigMap actualResource, TestCustomResource primary, - Context context) { + public Matcher.Result match( + ConfigMap actualResource, TestCustomResource primary, Context context) { var result = mock(Matcher.Result.class); when(result.matched()).thenReturn(false); return result; diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/EmptyTestDependentResource.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/EmptyTestDependentResource.java index 25a849e3ab..9d88f90a0f 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/EmptyTestDependentResource.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/EmptyTestDependentResource.java @@ -12,8 +12,8 @@ public class EmptyTestDependentResource private String name; @Override - public ReconcileResult reconcile(TestCustomResource primary, - Context context) { + public ReconcileResult reconcile( + TestCustomResource primary, Context context) { return null; } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java index 2663657157..ff3eca9082 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericKubernetesResourceMatcherTest.java @@ -28,7 +28,6 @@ class GenericKubernetesResourceMatcherTest { Deployment desired = createDeployment(); TestDependentResource dependentResource = new TestDependentResource(desired); - @BeforeAll static void setUp() { final var client = MockKubernetesClient.client(HasMetadata.class); @@ -37,7 +36,8 @@ static void setUp() { @Test void matchesTrivialCases() { - assertThat(GenericKubernetesResourceMatcher.match(desired, actual, context).matched()).isTrue(); + assertThat(GenericKubernetesResourceMatcher.match(desired, actual, context).matched()) + .isTrue(); assertThat(GenericKubernetesResourceMatcher.match(desired, actual, context).computedDesired()) .isPresent(); assertThat(GenericKubernetesResourceMatcher.match(desired, actual, context).computedDesired()) @@ -55,8 +55,7 @@ void matchesAdditiveOnlyChanges() { @Test void matchesWithStrongSpecEquality() { actual.getSpec().getTemplate().getMetadata().getLabels().put("new-key", "val"); - assertThat(match(desired, actual, true, true, context) - .matched()) + assertThat(match(desired, actual, true, true, context).matched()) .withFailMessage("Adding values should fail matching when strong equality is required") .isFalse(); } @@ -64,9 +63,9 @@ void matchesWithStrongSpecEquality() { @Test void doesNotMatchRemovedValues() { actual = createDeployment(); - assertThat(GenericKubernetesResourceMatcher - .match(dependentResource.desired(createPrimary("removed"), null), actual, context) - .matched()) + assertThat(GenericKubernetesResourceMatcher.match( + dependentResource.desired(createPrimary("removed"), null), actual, context) + .matched()) .withFailMessage("Removing values in metadata should lead to a mismatch") .isFalse(); } @@ -103,7 +102,8 @@ void doesNotMatchChangedValuesWhenNoIgnoredPathsAreProvided() { void doesNotAttemptToMatchIgnoredPaths() { actual = createDeployment(); actual.getSpec().setReplicas(2); - assertThat(match(dependentResource, actual, null, context, false, "/spec/replicas").matched()) + assertThat(match(dependentResource, actual, null, context, false, "/spec/replicas") + .matched()) .withFailMessage("Should not have compared ignored paths") .isTrue(); } @@ -112,7 +112,8 @@ void doesNotAttemptToMatchIgnoredPaths() { void ignoresWholeSubPath() { actual = createDeployment(); actual.getSpec().getTemplate().getMetadata().getLabels().put("additional-key", "val"); - assertThat(match(dependentResource, actual, null, context, false, "/spec/template").matched()) + assertThat(match(dependentResource, actual, null, context, false, "/spec/template") + .matched()) .withFailMessage("Should match when only changes impact ignored sub-paths") .isTrue(); } @@ -136,7 +137,6 @@ void matchesMetadata() { .withFailMessage( "Should match when strong equality is not considered and only additive changes are made") .isTrue(); - } @Test @@ -149,7 +149,8 @@ void checkServiceAccount() { .build(); assertThat(GenericKubernetesResourceMatcher.match(desired, actual, false, false, context) - .matched()).isTrue(); + .matched()) + .isTrue(); } @Test @@ -158,17 +159,14 @@ void matchConfigMap() { var actual = createConfigMap(); actual.getData().put("key2", "val2"); - var match = GenericKubernetesResourceMatcher.match(desired, actual, - true, false, context); + var match = GenericKubernetesResourceMatcher.match(desired, actual, true, false, context); assertThat(match.matched()).isTrue(); } ConfigMap createConfigMap() { return new ConfigMapBuilder() - .withMetadata(new ObjectMetaBuilder() - .withName("tes1") - .withNamespace("default") - .build()) + .withMetadata( + new ObjectMetaBuilder().withName("tes1").withNamespace("default").build()) .withData(Map.of("key1", "val1")) .build(); } @@ -196,7 +194,9 @@ public ServiceAccountDR() { @Override protected ServiceAccount desired(HasMetadata primary, Context context) { return new ServiceAccountBuilder() - .withNewMetadata().withName("foo").endMetadata() + .withNewMetadata() + .withName("foo") + .endMetadata() .withAutomountServiceAccountToken() .addNewImagePullSecret("imagePullSecret1") .addNewImagePullSecret("imagePullSecret2") diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdaterTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdaterTest.java index 313520b89e..5704b9389e 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdaterTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/GenericResourceUpdaterTest.java @@ -55,8 +55,10 @@ void preservesValues() { @Test void checkNamespaces() { - var desired = new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build(); - var actual = new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build(); + var desired = + new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build(); + var actual = + new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build(); actual.getMetadata().setLabels(new HashMap<>()); actual.getMetadata().getLabels().put("additionalActualKey", "value"); actual.getMetadata().setResourceVersion("1234"); @@ -72,7 +74,8 @@ void checkNamespaces() { assertThat(result.getMetadata().getResourceVersion()).isEqualTo("1234"); assertThat(result.getSpec().getFinalizers()).containsExactly("halkyon.io/finalizer"); - desired = new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build(); + desired = + new NamespaceBuilder().withNewMetadata().withName("foo").endMetadata().build(); result = GenericResourceUpdater.updateResource(actual, desired, context); assertThat(result.getMetadata().getLabels().get("additionalActualKey")).isEqualTo("value"); @@ -82,13 +85,13 @@ void checkNamespaces() { @Test void checkSecret() { - var desired = - new SecretBuilder() - .withMetadata(new ObjectMeta()) - .withImmutable().withType("Opaque").addToData("foo", "bar").build(); - var actual = new SecretBuilder() + var desired = new SecretBuilder() .withMetadata(new ObjectMeta()) + .withImmutable() + .withType("Opaque") + .addToData("foo", "bar") .build(); + var actual = new SecretBuilder().withMetadata(new ObjectMeta()).build(); final var secret = GenericResourceUpdater.updateResource(actual, desired, context); assertThat(secret.getImmutable()).isTrue(); @@ -103,7 +106,8 @@ void checkServiceAccount() { .build(); var actual = new ServiceAccountBuilder() .withMetadata(new ObjectMetaBuilder().addToLabels("a", "label").build()) - .withImagePullSecrets(new LocalObjectReferenceBuilder().withName("secret").build()) + .withImagePullSecrets( + new LocalObjectReferenceBuilder().withName("secret").build()) .build(); final var serviceAccount = GenericResourceUpdater.updateResource(actual, desired, context); @@ -116,5 +120,4 @@ Deployment createDeployment() { return ReconcilerUtils.loadYaml( Deployment.class, GenericResourceUpdaterTest.class, "nginx-deployment.yaml"); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizerTest.java index b1ed6f0080..0014675648 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizerTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/ResourceRequirementsSanitizerTest.java @@ -44,7 +44,8 @@ void testSanitizeResourceRequirements_whenTemplateIsNull_doNothing() { @Test void testSanitizeResourceRequirements_whenTemplateSpecIsNull_doNothing() { final var template = new PodTemplateSpecBuilder().withSpec(null).build(); - final var templateWithSpec = new PodTemplateSpecBuilder().withNewSpec().endSpec().build(); + final var templateWithSpec = + new PodTemplateSpecBuilder().withNewSpec().endSpec().build(); sanitizeResourceRequirements(actualMap, template, templateWithSpec); sanitizeResourceRequirements(actualMap, templateWithSpec, template); @@ -53,13 +54,23 @@ void testSanitizeResourceRequirements_whenTemplateSpecIsNull_doNothing() { @Test void testSanitizeResourceRequirements_whenContainerSizeMismatch_doNothing() { - final var template = new PodTemplateSpecBuilder().withNewSpec() - .addNewContainer().withName("test").endContainer() - .endSpec().build(); - final var templateWithTwoContainers = new PodTemplateSpecBuilder().withNewSpec() - .addNewContainer().withName("test").endContainer() - .addNewContainer().withName("test-new").endContainer() - .endSpec().build(); + final var template = new PodTemplateSpecBuilder() + .withNewSpec() + .addNewContainer() + .withName("test") + .endContainer() + .endSpec() + .build(); + final var templateWithTwoContainers = new PodTemplateSpecBuilder() + .withNewSpec() + .addNewContainer() + .withName("test") + .endContainer() + .addNewContainer() + .withName("test-new") + .endContainer() + .endSpec() + .build(); sanitizeResourceRequirements(actualMap, template, templateWithTwoContainers); sanitizeResourceRequirements(actualMap, templateWithTwoContainers, template); @@ -68,12 +79,20 @@ void testSanitizeResourceRequirements_whenContainerSizeMismatch_doNothing() { @Test void testSanitizeResourceRequirements_whenContainerNameMismatch_doNothing() { - final var template = new PodTemplateSpecBuilder().withNewSpec() - .addNewContainer().withName("test").endContainer() - .endSpec().build(); - final var templateWithNewContainerName = new PodTemplateSpecBuilder().withNewSpec() - .addNewContainer().withName("test-new").endContainer() - .endSpec().build(); + final var template = new PodTemplateSpecBuilder() + .withNewSpec() + .addNewContainer() + .withName("test") + .endContainer() + .endSpec() + .build(); + final var templateWithNewContainerName = new PodTemplateSpecBuilder() + .withNewSpec() + .addNewContainer() + .withName("test-new") + .endContainer() + .endSpec() + .build(); sanitizeResourceRequirements(actualMap, template, templateWithNewContainerName); sanitizeResourceRequirements(actualMap, templateWithNewContainerName, template); @@ -82,12 +101,22 @@ void testSanitizeResourceRequirements_whenContainerNameMismatch_doNothing() { @Test void testSanitizeResourceRequirements_whenResourceIsNull_doNothing() { - final var template = new PodTemplateSpecBuilder().withNewSpec() - .addNewContainer().withName("test").endContainer() - .endSpec().build(); - final var templateWithResource = new PodTemplateSpecBuilder().withNewSpec() - .addNewContainer().withName("test").withNewResources().endResources().endContainer() - .endSpec().build(); + final var template = new PodTemplateSpecBuilder() + .withNewSpec() + .addNewContainer() + .withName("test") + .endContainer() + .endSpec() + .build(); + final var templateWithResource = new PodTemplateSpecBuilder() + .withNewSpec() + .addNewContainer() + .withName("test") + .withNewResources() + .endResources() + .endContainer() + .endSpec() + .build(); sanitizeResourceRequirements(actualMap, template, templateWithResource); sanitizeResourceRequirements(actualMap, templateWithResource, template); @@ -96,50 +125,44 @@ void testSanitizeResourceRequirements_whenResourceIsNull_doNothing() { @Test void testSanitizeResourceRequirements_whenResourceSizeMismatch_doNothing() { - final var actualMap = sanitizeRequestsAndLimits(ContainerType.CONTAINER, + final var actualMap = sanitizeRequestsAndLimits( + ContainerType.CONTAINER, Map.of("cpu", new Quantity("2")), Map.of(), Map.of("cpu", new Quantity("4")), Map.of("cpu", new Quantity("4"), "memory", new Quantity("4Gi"))); - assertContainerResources(actualMap, "requests") - .hasSize(1) - .containsEntry("cpu", "2"); - assertContainerResources(actualMap, "limits") - .hasSize(1) - .containsEntry("cpu", "4"); + assertContainerResources(actualMap, "requests").hasSize(1).containsEntry("cpu", "2"); + assertContainerResources(actualMap, "limits").hasSize(1).containsEntry("cpu", "4"); } @Test void testSanitizeResourceRequirements_whenResourceKeyMismatch_doNothing() { - final var actualMap = sanitizeRequestsAndLimits(ContainerType.INIT_CONTAINER, + final var actualMap = sanitizeRequestsAndLimits( + ContainerType.INIT_CONTAINER, Map.of("cpu", new Quantity("2")), Map.of("memory", new Quantity("4Gi")), Map.of(), Map.of()); - assertInitContainerResources(actualMap, "requests") - .hasSize(1) - .containsEntry("cpu", "2"); + assertInitContainerResources(actualMap, "requests").hasSize(1).containsEntry("cpu", "2"); assertInitContainerResources(actualMap, "limits").isNull(); } @Test void testSanitizeResourceRequirements_whenResourcesHaveSameAmountAndFormat_doNothing() { - final var actualMap = sanitizeRequestsAndLimits(ContainerType.CONTAINER, + final var actualMap = sanitizeRequestsAndLimits( + ContainerType.CONTAINER, Map.of("memory", new Quantity("4Gi")), Map.of("memory", new Quantity("4Gi")), Map.of("cpu", new Quantity("2")), Map.of("cpu", new Quantity("2"))); - assertContainerResources(actualMap, "requests") - .hasSize(1) - .containsEntry("memory", "4Gi"); - assertContainerResources(actualMap, "limits") - .hasSize(1) - .containsEntry("cpu", "2"); + assertContainerResources(actualMap, "requests").hasSize(1).containsEntry("memory", "4Gi"); + assertContainerResources(actualMap, "limits").hasSize(1).containsEntry("cpu", "2"); } @Test void testSanitizeResourceRequirements_whenResourcesHaveNumericalAmountMismatch_doNothing() { - final var actualMap = sanitizeRequestsAndLimits(ContainerType.INIT_CONTAINER, + final var actualMap = sanitizeRequestsAndLimits( + ContainerType.INIT_CONTAINER, Map.of("cpu", new Quantity("2"), "memory", new Quantity("4Gi")), Map.of("cpu", new Quantity("4"), "memory", new Quantity("4Ti")), Map.of("cpu", new Quantity("2")), @@ -148,14 +171,14 @@ void testSanitizeResourceRequirements_whenResourcesHaveNumericalAmountMismatch_d .hasSize(2) .containsEntry("cpu", "2") .containsEntry("memory", "4Gi"); - assertInitContainerResources(actualMap, "limits") - .hasSize(1) - .containsEntry("cpu", "2"); + assertInitContainerResources(actualMap, "limits").hasSize(1).containsEntry("cpu", "2"); } @Test - void testSanitizeResourceRequirements_whenResourcesHaveAmountAndFormatMismatchWithSameNumericalAmount_thenSanitizeActualMap() { - final var actualMap = sanitizeRequestsAndLimits(ContainerType.CONTAINER, + void + testSanitizeResourceRequirements_whenResourcesHaveAmountAndFormatMismatchWithSameNumericalAmount_thenSanitizeActualMap() { + final var actualMap = sanitizeRequestsAndLimits( + ContainerType.CONTAINER, Map.of("cpu", new Quantity("2"), "memory", new Quantity("4Gi")), Map.of("cpu", new Quantity("2000m"), "memory", new Quantity("4096Mi")), Map.of("cpu", new Quantity("4")), @@ -164,33 +187,37 @@ void testSanitizeResourceRequirements_whenResourcesHaveAmountAndFormatMismatchWi .hasSize(2) .containsEntry("cpu", "2000m") .containsEntry("memory", "4096Mi"); - assertContainerResources(actualMap, "limits") - .hasSize(1) - .containsEntry("cpu", "4000m"); + assertContainerResources(actualMap, "limits").hasSize(1).containsEntry("cpu", "4000m"); } @SuppressWarnings("unchecked") - private Map sanitizeRequestsAndLimits(final ContainerType type, - final Map actualRequests, final Map desiredRequests, - final Map actualLimits, final Map desiredLimits) { + private Map sanitizeRequestsAndLimits( + final ContainerType type, + final Map actualRequests, + final Map desiredRequests, + final Map actualLimits, + final Map desiredLimits) { final var actual = createStatefulSet(type, actualRequests, actualLimits); final var desired = createStatefulSet(type, desiredRequests, desiredLimits); final var actualMap = serialization.convertValue(actual, Map.class); - sanitizeResourceRequirements(actualMap, - actual.getSpec().getTemplate(), - desired.getSpec().getTemplate()); + sanitizeResourceRequirements( + actualMap, actual.getSpec().getTemplate(), desired.getSpec().getTemplate()); return actualMap; } private enum ContainerType { - CONTAINER, INIT_CONTAINER, + CONTAINER, + INIT_CONTAINER, } - private static StatefulSet createStatefulSet(final ContainerType type, - final Map requests, final Map limits) { + private static StatefulSet createStatefulSet( + final ContainerType type, + final Map requests, + final Map limits) { var builder = new StatefulSetBuilder().withNewSpec().withNewTemplate().withNewSpec(); if (type == ContainerType.CONTAINER) { - builder = builder.addNewContainer() + builder = builder + .addNewContainer() .withName("test") .withNewResources() .withRequests(requests) @@ -198,7 +225,8 @@ private static StatefulSet createStatefulSet(final ContainerType type, .endResources() .endContainer(); } else { - builder = builder.addNewInitContainer() + builder = builder + .addNewInitContainer() .withName("test") .withNewResources() .withRequests(requests) @@ -211,13 +239,13 @@ private static StatefulSet createStatefulSet(final ContainerType type, private static MapAssert assertContainerResources( final Map actualMap, final String resourceName) { - return assertThat(GenericKubernetesResource.>get(actualMap, - "spec", "template", "spec", "containers", 0, "resources", resourceName)); + return assertThat(GenericKubernetesResource.>get( + actualMap, "spec", "template", "spec", "containers", 0, "resources", resourceName)); } private static MapAssert assertInitContainerResources( final Map actualMap, final String resourceName) { - return assertThat(GenericKubernetesResource.>get(actualMap, - "spec", "template", "spec", "initContainers", 0, "resources", resourceName)); + return assertThat(GenericKubernetesResource.>get( + actualMap, "spec", "template", "spec", "initContainers", 0, "resources", resourceName)); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcherTest.java index f30b6949fa..530c2c947b 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcherTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/kubernetes/SSABasedGenericKubernetesResourceMatcherTest.java @@ -58,68 +58,67 @@ void checksIfAddsNotAddedByController() { // managed but not listed @Test void emptyListElementMatchesAllFields() { - var desiredConfigMap = loadResource("configmap.empty-owner-reference-desired.yaml", - ConfigMap.class); - var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", - ConfigMap.class); + var desiredConfigMap = + loadResource("configmap.empty-owner-reference-desired.yaml", ConfigMap.class); + var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", ConfigMap.class); - assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)).isTrue(); + assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)) + .isTrue(); } // the whole "rules:" part is just implicitly managed @Test void wholeComplexFieldManaged() { - var desiredConfigMap = loadResource("sample-whole-complex-part-managed-desired.yaml", - ConfigMap.class); - var actualConfigMap = loadResource("sample-whole-complex-part-managed.yaml", - ConfigMap.class); + var desiredConfigMap = + loadResource("sample-whole-complex-part-managed-desired.yaml", ConfigMap.class); + var actualConfigMap = loadResource("sample-whole-complex-part-managed.yaml", ConfigMap.class); - assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)).isTrue(); + assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)) + .isTrue(); } @Test void multiItemList() { - var desiredConfigMap = loadResource("multi-container-pod-desired.yaml", - ConfigMap.class); - var actualConfigMap = loadResource("multi-container-pod.yaml", - ConfigMap.class); + var desiredConfigMap = loadResource("multi-container-pod-desired.yaml", ConfigMap.class); + var actualConfigMap = loadResource("multi-container-pod.yaml", ConfigMap.class); - assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)).isTrue(); + assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)) + .isTrue(); } @Test void changeValueInDesiredMakesMatchFail() { - var desiredConfigMap = loadResource("configmap.empty-owner-reference-desired.yaml", - ConfigMap.class); + var desiredConfigMap = + loadResource("configmap.empty-owner-reference-desired.yaml", ConfigMap.class); desiredConfigMap.getData().put("key1", "different value"); - var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", - ConfigMap.class); + var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", ConfigMap.class); - assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)).isFalse(); + assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)) + .isFalse(); } @Test void changeValueActualMakesMatchFail() { - var desiredConfigMap = loadResource("configmap.empty-owner-reference-desired.yaml", - ConfigMap.class); + var desiredConfigMap = + loadResource("configmap.empty-owner-reference-desired.yaml", ConfigMap.class); - var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", - ConfigMap.class); + var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", ConfigMap.class); actualConfigMap.getData().put("key1", "different value"); - assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)).isFalse(); + assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)) + .isFalse(); } @Test void addedLabelInDesiredMakesMatchFail() { - var desiredConfigMap = loadResource("configmap.empty-owner-reference-desired.yaml", - ConfigMap.class); + var desiredConfigMap = + loadResource("configmap.empty-owner-reference-desired.yaml", ConfigMap.class); desiredConfigMap.getMetadata().setLabels(Map.of("newlabel", "val")); - var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", - ConfigMap.class); + var actualConfigMap = loadResource("configmap.empty-owner-reference.yaml", ConfigMap.class); - assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)).isFalse(); + assertThat(matcher.matches(actualConfigMap, desiredConfigMap, mockedContext)) + .isFalse(); } @Test @@ -165,89 +164,94 @@ void testSortMapWithNestedMap() { } @ParameterizedTest - @ValueSource(strings = {"sample-sts-volumeclaimtemplates-desired.yaml", - "sample-sts-volumeclaimtemplates-desired-with-status.yaml", - "sample-sts-volumeclaimtemplates-desired-with-volumemode.yaml"}) + @ValueSource( + strings = { + "sample-sts-volumeclaimtemplates-desired.yaml", + "sample-sts-volumeclaimtemplates-desired-with-status.yaml", + "sample-sts-volumeclaimtemplates-desired-with-volumemode.yaml" + }) void testSanitizeState_statefulSetWithVolumeClaims(String desiredResourceFileName) { var desiredStatefulSet = loadResource(desiredResourceFileName, StatefulSet.class); - var actualStatefulSet = loadResource("sample-sts-volumeclaimtemplates.yaml", - StatefulSet.class); + var actualStatefulSet = loadResource("sample-sts-volumeclaimtemplates.yaml", StatefulSet.class); - assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)).isTrue(); + assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)) + .isTrue(); } @ParameterizedTest - @ValueSource(strings = {"sample-sts-volumeclaimtemplates-desired-add.yaml", - "sample-sts-volumeclaimtemplates-desired-update.yaml", - "sample-sts-volumeclaimtemplates-desired-with-status-mismatch.yaml", - "sample-sts-volumeclaimtemplates-desired-with-volumemode-mismatch.yaml"}) + @ValueSource( + strings = { + "sample-sts-volumeclaimtemplates-desired-add.yaml", + "sample-sts-volumeclaimtemplates-desired-update.yaml", + "sample-sts-volumeclaimtemplates-desired-with-status-mismatch.yaml", + "sample-sts-volumeclaimtemplates-desired-with-volumemode-mismatch.yaml" + }) void testSanitizeState_statefulSetWithVolumeClaims_withMismatch(String desiredResourceFileName) { var desiredStatefulSet = loadResource(desiredResourceFileName, StatefulSet.class); - var actualStatefulSet = loadResource("sample-sts-volumeclaimtemplates.yaml", - StatefulSet.class); + var actualStatefulSet = loadResource("sample-sts-volumeclaimtemplates.yaml", StatefulSet.class); - assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)).isFalse(); + assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)) + .isFalse(); } @Test void testSanitizeState_statefulSetWithResources() { var desiredStatefulSet = loadResource("sample-sts-resources-desired.yaml", StatefulSet.class); - var actualStatefulSet = loadResource("sample-sts-resources.yaml", - StatefulSet.class); + var actualStatefulSet = loadResource("sample-sts-resources.yaml", StatefulSet.class); - assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)).isTrue(); + assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)) + .isTrue(); } @Test void testSanitizeState_statefulSetWithResources_withMismatch() { var desiredStatefulSet = loadResource("sample-sts-resources-desired-update.yaml", StatefulSet.class); - var actualStatefulSet = loadResource("sample-sts-resources.yaml", - StatefulSet.class); + var actualStatefulSet = loadResource("sample-sts-resources.yaml", StatefulSet.class); - assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)).isFalse(); + assertThat(matcher.matches(actualStatefulSet, desiredStatefulSet, mockedContext)) + .isFalse(); } @Test void testSanitizeState_replicaSetWithResources() { var desiredReplicaSet = loadResource("sample-rs-resources-desired.yaml", ReplicaSet.class); - var actualReplicaSet = loadResource("sample-rs-resources.yaml", - ReplicaSet.class); + var actualReplicaSet = loadResource("sample-rs-resources.yaml", ReplicaSet.class); - assertThat(matcher.matches(actualReplicaSet, desiredReplicaSet, mockedContext)).isTrue(); + assertThat(matcher.matches(actualReplicaSet, desiredReplicaSet, mockedContext)) + .isTrue(); } @Test void testSanitizeState_replicaSetWithResources_withMismatch() { var desiredReplicaSet = loadResource("sample-rs-resources-desired-update.yaml", ReplicaSet.class); - var actualReplicaSet = loadResource("sample-rs-resources.yaml", - ReplicaSet.class); + var actualReplicaSet = loadResource("sample-rs-resources.yaml", ReplicaSet.class); - assertThat(matcher.matches(actualReplicaSet, desiredReplicaSet, mockedContext)).isFalse(); + assertThat(matcher.matches(actualReplicaSet, desiredReplicaSet, mockedContext)) + .isFalse(); } @Test void testSanitizeState_daemonSetWithResources() { var desiredDaemonSet = loadResource("sample-ds-resources-desired.yaml", DaemonSet.class); - var actualDaemonSet = loadResource("sample-ds-resources.yaml", - DaemonSet.class); + var actualDaemonSet = loadResource("sample-ds-resources.yaml", DaemonSet.class); - assertThat(matcher.matches(actualDaemonSet, desiredDaemonSet, mockedContext)).isTrue(); + assertThat(matcher.matches(actualDaemonSet, desiredDaemonSet, mockedContext)) + .isTrue(); } @Test void testSanitizeState_daemonSetWithResources_withMismatch() { - var desiredDaemonSet = - loadResource("sample-ds-resources-desired-update.yaml", DaemonSet.class); - var actualDaemonSet = loadResource("sample-ds-resources.yaml", - DaemonSet.class); + var desiredDaemonSet = loadResource("sample-ds-resources-desired-update.yaml", DaemonSet.class); + var actualDaemonSet = loadResource("sample-ds-resources.yaml", DaemonSet.class); - assertThat(matcher.matches(actualDaemonSet, desiredDaemonSet, mockedContext)).isFalse(); + assertThat(matcher.matches(actualDaemonSet, desiredDaemonSet, mockedContext)) + .isFalse(); } private static R loadResource(String fileName, Class clazz) { - return ReconcilerUtils.loadYaml(clazz, SSABasedGenericKubernetesResourceMatcherTest.class, - fileName); + return ReconcilerUtils.loadYaml( + clazz, SSABasedGenericKubernetesResourceMatcherTest.class, fileName); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java index 970e40eff6..bdb67d9bf6 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/AbstractWorkflowExecutorTest.java @@ -33,6 +33,7 @@ public class AbstractWorkflowExecutorTest { @SuppressWarnings("rawtypes") protected final Condition notMetCondition = (primary, secondary, context) -> false; + @SuppressWarnings("rawtypes") protected final Condition metCondition = (primary, secondary, context) -> true; @@ -46,11 +47,11 @@ public TestDependent(String name) { } @Override - public ReconcileResult reconcile(TestCustomResource primary, - Context context) { + public ReconcileResult reconcile( + TestCustomResource primary, Context context) { executionHistory.add(new ReconcileRecord(this)); - return ReconcileResult - .resourceCreated(new ConfigMapBuilder().addToBinaryData("key", VALUE).build()); + return ReconcileResult.resourceCreated( + new ConfigMapBuilder().addToBinaryData("key", VALUE).build()); } @Override @@ -110,8 +111,8 @@ public TestErrorDependent(String name) { } @Override - public ReconcileResult reconcile(TestCustomResource primary, - Context context) { + public ReconcileResult reconcile( + TestCustomResource primary, Context context) { executionHistory.add(new ReconcileRecord(this)); throw new IllegalStateException("Test exception"); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResultTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResultTest.java index 8503e402f1..024af5f6b7 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResultTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/BaseWorkflowResultTest.java @@ -13,26 +13,24 @@ import static org.assertj.core.api.Assertions.assertThat; class BaseWorkflowResultTest { - private final static BaseWorkflowResult.Detail detail = - new BaseWorkflowResult.Detail<>(new RuntimeException(), null, null, null, null, null, false, - false, false); + private static final BaseWorkflowResult.Detail detail = new BaseWorkflowResult.Detail<>( + new RuntimeException(), null, null, null, null, null, false, false, false); @Test void throwsExceptionWithoutNumberingIfAllDifferentClass() { - var res = new BaseWorkflowResult(Map.of(new DependentA(), detail, - new DependentB(), detail)); + var res = new BaseWorkflowResult(Map.of(new DependentA(), detail, new DependentB(), detail)); try { res.throwAggregateExceptionIfErrorsPresent(); } catch (AggregatedOperatorException e) { - assertThat(e.getAggregatedExceptions()).containsOnlyKeys(DependentA.class.getName(), - DependentB.class.getName()); + assertThat(e.getAggregatedExceptions()) + .containsOnlyKeys(DependentA.class.getName(), DependentB.class.getName()); } } @Test void numbersDependentClassNamesIfMoreOfSameType() { - var res = new BaseWorkflowResult(Map.of(new DependentA("name1"), detail, - new DependentA("name2"), detail)); + var res = new BaseWorkflowResult( + Map.of(new DependentA("name1"), detail, new DependentA("name2"), detail)); try { res.throwAggregateExceptionIfErrorsPresent(); } catch (AggregatedOperatorException e) { diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationConditionTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationConditionTest.java index 58990214a3..95afcc0464 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationConditionTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/CRDPresentActivationConditionTest.java @@ -21,13 +21,11 @@ class CRDPresentActivationConditionTest { private final CRDPresentActivationCondition.CRDPresentChecker checkerMock = mock(CRDPresentActivationCondition.CRDPresentChecker.class); private final CRDPresentActivationCondition condition = - new CRDPresentActivationCondition(checkerMock, 2, - Duration.ofMillis(TEST_CHECK_INTERVAL)); + new CRDPresentActivationCondition(checkerMock, 2, Duration.ofMillis(TEST_CHECK_INTERVAL)); private final DependentResource dr = mock(DependentResource.class); private final Context context = mock(Context.class); - @BeforeEach void setup() { CRDPresentActivationCondition.clearState(); @@ -35,14 +33,13 @@ void setup() { when(dr.resourceType()).thenReturn(TestCustomResource.class); } - @Test - void checkCRDIfNotCheckedBefore() { - when(checkerMock.checkIfCRDPresent(any(),any())).thenReturn(true); + void checkCRDIfNotCheckedBefore() { + when(checkerMock.checkIfCRDPresent(any(), any())).thenReturn(true); - assertThat(condition.isMet(dr,null,context)).isTrue(); - verify(checkerMock, times(1)).checkIfCRDPresent(any(),any()); - } + assertThat(condition.isMet(dr, null, context)).isTrue(); + verify(checkerMock, times(1)).checkIfCRDPresent(any(), any()); + } @Test void instantMetCallSkipsApiCall() { @@ -65,17 +62,17 @@ void intervalExpiredAPICheckedAgain() throws InterruptedException { } @Test - void crdIsNotCheckedAnymoreIfIfOnceFound() throws InterruptedException { - when(checkerMock.checkIfCRDPresent(any(),any())).thenReturn(true); + void crdIsNotCheckedAnymoreIfIfOnceFound() throws InterruptedException { + when(checkerMock.checkIfCRDPresent(any(), any())).thenReturn(true); - condition.isMet(dr,null,context); - verify(checkerMock, times(1)).checkIfCRDPresent(any(),any()); + condition.isMet(dr, null, context); + verify(checkerMock, times(1)).checkIfCRDPresent(any(), any()); - Thread.sleep(TEST_CHECK_INTERVAL_WITH_SLACK); + Thread.sleep(TEST_CHECK_INTERVAL_WITH_SLACK); - condition.isMet(dr,null,context); - verify(checkerMock, times(1)).checkIfCRDPresent(any(),any()); - } + condition.isMet(dr, null, context); + verify(checkerMock, times(1)).checkIfCRDPresent(any(), any()); + } @Test void crdNotCheckedAnymoreIfCountExpires() throws InterruptedException { @@ -87,5 +84,4 @@ void crdNotCheckedAnymoreIfCountExpires() throws InterruptedException { verify(checkerMock, times(2)).checkIfCRDPresent(any(), any()); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ExecutionAssert.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ExecutionAssert.java index d857c0e9dd..5d0d4546b6 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ExecutionAssert.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ExecutionAssert.java @@ -8,8 +8,7 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.DependentResource; -public class ExecutionAssert - extends AbstractAssert> { +public class ExecutionAssert extends AbstractAssert> { public ExecutionAssert(List reconcileRecords) { super(reconcileRecords, ExecutionAssert.class); @@ -54,7 +53,9 @@ private List getActualDependentResources() { } private Optional getReconcileRecordFor(DependentResource dependentResource) { - return actual.stream().filter(rr -> rr.getDependentResource() == dependentResource).findFirst(); + return actual.stream() + .filter(rr -> rr.getDependentResource() == dependentResource) + .findFirst(); } public ExecutionAssert reconciledInOrder(DependentResource... dependentResources) { @@ -64,9 +65,8 @@ public ExecutionAssert reconciledInOrder(DependentResource... dependentRes for (int i = 0; i < dependentResources.length - 1; i++) { checkIfReconciled(i, dependentResources); checkIfReconciled(i + 1, dependentResources); - if (getActualDependentResources() - .indexOf(dependentResources[i]) > getActualDependentResources() - .indexOf(dependentResources[i + 1])) { + if (getActualDependentResources().indexOf(dependentResources[i]) + > getActualDependentResources().indexOf(dependentResources[i + 1])) { failWithMessage( "Dependent resource on index %d reconciled after the one on index %d", i, i + 1); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupportTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupportTest.java index ca73c8cae1..49b14c203b 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupportTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowSupportTest.java @@ -36,27 +36,30 @@ void checkFindsDuplicates() { final var drs2 = createDRS(NAME_2); final var drs1 = createDRS(NAME_1); - Assertions.assertThrows(OperatorException.class, () -> managedWorkflowSupport - .checkForNameDuplication(List.of(drs2, drs2))); + Assertions.assertThrows( + OperatorException.class, + () -> managedWorkflowSupport.checkForNameDuplication(List.of(drs2, drs2))); - Assertions.assertThrows(OperatorException.class, - () -> managedWorkflowSupport.checkForNameDuplication( - List.of(drs1, drs2, drs2))); + Assertions.assertThrows( + OperatorException.class, + () -> managedWorkflowSupport.checkForNameDuplication(List.of(drs1, drs2, drs2))); - final var exception = Assertions.assertThrows(OperatorException.class, - () -> managedWorkflowSupport.checkForNameDuplication( - List.of(drs1, drs2, drs2, drs1))); + final var exception = Assertions.assertThrows( + OperatorException.class, + () -> managedWorkflowSupport.checkForNameDuplication(List.of(drs1, drs2, drs2, drs1))); assertThat(exception.getMessage()).contains(NAME_1, NAME_2); } @Test void orderingTrivialCases() { assertThat(managedWorkflowSupport.orderAndDetectCycles(List.of(createDRS(NAME_1)))) - .map(DependentResourceSpec::getName).containsExactly(NAME_1); + .map(DependentResourceSpec::getName) + .containsExactly(NAME_1); - assertThat(managedWorkflowSupport - .orderAndDetectCycles(List.of(createDRS(NAME_2, NAME_1), createDRS(NAME_1)))) - .map(DependentResourceSpec::getName).containsExactly(NAME_1, NAME_2); + assertThat(managedWorkflowSupport.orderAndDetectCycles( + List.of(createDRS(NAME_2, NAME_1), createDRS(NAME_1)))) + .map(DependentResourceSpec::getName) + .containsExactly(NAME_1, NAME_2); } @Test @@ -65,9 +68,14 @@ void orderingDiamondShape() { String NAME_4 = "name4"; var res = managedWorkflowSupport - .orderAndDetectCycles(List.of(createDRS(NAME_2, NAME_1), createDRS(NAME_1), - createDRS(NAME_3, NAME_1), createDRS(NAME_4, NAME_2, NAME_3))) - .stream().map(DependentResourceSpec::getName).collect(Collectors.toList()); + .orderAndDetectCycles(List.of( + createDRS(NAME_2, NAME_1), + createDRS(NAME_1), + createDRS(NAME_3, NAME_1), + createDRS(NAME_4, NAME_2, NAME_3))) + .stream() + .map(DependentResourceSpec::getName) + .collect(Collectors.toList()); assertThat(res) .containsExactlyInAnyOrder(NAME_1, NAME_2, NAME_3, NAME_4) @@ -75,7 +83,6 @@ void orderingDiamondShape() { .contains(NAME_4, Index.atIndex(3)); } - @Test void orderingMultipleRoots() { final var NAME_3 = "name3"; @@ -91,7 +98,9 @@ void orderingMultipleRoots() { createDRS(NAME_4, NAME_2, NAME_3), createDRS(NAME_5, NAME_1, NAME_6), createDRS(NAME_6))) - .stream().map(DependentResourceSpec::getName).collect(Collectors.toList()); + .stream() + .map(DependentResourceSpec::getName) + .collect(Collectors.toList()); assertThat(res) .containsExactlyInAnyOrder(NAME_1, NAME_5, NAME_6, NAME_2, NAME_3, NAME_4) @@ -106,24 +115,29 @@ void orderingMultipleRoots() { @Test void detectsCyclesTrivialCases() { String NAME_3 = "name3"; - Assertions.assertThrows(OperatorException.class, () -> managedWorkflowSupport - .orderAndDetectCycles(List.of(createDRS(NAME_2, NAME_1), createDRS(NAME_1, NAME_2)))); - Assertions.assertThrows(OperatorException.class, - () -> managedWorkflowSupport - .orderAndDetectCycles(List.of(createDRS(NAME_2, NAME_1), createDRS(NAME_1, NAME_3), - createDRS(NAME_3, NAME_2)))); + Assertions.assertThrows( + OperatorException.class, + () -> managedWorkflowSupport.orderAndDetectCycles( + List.of(createDRS(NAME_2, NAME_1), createDRS(NAME_1, NAME_2)))); + Assertions.assertThrows( + OperatorException.class, + () -> managedWorkflowSupport.orderAndDetectCycles(List.of( + createDRS(NAME_2, NAME_1), createDRS(NAME_1, NAME_3), createDRS(NAME_3, NAME_2)))); } @Test void detectsCycleOnSubTree() { - Assertions.assertThrows(OperatorException.class, - () -> managedWorkflowSupport.orderAndDetectCycles(List.of(createDRS(NAME_1), + Assertions.assertThrows( + OperatorException.class, + () -> managedWorkflowSupport.orderAndDetectCycles(List.of( + createDRS(NAME_1), createDRS(NAME_2, NAME_1), createDRS(NAME_3, NAME_1, NAME_4), createDRS(NAME_4, NAME_3)))); - Assertions.assertThrows(OperatorException.class, + Assertions.assertThrows( + OperatorException.class, () -> managedWorkflowSupport.orderAndDetectCycles(List.of( createDRS(NAME_1), createDRS(NAME_2, NAME_1, NAME_4), @@ -133,17 +147,16 @@ void detectsCycleOnSubTree() { @Test void createsWorkflow() { - var specs = List.of(createDRS(NAME_1), + var specs = List.of( + createDRS(NAME_1), createDRS(NAME_2, NAME_1), createDRS(NAME_3, NAME_1), createDRS(NAME_4, NAME_3, NAME_2)); var workflow = managedWorkflowSupport.createAsDefault(specs); - assertThat(workflow.nodeNames()) - .containsExactlyInAnyOrder(NAME_1, NAME_2, NAME_3, NAME_4); + assertThat(workflow.nodeNames()).containsExactlyInAnyOrder(NAME_1, NAME_2, NAME_3, NAME_4); assertThat(workflow.getTopLevelResources()).containsExactly(NAME_1); assertThat(workflow.getBottomLevelResources()).containsExactly(NAME_4); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTest.java index e634a368d7..ae48565e82 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTest.java @@ -36,21 +36,24 @@ void isNotCleanerIfNoDeleter() { @Test void isNotCleanerIfGarbageCollected() { - assertThat(managedWorkflow(createDRSWithTraits(NAME, GarbageCollected.class)) - .hasCleaner()).isFalse(); + assertThat( + managedWorkflow(createDRSWithTraits(NAME, GarbageCollected.class)).hasCleaner()) + .isFalse(); } @Test void isCleanerShouldWork() { assertThat(managedWorkflow( - createDRSWithTraits(NAME, GarbageCollected.class), - createDRSWithTraits("foo", Deleter.class)) - .hasCleaner()).isTrue(); + createDRSWithTraits(NAME, GarbageCollected.class), + createDRSWithTraits("foo", Deleter.class)) + .hasCleaner()) + .isTrue(); assertThat(managedWorkflow( - createDRSWithTraits("foo", Deleter.class), - createDRSWithTraits(NAME, GarbageCollected.class)) - .hasCleaner()).isTrue(); + createDRSWithTraits("foo", Deleter.class), + createDRSWithTraits(NAME, GarbageCollected.class)) + .hasCleaner()) + .isTrue(); } @Test @@ -81,8 +84,6 @@ public boolean handleExceptionsInReconciler() { }; when(configuration.getWorkflowSpec()).thenReturn(Optional.of(ws)); - return new BaseConfigurationService().getWorkflowFactory() - .workflowFor(configuration); + return new BaseConfigurationService().getWorkflowFactory().workflowFor(configuration); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTestUtils.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTestUtils.java index ae0731b8f5..f3b3735d41 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTestUtils.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/ManagedWorkflowTestUtils.java @@ -18,18 +18,18 @@ public class ManagedWorkflowTestUtils { @SuppressWarnings("unchecked") public static DependentResourceSpec createDRS(String name, String... dependOns) { - return new DependentResourceSpec(EmptyTestDependentResource.class, name, Set.of(dependOns), - null, null, null, null, null); + return new DependentResourceSpec( + EmptyTestDependentResource.class, name, Set.of(dependOns), null, null, null, null, null); } - public static DependentResourceSpec createDRSWithTraits(String name, - Class... dependentResourceTraits) { + public static DependentResourceSpec createDRSWithTraits( + String name, Class... dependentResourceTraits) { final var spy = Mockito.mock(DependentResourceSpec.class); when(spy.getName()).thenReturn(name); Class toMock = DependentResource.class; - final var garbageCollected = dependentResourceTraits != null && - Arrays.asList(dependentResourceTraits).contains(GarbageCollected.class); + final var garbageCollected = dependentResourceTraits != null + && Arrays.asList(dependentResourceTraits).contains(GarbageCollected.class); if (garbageCollected) { toMock = KubernetesDependentResource.class; } @@ -38,5 +38,4 @@ public static DependentResourceSpec createDRSWithTraits(String name, when(spy.getDependentResourceClass()).thenReturn(dr.getClass()); return spy; } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilderTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilderTest.java index b41ee430f7..f818e4cd84 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilderTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowBuilderTest.java @@ -25,5 +25,4 @@ void workflowIsCleanerIfAtLeastOneDRIsCleaner() { assertThat(workflow.hasCleaner()).isTrue(); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutorTest.java index 878cec419c..f163e9f183 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowCleanupExecutorTest.java @@ -28,8 +28,10 @@ class WorkflowCleanupExecutorTest extends AbstractWorkflowExecutorTest { protected TestDeleterDependent dd2 = new TestDeleterDependent("DR_DELETER_2"); protected TestDeleterDependent dd3 = new TestDeleterDependent("DR_DELETER_3"); protected TestDeleterDependent dd4 = new TestDeleterDependent("DR_DELETER_4"); + @SuppressWarnings("unchecked") Context mockContext = spy(Context.class); + ExecutorService executorService = Executors.newCachedThreadPool(); @BeforeEach @@ -54,17 +56,20 @@ void setup() { void cleanUpDiamondWorkflow() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dr1).dependsOn(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) - .addDependentResourceAndConfigure(dd3).dependsOn(dr1, dd2) + .addDependentResourceAndConfigure(dr1) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd3) + .dependsOn(dr1, dd2) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); assertThat(executionHistory).reconciledInOrder(dd3, dd2, dd1).notReconciled(dr1); - Assertions.assertThat(res.getDeleteCalledOnDependents()).containsExactlyInAnyOrder(dd1, dd2, - dd3); + Assertions.assertThat(res.getDeleteCalledOnDependents()) + .containsExactlyInAnyOrder(dd1, dd2, dd3); Assertions.assertThat(res.getErroredDependents()).isEmpty(); Assertions.assertThat(res.getPostConditionNotMetDependents()).isEmpty(); } @@ -73,15 +78,17 @@ void cleanUpDiamondWorkflow() { void dontDeleteIfDependentErrored() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) - .addDependentResourceAndConfigure(dd3).dependsOn(dd2) - .addDependentResourceAndConfigure(errorDD).dependsOn(dd2) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd3) + .dependsOn(dd2) + .addDependentResourceAndConfigure(errorDD) + .dependsOn(dd2) .withThrowExceptionFurther(false) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); - assertThrows(AggregatedOperatorException.class, - res::throwAggregateExceptionIfErrorsPresent); + assertThrows(AggregatedOperatorException.class, res::throwAggregateExceptionIfErrorsPresent); assertThat(executionHistory).deleted(dd3, errorDD).notReconciled(dd1, dd2); @@ -90,12 +97,12 @@ void dontDeleteIfDependentErrored() { Assertions.assertThat(res.getPostConditionNotMetDependents()).isEmpty(); } - @Test void cleanupConditionTrivialCase() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) .withDeletePostcondition(notMetCondition) .build(); @@ -111,7 +118,9 @@ void cleanupConditionTrivialCase() { void cleanupConditionMet() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1).withDeletePostcondition(metCondition) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .withDeletePostcondition(metCondition) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); @@ -127,10 +136,13 @@ void cleanupConditionMet() { void cleanupConditionDiamondWorkflow() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) - .addDependentResourceAndConfigure(dd3).dependsOn(dd1) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd3) + .dependsOn(dd1) .withDeletePostcondition(notMetCondition) - .addDependentResourceAndConfigure(dd4).dependsOn(dd2, dd3) + .addDependentResourceAndConfigure(dd4) + .dependsOn(dd2, dd3) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); @@ -140,8 +152,8 @@ void cleanupConditionDiamondWorkflow() { .reconciledInOrder(dd4, dd3) .notReconciled(dr1); - Assertions.assertThat(res.getDeleteCalledOnDependents()).containsExactlyInAnyOrder(dd4, dd3, - dd2); + Assertions.assertThat(res.getDeleteCalledOnDependents()) + .containsExactlyInAnyOrder(dd4, dd3, dd2); Assertions.assertThat(res.getErroredDependents()).isEmpty(); Assertions.assertThat(res.getPostConditionNotMetDependents()).containsExactlyInAnyOrder(dd3); } @@ -154,8 +166,7 @@ void dontDeleteIfGarbageCollected() { var res = workflow.cleanup(new TestCustomResource(), mockContext); - assertThat(executionHistory) - .notReconciled(gcDeleter); + assertThat(executionHistory).notReconciled(gcDeleter); Assertions.assertThat(res.getDeleteCalledOnDependents()).isEmpty(); } @@ -164,31 +175,35 @@ void dontDeleteIfGarbageCollected() { void ifDependentActiveDependentNormallyDeleted() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) - .addDependentResourceAndConfigure(dd3).dependsOn(dd1) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd3) + .dependsOn(dd1) .withActivationCondition(metCondition) - .addDependentResourceAndConfigure(dd4).dependsOn(dd2, dd3) + .addDependentResourceAndConfigure(dd4) + .dependsOn(dd2, dd3) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); - assertThat(executionHistory) - .reconciledInOrder(dd4, dd2, dd1) - .reconciledInOrder(dd4, dd3, dd1); + assertThat(executionHistory).reconciledInOrder(dd4, dd2, dd1).reconciledInOrder(dd4, dd3, dd1); - Assertions.assertThat(res.getDeleteCalledOnDependents()).containsExactlyInAnyOrder(dd4, dd3, - dd2, dd1); + Assertions.assertThat(res.getDeleteCalledOnDependents()) + .containsExactlyInAnyOrder(dd4, dd3, dd2, dd1); } @Test void ifDependentActiveDeletePostConditionIsChecked() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) - .addDependentResourceAndConfigure(dd3).dependsOn(dd1) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd3) + .dependsOn(dd1) .withDeletePostcondition(notMetCondition) .withActivationCondition(metCondition) - .addDependentResourceAndConfigure(dd4).dependsOn(dd2, dd3) + .addDependentResourceAndConfigure(dd4) + .dependsOn(dd2, dd3) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); @@ -198,8 +213,8 @@ void ifDependentActiveDeletePostConditionIsChecked() { .reconciledInOrder(dd4, dd3) .notReconciled(dr1); - Assertions.assertThat(res.getDeleteCalledOnDependents()).containsExactlyInAnyOrder(dd4, dd3, - dd2); + Assertions.assertThat(res.getDeleteCalledOnDependents()) + .containsExactlyInAnyOrder(dd4, dd3, dd2); Assertions.assertThat(res.getErroredDependents()).isEmpty(); Assertions.assertThat(res.getPostConditionNotMetDependents()).containsExactlyInAnyOrder(dd3); } @@ -208,36 +223,40 @@ void ifDependentActiveDeletePostConditionIsChecked() { void ifDependentInactiveDeleteIsNotCalled() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) - .addDependentResourceAndConfigure(dd3).dependsOn(dd1) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd3) + .dependsOn(dd1) .withActivationCondition(notMetCondition) - .addDependentResourceAndConfigure(dd4).dependsOn(dd2, dd3) + .addDependentResourceAndConfigure(dd4) + .dependsOn(dd2, dd3) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); - assertThat(executionHistory) - .reconciledInOrder(dd4, dd2, dd1); + assertThat(executionHistory).reconciledInOrder(dd4, dd2, dd1); - Assertions.assertThat(res.getDeleteCalledOnDependents()).containsExactlyInAnyOrder(dd4, - dd2, dd1); + Assertions.assertThat(res.getDeleteCalledOnDependents()) + .containsExactlyInAnyOrder(dd4, dd2, dd1); } @Test void ifDependentInactiveDeletePostConditionNotChecked() { var workflow = new WorkflowBuilder() .addDependentResource(dd1) - .addDependentResourceAndConfigure(dd2).dependsOn(dd1) - .addDependentResourceAndConfigure(dd3).dependsOn(dd1) + .addDependentResourceAndConfigure(dd2) + .dependsOn(dd1) + .addDependentResourceAndConfigure(dd3) + .dependsOn(dd1) .withDeletePostcondition(notMetCondition) .withActivationCondition(notMetCondition) - .addDependentResourceAndConfigure(dd4).dependsOn(dd2, dd3) + .addDependentResourceAndConfigure(dd4) + .dependsOn(dd2, dd3) .build(); var res = workflow.cleanup(new TestCustomResource(), mockContext); - assertThat(executionHistory) - .reconciledInOrder(dd4, dd2, dd1); + assertThat(executionHistory).reconciledInOrder(dd4, dd2, dd1); Assertions.assertThat(res.getPostConditionNotMetDependents()).isEmpty(); } @@ -253,5 +272,4 @@ void singleInactiveDependent() { assertThat(executionHistory).notReconciled(dd1); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java index 0aa93fb0f9..5dbaadb4ec 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowReconcileExecutorTest.java @@ -28,6 +28,7 @@ class WorkflowReconcileExecutorTest extends AbstractWorkflowExecutorTest { @SuppressWarnings("unchecked") Context mockContext = spy(Context.class); + ExecutorService executorService = Executors.newCachedThreadPool(); TestDependent dr3 = new TestDependent("DR_3"); @@ -61,7 +62,8 @@ void reconcileTopLevelResources() { void reconciliationWithSimpleDependsOn() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -78,15 +80,16 @@ void reconciliationWithTwoTheDependsOns() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) - .addDependentResourceAndConfigure(dr3).dependsOn(dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr1) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); Assertions.assertThat(res.getErroredDependents()).isEmpty(); - assertThat(executionHistory) - .reconciledInOrder(dr1, dr2).reconciledInOrder(dr1, dr3); + assertThat(executionHistory).reconciledInOrder(dr1, dr2).reconciledInOrder(dr1, dr3); Assertions.assertThat(res.getReconciledDependents()).containsExactlyInAnyOrder(dr1, dr2, dr3); Assertions.assertThat(res.getErroredDependents()).isEmpty(); Assertions.assertThat(res.getNotReadyDependents()).isEmpty(); @@ -96,20 +99,22 @@ void reconciliationWithTwoTheDependsOns() { void diamondShareWorkflowReconcile() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) - .addDependentResourceAndConfigure(dr3).dependsOn(dr1) - .addDependentResourceAndConfigure(dr4).dependsOn(dr3).dependsOn(dr2) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr4) + .dependsOn(dr3) + .dependsOn(dr2) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); Assertions.assertThat(res.getErroredDependents()).isEmpty(); - assertThat(executionHistory) - .reconciledInOrder(dr1, dr2, dr4) - .reconciledInOrder(dr1, dr3, dr4); + assertThat(executionHistory).reconciledInOrder(dr1, dr2, dr4).reconciledInOrder(dr1, dr3, dr4); - Assertions.assertThat(res.getReconciledDependents()).containsExactlyInAnyOrder(dr1, dr2, dr3, - dr4); + Assertions.assertThat(res.getReconciledDependents()) + .containsExactlyInAnyOrder(dr1, dr2, dr3, dr4); Assertions.assertThat(res.getErroredDependents()).isEmpty(); Assertions.assertThat(res.getNotReadyDependents()).isEmpty(); } @@ -123,8 +128,7 @@ void exceptionHandlingSimpleCases() { var res = workflow.reconcile(new TestCustomResource(), mockContext); - assertThrows(AggregatedOperatorException.class, - res::throwAggregateExceptionIfErrorsPresent); + assertThrows(AggregatedOperatorException.class, res::throwAggregateExceptionIfErrorsPresent); assertThat(executionHistory).reconciled(drError); Assertions.assertThat(res.getErroredDependents()).containsOnlyKeys(drError); @@ -136,14 +140,15 @@ void exceptionHandlingSimpleCases() { void dependentsOnErroredResourceNotReconciled() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(drError).dependsOn(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(drError) + .addDependentResourceAndConfigure(drError) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(drError) .withThrowExceptionFurther(false) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); - assertThrows(AggregatedOperatorException.class, - res::throwAggregateExceptionIfErrorsPresent); + assertThrows(AggregatedOperatorException.class, res::throwAggregateExceptionIfErrorsPresent); assertThat(executionHistory).reconciled(dr1, drError).notReconciled(dr2); Assertions.assertThat(res.getErroredDependents()).containsOnlyKeys(drError); @@ -156,15 +161,17 @@ void oneBranchErrorsOtherCompletes() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(drError).dependsOn(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) - .addDependentResourceAndConfigure(dr3).dependsOn(dr2) + .addDependentResourceAndConfigure(drError) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr2) .withThrowExceptionFurther(false) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); - assertThrows(AggregatedOperatorException.class, - res::throwAggregateExceptionIfErrorsPresent); + assertThrows(AggregatedOperatorException.class, res::throwAggregateExceptionIfErrorsPresent); assertThat(executionHistory).reconciledInOrder(dr1, dr2, dr3).reconciledInOrder(dr1, drError); Assertions.assertThat(res.getErroredDependents()).containsOnlyKeys(drError); @@ -177,13 +184,13 @@ void onlyOneDependsOnErroredResourceNotReconciled() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) .addDependentResource(drError) - .addDependentResourceAndConfigure(dr2).dependsOn(drError, dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(drError, dr1) .withThrowExceptionFurther(false) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); - assertThrows(AggregatedOperatorException.class, - res::throwAggregateExceptionIfErrorsPresent); + assertThrows(AggregatedOperatorException.class, res::throwAggregateExceptionIfErrorsPresent); assertThat(executionHistory).notReconciled(dr2); Assertions.assertThat(res.getErroredDependents()).containsKey(drError); @@ -198,15 +205,19 @@ void simpleReconcileCondition() { @Override public Result detailedIsMet( DependentResource dependentResource, - TestCustomResource primary, Context context) { + TestCustomResource primary, + Context context) { return Result.withResult(false, result); } }; var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(dr1).withReconcilePrecondition(unmetWithResult) - .addDependentResourceAndConfigure(dr2).withReconcilePrecondition(metCondition) - .addDependentResourceAndConfigure(drDeleter).withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(dr1) + .withReconcilePrecondition(unmetWithResult) + .addDependentResourceAndConfigure(dr2) + .withReconcilePrecondition(metCondition) + .addDependentResourceAndConfigure(drDeleter) + .withReconcilePrecondition(notMetCondition) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -219,13 +230,14 @@ public Result detailedIsMet( .ifPresentOrElse(s -> assertEquals(result, s), org.junit.jupiter.api.Assertions::fail); } - @Test void triangleOnceConditionNotMet() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) - .addDependentResourceAndConfigure(drDeleter).withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) + .addDependentResourceAndConfigure(drDeleter) + .withReconcilePrecondition(notMetCondition) .dependsOn(dr1) .build(); @@ -243,11 +255,14 @@ void reconcileConditionTransitiveDelete() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) .withReconcilePrecondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter).dependsOn(dr2) + .addDependentResourceAndConfigure(drDeleter) + .dependsOn(dr2) .withReconcilePrecondition(metCondition) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(drDeleter) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(drDeleter) .withReconcilePrecondition(metCondition) .build(); @@ -269,19 +284,18 @@ void reconcileConditionAlsoErrorDependsOn() { var workflow = new WorkflowBuilder() .addDependentResource(drError) - .addDependentResourceAndConfigure(drDeleter).withReconcilePrecondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(drError, drDeleter) + .addDependentResourceAndConfigure(drDeleter) + .withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(drError, drDeleter) .withReconcilePrecondition(metCondition) .withThrowExceptionFurther(false) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); - assertThrows(AggregatedOperatorException.class, - res::throwAggregateExceptionIfErrorsPresent); + assertThrows(AggregatedOperatorException.class, res::throwAggregateExceptionIfErrorsPresent); - assertThat(executionHistory) - .deleted(drDeleter2, drDeleter) - .reconciled(drError); + assertThat(executionHistory).deleted(drDeleter2, drDeleter).reconciled(drError); Assertions.assertThat(res.getErroredDependents()).containsOnlyKeys(drError); Assertions.assertThat(res.getReconciledDependents()).isEmpty(); @@ -292,8 +306,10 @@ void reconcileConditionAlsoErrorDependsOn() { void oneDependsOnConditionNotMet() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).withReconcilePrecondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter).dependsOn(dr1, dr2) + .addDependentResourceAndConfigure(dr2) + .withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(drDeleter) + .dependsOn(dr1, dr2) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -311,9 +327,11 @@ void deletedIfReconcileConditionNotMet() { TestDeleterDependent drDeleter2 = new TestDeleterDependent("DR_DELETER_2"); var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(drDeleter).dependsOn(dr1) + .addDependentResourceAndConfigure(drDeleter) + .dependsOn(dr1) .withReconcilePrecondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(dr1, drDeleter) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(dr1, drDeleter) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -335,11 +353,15 @@ void deleteDoneInReverseOrder() { var workflow = new WorkflowBuilder() .addDependentResource(dr1) - .addDependentResourceAndConfigure(drDeleter).withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(drDeleter) + .withReconcilePrecondition(notMetCondition) .dependsOn(dr1) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(drDeleter) - .addDependentResourceAndConfigure(drDeleter3).dependsOn(drDeleter) - .addDependentResourceAndConfigure(drDeleter4).dependsOn(drDeleter3) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(drDeleter) + .addDependentResourceAndConfigure(drDeleter3) + .dependsOn(drDeleter) + .addDependentResourceAndConfigure(drDeleter4) + .dependsOn(drDeleter3) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -361,16 +383,21 @@ void diamondDeleteWithPostConditionInMiddle() { TestDeleterDependent drDeleter4 = new TestDeleterDependent("DR_DELETER_4"); var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(drDeleter).withReconcilePrecondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(drDeleter) - .addDependentResourceAndConfigure(drDeleter3).dependsOn(drDeleter) + .addDependentResourceAndConfigure(drDeleter) + .withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(drDeleter) + .addDependentResourceAndConfigure(drDeleter3) + .dependsOn(drDeleter) .withDeletePostcondition(this.notMetCondition) - .addDependentResourceAndConfigure(drDeleter4).dependsOn(drDeleter3, drDeleter2) + .addDependentResourceAndConfigure(drDeleter4) + .dependsOn(drDeleter3, drDeleter2) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); - assertThat(executionHistory).notReconciled(drDeleter) + assertThat(executionHistory) + .notReconciled(drDeleter) .reconciledInOrder(drDeleter4, drDeleter2) .reconciledInOrder(drDeleter4, drDeleter3); @@ -385,10 +412,14 @@ void diamondDeleteErrorInMiddle() { TestDeleterDependent drDeleter3 = new TestDeleterDependent("DR_DELETER_3"); var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(drDeleter).withReconcilePrecondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(drDeleter) - .addDependentResourceAndConfigure(errorDD).dependsOn(drDeleter) - .addDependentResourceAndConfigure(drDeleter3).dependsOn(errorDD, drDeleter2) + .addDependentResourceAndConfigure(drDeleter) + .withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(drDeleter) + .addDependentResourceAndConfigure(errorDD) + .dependsOn(drDeleter) + .addDependentResourceAndConfigure(drDeleter3) + .dependsOn(errorDD, drDeleter2) .withThrowExceptionFurther(false) .build(); @@ -406,8 +437,10 @@ void diamondDeleteErrorInMiddle() { @Test void readyConditionTrivialCase() { var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(dr1).withReadyPostcondition(metCondition) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) + .addDependentResourceAndConfigure(dr1) + .withReadyPostcondition(metCondition) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -422,13 +455,14 @@ void readyConditionTrivialCase() { @Test void readyConditionNotMetTrivialCase() { var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(dr1).withReadyPostcondition(notMetCondition) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) + .addDependentResourceAndConfigure(dr1) + .withReadyPostcondition(notMetCondition) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); - assertThat(executionHistory).reconciled(dr1).notReconciled(dr2); Assertions.assertThat(res.getErroredDependents()).isEmpty(); @@ -440,9 +474,11 @@ void readyConditionNotMetTrivialCase() { void readyConditionNotMetInOneParent() { var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(dr1).withReadyPostcondition(notMetCondition) + .addDependentResourceAndConfigure(dr1) + .withReadyPostcondition(notMetCondition) .addDependentResource(dr2) - .addDependentResourceAndConfigure(dr3).dependsOn(dr1, dr2) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr1, dr2) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -460,14 +496,17 @@ void diamondShareWithReadyCondition() { .addDependentResourceAndConfigure(dr2) .dependsOn(dr1) .withReadyPostcondition(notMetCondition) - .addDependentResourceAndConfigure(dr3).dependsOn(dr1) - .addDependentResourceAndConfigure(dr4).dependsOn(dr2, dr3) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr4) + .dependsOn(dr2, dr3) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); Assertions.assertThat(res.getErroredDependents()).isEmpty(); - assertThat(executionHistory).reconciledInOrder(dr1, dr2) + assertThat(executionHistory) + .reconciledInOrder(dr1, dr2) .reconciledInOrder(dr1, dr3) .notReconciled(dr4); @@ -479,7 +518,8 @@ void diamondShareWithReadyCondition() { @Test void garbageCollectedResourceIsDeletedIfReconcilePreconditionDoesNotHold() { var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(gcDeleter).withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(gcDeleter) + .withReconcilePrecondition(notMetCondition) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -491,8 +531,10 @@ void garbageCollectedResourceIsDeletedIfReconcilePreconditionDoesNotHold() { @Test void garbageCollectedDeepResourceIsDeletedIfReconcilePreconditionDoesNotHold() { var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(dr1).withReconcilePrecondition(notMetCondition) - .addDependentResourceAndConfigure(gcDeleter).dependsOn(dr1) + .addDependentResourceAndConfigure(dr1) + .withReconcilePrecondition(notMetCondition) + .addDependentResourceAndConfigure(gcDeleter) + .dependsOn(dr1) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -521,7 +563,8 @@ void dependentsOnANonActiveDependentNotReconciled() { .addDependentResourceAndConfigure(dr1) .withActivationCondition(notMetCondition) .addDependentResource(dr2) - .addDependentResourceAndConfigure(dr3).dependsOn(dr1) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr1) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -537,7 +580,8 @@ void readyConditionNotCheckedOnNonActiveDependent() { .withActivationCondition(notMetCondition) .withReadyPostcondition(notMetCondition) .addDependentResource(dr2) - .addDependentResourceAndConfigure(dr3).dependsOn(dr1) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr1) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); @@ -567,19 +611,21 @@ void deletesDependentsOfNonActiveDependentButNotTheNonActive() { TestDeleterDependent drDeleter3 = new TestDeleterDependent("DR_DELETER_3"); var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(dr1).withActivationCondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter).dependsOn(dr1) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(drDeleter) + .addDependentResourceAndConfigure(dr1) .withActivationCondition(notMetCondition) - .addDependentResourceAndConfigure(drDeleter3).dependsOn(drDeleter2) + .addDependentResourceAndConfigure(drDeleter) + .dependsOn(dr1) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(drDeleter) + .withActivationCondition(notMetCondition) + .addDependentResourceAndConfigure(drDeleter3) + .dependsOn(drDeleter2) .build(); var res = workflow.reconcile(new TestCustomResource(), mockContext); Assertions.assertThat(res.getReconciledDependents()).isEmpty(); - assertThat(executionHistory).deleted(drDeleter, drDeleter3) - .notReconciled(dr1, - drDeleter2); + assertThat(executionHistory).deleted(drDeleter, drDeleter3).notReconciled(dr1, drDeleter2); } @Test @@ -590,8 +636,10 @@ void activationConditionOnlyCalledOnceOnDeleteDependents() { when(condition.isMet(any(), any(), any())).thenReturn(false); var workflow = new WorkflowBuilder() - .addDependentResourceAndConfigure(drDeleter).withActivationCondition(condition) - .addDependentResourceAndConfigure(drDeleter2).dependsOn(drDeleter) + .addDependentResourceAndConfigure(drDeleter) + .withActivationCondition(condition) + .addDependentResourceAndConfigure(drDeleter2) + .dependsOn(drDeleter) .build(); workflow.reconcile(new TestCustomResource(), mockContext); @@ -600,14 +648,15 @@ void activationConditionOnlyCalledOnceOnDeleteDependents() { verify(condition, times(1)).isMet(any(), any(), any()); } - @Test void resultFromReadyConditionShouldBeAvailableIfExisting() { final var result = Integer.valueOf(42); final var resultCondition = new DetailedCondition<>() { @Override - public Result detailedIsMet(DependentResource dependentResource, - HasMetadata primary, Context context) { + public Result detailedIsMet( + DependentResource dependentResource, + HasMetadata primary, + Context context) { return new Result<>() { @Override public Object getDetail() { @@ -627,8 +676,8 @@ public boolean isSuccess() { .build(); final var reconcileResult = workflow.reconcile(new TestCustomResource(), mockContext); - assertEquals(result, - reconcileResult.getNotReadyDependentResult(dr1, Integer.class).orElseThrow()); + assertEquals( + result, reconcileResult.getNotReadyDependentResult(dr1, Integer.class).orElseThrow()); } @Test @@ -636,8 +685,10 @@ void shouldThrowIllegalArgumentExceptionIfTypesDoNotMatch() { final var result = "FOO"; final var resultCondition = new DetailedCondition<>() { @Override - public Result detailedIsMet(DependentResource dependentResource, - HasMetadata primary, Context context) { + public Result detailedIsMet( + DependentResource dependentResource, + HasMetadata primary, + Context context) { return new Result<>() { @Override public Object getDetail() { @@ -658,7 +709,8 @@ public boolean isSuccess() { final var reconcileResult = workflow.reconcile(new TestCustomResource(), mockContext); final var expectedResultType = Integer.class; - final var e = assertThrows(IllegalArgumentException.class, + final var e = assertThrows( + IllegalArgumentException.class, () -> reconcileResult.getNotReadyDependentResult(dr1, expectedResultType)); final var message = e.getMessage(); assertTrue(message.contains(dr1.name())); diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java index 6d268082f5..d1e9f1cb2b 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/dependent/workflow/WorkflowTest.java @@ -27,13 +27,16 @@ void zeroTopLevelDRShouldThrowException() { var dr3 = mockDependent("dr3"); var cyclicWorkflowBuilderSetup = new WorkflowBuilder() - .addDependentResourceAndConfigure(dr1).dependsOn() - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) - .addDependentResourceAndConfigure(dr3).dependsOn(dr2) - .addDependentResourceAndConfigure(dr1).dependsOn(dr2); - - assertThrows(IllegalStateException.class, - cyclicWorkflowBuilderSetup::build); + .addDependentResourceAndConfigure(dr1) + .dependsOn() + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) + .addDependentResourceAndConfigure(dr3) + .dependsOn(dr2) + .addDependentResourceAndConfigure(dr1) + .dependsOn(dr2); + + assertThrows(IllegalStateException.class, cyclicWorkflowBuilderSetup::build); } @Test @@ -45,13 +48,13 @@ void calculatesTopLevelResources() { var workflow = new WorkflowBuilder() .addDependentResource(independentDR) .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) .buildAsDefaultWorkflow(); - Set topResources = - workflow.getTopLevelDependentResources().stream() - .map(DependentResourceNode::getDependentResource) - .collect(Collectors.toSet()); + Set topResources = workflow.getTopLevelDependentResources().stream() + .map(DependentResourceNode::getDependentResource) + .collect(Collectors.toSet()); assertThat(topResources).containsExactlyInAnyOrder(dr1, independentDR); } @@ -65,18 +68,17 @@ void calculatesBottomLevelResources() { final var workflow = new WorkflowBuilder() .addDependentResource(independentDR) .addDependentResource(dr1) - .addDependentResourceAndConfigure(dr2).dependsOn(dr1) + .addDependentResourceAndConfigure(dr2) + .dependsOn(dr1) .buildAsDefaultWorkflow(); - Set bottomResources = - workflow.getBottomLevelDependentResources().stream() - .map(DependentResourceNode::getDependentResource) - .collect(Collectors.toSet()); + Set bottomResources = workflow.getBottomLevelDependentResources().stream() + .map(DependentResourceNode::getDependentResource) + .collect(Collectors.toSet()); assertThat(bottomResources).containsExactlyInAnyOrder(dr2, independentDR); } - @Test void isDeletableShouldWork() { var dr = mock(DependentResource.class); @@ -91,8 +93,9 @@ void isDeletableShouldWork() { dr = mock(KubernetesDependentResource.class, withSettings().extraInterfaces(Deleter.class)); assertTrue(DefaultWorkflow.isDeletable(dr.getClass())); - dr = mock(KubernetesDependentResource.class, withSettings().extraInterfaces(Deleter.class, - GarbageCollected.class)); + dr = mock( + KubernetesDependentResource.class, + withSettings().extraInterfaces(Deleter.class, GarbageCollected.class)); assertFalse(DefaultWorkflow.isDeletable(dr.getClass())); } @@ -101,5 +104,4 @@ static DependentResource mockDependent(String name) { when(res.name()).thenReturn(name); return res; } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java index 9f7e390c0a..7b293babb0 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventProcessorTest.java @@ -66,8 +66,7 @@ class EventProcessorTest { mock(ReconciliationDispatcher.class); private final EventSourceManager eventSourceManagerMock = mock(EventSourceManager.class); private final TimerEventSource retryTimerEventSourceMock = mock(TimerEventSource.class); - private final ControllerEventSource controllerEventSourceMock = - mock(ControllerEventSource.class); + private final ControllerEventSource controllerEventSourceMock = mock(ControllerEventSource.class); private final Metrics metricsMock = mock(Metrics.class); private EventProcessor eventProcessor; private EventProcessor eventProcessorWithRetry; @@ -75,18 +74,18 @@ class EventProcessorTest { @BeforeEach void setup() { - when(eventSourceManagerMock.getControllerEventSource()) - .thenReturn(controllerEventSourceMock); - eventProcessor = - spy(new EventProcessor(controllerConfiguration(null, rateLimiterMock), - reconciliationDispatcherMock, - eventSourceManagerMock, null)); + when(eventSourceManagerMock.getControllerEventSource()).thenReturn(controllerEventSourceMock); + eventProcessor = spy(new EventProcessor( + controllerConfiguration(null, rateLimiterMock), + reconciliationDispatcherMock, + eventSourceManagerMock, + null)); eventProcessor.start(); - eventProcessorWithRetry = - spy(new EventProcessor( - controllerConfiguration(GenericRetry.defaultLimitedExponentialRetry(), - rateLimiterMock), - reconciliationDispatcherMock, eventSourceManagerMock, null)); + eventProcessorWithRetry = spy(new EventProcessor( + controllerConfiguration(GenericRetry.defaultLimitedExponentialRetry(), rateLimiterMock), + reconciliationDispatcherMock, + eventSourceManagerMock, + null)); eventProcessorWithRetry.start(); when(eventProcessor.retryEventSource()).thenReturn(retryTimerEventSourceMock); when(eventProcessorWithRetry.retryEventSource()).thenReturn(retryTimerEventSourceMock); @@ -125,8 +124,7 @@ void ifExecutionInProgressWaitsUntilItsFinished() { void schedulesAnEventRetryOnException() { TestCustomResource customResource = testCustomResource(); - ExecutionScope executionScope = - new ExecutionScope(null); + ExecutionScope executionScope = new ExecutionScope(null); executionScope.setResource(customResource); PostExecutionControl postExecutionControl = PostExecutionControl.exceptionDuringExecution(new RuntimeException("test")); @@ -134,8 +132,8 @@ void schedulesAnEventRetryOnException() { eventProcessorWithRetry.eventProcessingFinished(executionScope, postExecutionControl); verify(retryTimerEventSourceMock, times(1)) - .scheduleOnce(eq(ResourceID.fromResource(customResource)), - eq(GradualRetry.DEFAULT_INITIAL_INTERVAL)); + .scheduleOnce( + eq(ResourceID.fromResource(customResource)), eq(GradualRetry.DEFAULT_INITIAL_INTERVAL)); } @Test @@ -166,8 +164,8 @@ void executesTheControllerInstantlyAfterErrorIfNewEventsReceived() { List allValues = executionScopeArgumentCaptor.getAllValues(); assertThat(allValues).hasSize(2); verify(retryTimerEventSourceMock, never()) - .scheduleOnce(eq(ResourceID.fromResource(customResource)), - eq(GradualRetry.DEFAULT_INITIAL_INTERVAL)); + .scheduleOnce( + eq(ResourceID.fromResource(customResource)), eq(GradualRetry.DEFAULT_INITIAL_INTERVAL)); } @Test @@ -204,7 +202,6 @@ void successfulExecutionResetsTheRetry() { waitUntilProcessingFinished(eventProcessorWithRetry, event.getRelatedCustomResourceID()); log.info("Finished successfulExecutionResetsTheRetry"); - List executionScopes = executionScopeArgumentCaptor.getAllValues(); assertThat(executionScopes).hasSize(3); @@ -214,9 +211,10 @@ void successfulExecutionResetsTheRetry() { assertThat(executionScopes.get(1).getRetryInfo().isLastAttempt()).isEqualTo(false); } - private void waitUntilProcessingFinished(EventProcessor eventProcessor, - ResourceID relatedCustomResourceID) { - await().atMost(Duration.ofSeconds(3)) + private void waitUntilProcessingFinished( + EventProcessor eventProcessor, ResourceID relatedCustomResourceID) { + await() + .atMost(Duration.ofSeconds(3)) .until(() -> !eventProcessor.isUnderProcessing(relatedCustomResourceID)); } @@ -235,16 +233,19 @@ void scheduleTimedEventIfInstructedByPostExecutionControl() { @Test void reScheduleOnlyIfNotExecutedEventsReceivedMeanwhile() throws InterruptedException { var testDelay = 10000L; - doAnswer(new AnswersWithDelay(FAKE_CONTROLLER_EXECUTION_DURATION, - new Returns(PostExecutionControl.defaultDispatch().withReSchedule(testDelay)))) - .when(reconciliationDispatcherMock).handleExecution(any()); + doAnswer(new AnswersWithDelay( + FAKE_CONTROLLER_EXECUTION_DURATION, + new Returns(PostExecutionControl.defaultDispatch().withReSchedule(testDelay)))) + .when(reconciliationDispatcherMock) + .handleExecution(any()); var resourceId = new ResourceID("test1", "default"); eventProcessor.handleEvent(prepareCREvent(resourceId)); Thread.sleep(FAKE_CONTROLLER_EXECUTION_DURATION / 3); eventProcessor.handleEvent(prepareCREvent(resourceId)); - verify(retryTimerEventSourceMock, - after((long) (FAKE_CONTROLLER_EXECUTION_DURATION * 1.5)).times(0)) + verify( + retryTimerEventSourceMock, + after((long) (FAKE_CONTROLLER_EXECUTION_DURATION * 1.5)).times(0)) .scheduleOnce((ResourceID) any(), eq(testDelay)); } @@ -261,8 +262,8 @@ void cancelScheduleOnceEventsOnSuccessfulExecution() { var crID = new ResourceID("test-cr", TEST_NAMESPACE); var cr = testCustomResource(crID); - eventProcessor.eventProcessingFinished(new ExecutionScope(null).setResource(cr), - PostExecutionControl.defaultDispatch()); + eventProcessor.eventProcessingFinished( + new ExecutionScope(null).setResource(cr), PostExecutionControl.defaultDispatch()); verify(retryTimerEventSourceMock, times(1)).cancelOnceSchedule(eq(crID)); } @@ -270,13 +271,12 @@ void cancelScheduleOnceEventsOnSuccessfulExecution() { @Test void startProcessedMarkedEventReceivedBefore() { var crID = new ResourceID("test-cr", TEST_NAMESPACE); - eventProcessor = - spy(new EventProcessor(controllerConfiguration(null, - LinearRateLimiter.deactivatedRateLimiter()), reconciliationDispatcherMock, - eventSourceManagerMock, - metricsMock)); - when(controllerEventSourceMock.get(eq(crID))) - .thenReturn(Optional.of(testCustomResource())); + eventProcessor = spy(new EventProcessor( + controllerConfiguration(null, LinearRateLimiter.deactivatedRateLimiter()), + reconciliationDispatcherMock, + eventSourceManagerMock, + metricsMock)); + when(controllerEventSourceMock.get(eq(crID))).thenReturn(Optional.of(testCustomResource())); eventProcessor.handleEvent(new Event(crID)); verify(reconciliationDispatcherMock, timeout(100).times(0)).handleExecution(any()); @@ -290,23 +290,20 @@ void startProcessedMarkedEventReceivedBefore() { @Test void notUpdatesEventSourceHandlerIfResourceUpdated() { TestCustomResource customResource = testCustomResource(); - ExecutionScope executionScope = - new ExecutionScope(null).setResource(customResource); + ExecutionScope executionScope = new ExecutionScope(null).setResource(customResource); PostExecutionControl postExecutionControl = PostExecutionControl.customResourceStatusPatched(customResource); eventProcessorWithRetry.eventProcessingFinished(executionScope, postExecutionControl); - verify(controllerEventSourceMock, times(0)).handleRecentResourceUpdate(any(), any(), - any()); + verify(controllerEventSourceMock, times(0)).handleRecentResourceUpdate(any(), any(), any()); } @Test void notReschedulesAfterTheFinalizerRemoveProcessed() { TestCustomResource customResource = testCustomResource(); markForDeletion(customResource); - ExecutionScope executionScope = - new ExecutionScope(null).setResource(customResource); + ExecutionScope executionScope = new ExecutionScope(null).setResource(customResource); PostExecutionControl postExecutionControl = PostExecutionControl.customResourceFinalizerRemoved(customResource); @@ -319,8 +316,7 @@ void notReschedulesAfterTheFinalizerRemoveProcessed() { void skipEventProcessingIfFinalizerRemoveProcessed() { TestCustomResource customResource = testCustomResource(); markForDeletion(customResource); - ExecutionScope executionScope = - new ExecutionScope(null).setResource(customResource); + ExecutionScope executionScope = new ExecutionScope(null).setResource(customResource); PostExecutionControl postExecutionControl = PostExecutionControl.customResourceFinalizerRemoved(customResource); @@ -337,8 +333,7 @@ void skipEventProcessingIfFinalizerRemoveProcessed() { void newResourceAfterMissedDeleteEvent() { TestCustomResource customResource = testCustomResource(); markForDeletion(customResource); - ExecutionScope executionScope = - new ExecutionScope(null).setResource(customResource); + ExecutionScope executionScope = new ExecutionScope(null).setResource(customResource); PostExecutionControl postExecutionControl = PostExecutionControl.customResourceFinalizerRemoved(customResource); var newResource = testCustomResource(); @@ -363,7 +358,9 @@ void rateLimitsReconciliationSubmission() { .thenReturn(Optional.of(refreshPeriod)); eventProcessor.handleEvent(event); - verify(reconciliationDispatcherMock, after(FAKE_CONTROLLER_EXECUTION_DURATION).times(1)) + verify( + reconciliationDispatcherMock, + after(FAKE_CONTROLLER_EXECUTION_DURATION).times(1)) .handleExecution(any()); verify(retryTimerEventSourceMock, times(0)).scheduleOnce((ResourceID) any(), anyLong()); @@ -374,10 +371,8 @@ void rateLimitsReconciliationSubmission() { @Test void schedulesRetryForMarReconciliationInterval() { TestCustomResource customResource = testCustomResource(); - ExecutionScope executionScope = - new ExecutionScope(null).setResource(customResource); - PostExecutionControl postExecutionControl = - PostExecutionControl.defaultDispatch(); + ExecutionScope executionScope = new ExecutionScope(null).setResource(customResource); + PostExecutionControl postExecutionControl = PostExecutionControl.defaultDispatch(); eventProcessorWithRetry.eventProcessingFinished(executionScope, postExecutionControl); @@ -390,14 +385,13 @@ void schedulesRetryForMarReconciliationIntervalIfRetryExhausted() { when(mockRetryExecution.nextDelay()).thenReturn(Optional.empty()); Retry retry = mock(Retry.class); when(retry.initExecution()).thenReturn(mockRetryExecution); - eventProcessorWithRetry = - spy(new EventProcessor(controllerConfiguration(retry, - LinearRateLimiter.deactivatedRateLimiter()), reconciliationDispatcherMock, - eventSourceManagerMock, - metricsMock)); + eventProcessorWithRetry = spy(new EventProcessor( + controllerConfiguration(retry, LinearRateLimiter.deactivatedRateLimiter()), + reconciliationDispatcherMock, + eventSourceManagerMock, + metricsMock)); eventProcessorWithRetry.start(); - ExecutionScope executionScope = - new ExecutionScope(null).setResource(testCustomResource()); + ExecutionScope executionScope = new ExecutionScope(null).setResource(testCustomResource()); PostExecutionControl postExecutionControl = PostExecutionControl.exceptionDuringExecution(new RuntimeException()); when(eventProcessorWithRetry.retryEventSource()).thenReturn(retryTimerEventSourceMock); @@ -416,34 +410,34 @@ void executionOfReconciliationShouldNotStartIfProcessorStopped() throws Interrup }); final var configurationService = ConfigurationService.newOverriddenConfigurationService( - new BaseConfigurationService(), - o -> { + new BaseConfigurationService(), o -> { o.withConcurrentReconciliationThreads(1); }); - eventProcessor = - spy(new EventProcessor(controllerConfiguration(null, rateLimiterMock, configurationService), - reconciliationDispatcherMock, - eventSourceManagerMock, null)); + eventProcessor = spy(new EventProcessor( + controllerConfiguration(null, rateLimiterMock, configurationService), + reconciliationDispatcherMock, + eventSourceManagerMock, + null)); eventProcessor.start(); - eventProcessor.handleEvent(prepareCREvent(new ResourceID("test1","default"))); - eventProcessor.handleEvent(prepareCREvent(new ResourceID("test1","default"))); + eventProcessor.handleEvent(prepareCREvent(new ResourceID("test1", "default"))); + eventProcessor.handleEvent(prepareCREvent(new ResourceID("test1", "default"))); eventProcessor.stop(); // wait until both event should be handled Thread.sleep(TIME_TO_WAIT_AFTER_SUBMISSION_BEFORE_EXECUTION + 2 * DISPATCHING_DELAY); - verify(reconciliationDispatcherMock, atMostOnce()) - .handleExecution(any()); + verify(reconciliationDispatcherMock, atMostOnce()).handleExecution(any()); } @Test void cleansUpForDeleteEventEvenIfProcessorNotStarted() { ResourceID resourceID = new ResourceID("test1", "default"); - eventProcessor = - spy(new EventProcessor(controllerConfiguration(null, rateLimiterMock), - reconciliationDispatcherMock, - eventSourceManagerMock, null)); + eventProcessor = spy(new EventProcessor( + controllerConfiguration(null, rateLimiterMock), + reconciliationDispatcherMock, + eventSourceManagerMock, + null)); eventProcessor.handleEvent(prepareCREvent(resourceID)); eventProcessor.handleEvent(new ResourceEvent(ResourceAction.DELETED, resourceID, null)); @@ -453,11 +447,10 @@ void cleansUpForDeleteEventEvenIfProcessorNotStarted() { private ResourceID eventAlreadyUnderProcessing() { when(reconciliationDispatcherMock.handleExecution(any())) - .then( - (Answer) invocationOnMock -> { - Thread.sleep(FAKE_CONTROLLER_EXECUTION_DURATION); - return PostExecutionControl.defaultDispatch(); - }); + .then((Answer) invocationOnMock -> { + Thread.sleep(FAKE_CONTROLLER_EXECUTION_DURATION); + return PostExecutionControl.defaultDispatch(); + }); Event event = prepareCREvent(); eventProcessor.handleEvent(event); return event.getRelatedCustomResourceID(); @@ -470,16 +463,15 @@ private ResourceEvent prepareCREvent() { private ResourceEvent prepareCREvent(HasMetadata hasMetadata) { when(controllerEventSourceMock.get(eq(ResourceID.fromResource(hasMetadata)))) .thenReturn(Optional.of(hasMetadata)); - return new ResourceEvent(ResourceAction.UPDATED, - ResourceID.fromResource(hasMetadata), hasMetadata); + return new ResourceEvent( + ResourceAction.UPDATED, ResourceID.fromResource(hasMetadata), hasMetadata); } private ResourceEvent prepareCREvent(ResourceID resourceID) { TestCustomResource customResource = testCustomResource(resourceID); - when(controllerEventSourceMock.get(eq(resourceID))) - .thenReturn(Optional.of(customResource)); - return new ResourceEvent(ResourceAction.UPDATED, - ResourceID.fromResource(customResource), customResource); + when(controllerEventSourceMock.get(eq(resourceID))).thenReturn(Optional.of(customResource)); + return new ResourceEvent( + ResourceAction.UPDATED, ResourceID.fromResource(customResource), customResource); } private Event nonCREvent(ResourceID relatedCustomResourceUid) { @@ -495,8 +487,8 @@ ControllerConfiguration controllerConfiguration(Retry retry, RateLimiter rateLim return controllerConfiguration(retry, rateLimiter, new BaseConfigurationService()); } - ControllerConfiguration controllerConfiguration(Retry retry, RateLimiter rateLimiter, - ConfigurationService configurationService) { + ControllerConfiguration controllerConfiguration( + Retry retry, RateLimiter rateLimiter, ConfigurationService configurationService) { ControllerConfiguration res = mock(ControllerConfiguration.class); when(res.getName()).thenReturn("Test"); when(res.getRetry()).thenReturn(retry); @@ -505,5 +497,4 @@ ControllerConfiguration controllerConfiguration(Retry retry, RateLimiter rateLim when(res.getConfigurationService()).thenReturn(configurationService); return res; } - } 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 9ddb877f07..4dd061818c 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 @@ -119,8 +119,8 @@ void notPossibleAddEventSourcesForSameName() { when(eventSource.name()).thenReturn(name); final var source = eventSource; - final var exception = assertThrows(OperatorException.class, - () -> manager.registerEventSource(source)); + final var exception = + assertThrows(OperatorException.class, () -> manager.registerEventSource(source)); final var cause = exception.getCause(); assertInstanceOf(IllegalArgumentException.class, cause); assertThat(cause.getMessage()).contains("is already registered with name"); @@ -135,21 +135,18 @@ void retrievingAnEventSourceWhenMultipleAreRegisteredForATypeShouldRequireAQuali when(eventSource.name()).thenReturn("name1"); manager.registerEventSource(eventSource); - ManagedInformerEventSource eventSource2 = mock(ManagedInformerEventSource.class); when(eventSource2.name()).thenReturn("name2"); when(eventSource2.resourceType()).thenReturn(TestCustomResource.class); manager.registerEventSource(eventSource2); - final var exception = assertThrows(IllegalArgumentException.class, - () -> manager.getEventSourceFor(TestCustomResource.class)); + final var exception = assertThrows( + IllegalArgumentException.class, () -> manager.getEventSourceFor(TestCustomResource.class)); assertTrue(exception.getMessage().contains("name1")); assertTrue(exception.getMessage().contains("name2")); - assertEquals(manager.getEventSourceFor(TestCustomResource.class, "name2"), - eventSource2); - assertEquals(manager.getEventSourceFor(TestCustomResource.class, "name1"), - eventSource); + assertEquals(manager.getEventSourceFor(TestCustomResource.class, "name2"), eventSource2); + assertEquals(manager.getEventSourceFor(TestCustomResource.class, "name1"), eventSource); } @Test @@ -161,8 +158,8 @@ void changesNamespacesOnControllerAndInformerEventSources() { final var configService = new BaseConfigurationService(); when(configuration.getConfigurationService()).thenReturn(configService); - final Controller controller = new Controller(mock(Reconciler.class), configuration, - MockKubernetesClient.client(HasMetadata.class)); + final Controller controller = new Controller( + mock(Reconciler.class), configuration, MockKubernetesClient.client(HasMetadata.class)); EventSources eventSources = spy(new EventSources()); var controllerResourceEventSourceMock = mock(ControllerEventSource.class); @@ -190,8 +187,8 @@ private EventSourceManager initManager() { final var configService = new BaseConfigurationService(); when(configuration.getConfigurationService()).thenReturn(configService); - final Controller controller = new Controller(mock(Reconciler.class), configuration, - MockKubernetesClient.client(ConfigMap.class)); + final Controller controller = new Controller( + mock(Reconciler.class), configuration, MockKubernetesClient.client(ConfigMap.class)); return new EventSourceManager(controller); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourcesTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourcesTest.java index 12f0cc7331..5f26e128a7 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourcesTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/EventSourcesTest.java @@ -65,9 +65,8 @@ void eventSourcesStreamShouldNotReturnControllerEventSource() { eventSources.add(source); - assertThat(eventSources.additionalEventSources()).containsExactly( - eventSources.retryEventSource(), - source); + assertThat(eventSources.additionalEventSources()) + .containsExactly(eventSources.retryEventSource(), source); } @Test @@ -78,9 +77,8 @@ void additionalEventSourcesShouldNotContainNamedEventSources() { when(source.resourceType()).thenReturn(EventSource.class); eventSources.add(source); - - assertThat(eventSources.additionalEventSources()).containsExactly( - eventSources.retryEventSource(), source); + assertThat(eventSources.additionalEventSources()) + .containsExactly(eventSources.retryEventSource(), source); } @Test @@ -88,24 +86,21 @@ void checkControllerEventSource() { final var eventSources = new EventSources(); final var configuration = MockControllerConfiguration.forResource(HasMetadata.class); when(configuration.getConfigurationService()).thenReturn(new BaseConfigurationService()); - final var controller = new Controller(mock(Reconciler.class), configuration, - MockKubernetesClient.client(HasMetadata.class)); + final var controller = new Controller( + mock(Reconciler.class), configuration, MockKubernetesClient.client(HasMetadata.class)); eventSources.createControllerEventSource(controller); final var controllerEventSource = eventSources.controllerEventSource(); assertNotNull(controllerEventSource); assertEquals(HasMetadata.class, controllerEventSource.resourceType()); - assertEquals(controllerEventSource, - eventSources.controllerEventSource()); + assertEquals(controllerEventSource, eventSources.controllerEventSource()); } @Test void flatMappedSourcesShouldReturnOnlyUserRegisteredEventSources() { final var eventSources = new EventSources(); - final var mock1 = - eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); - final var mock2 = - eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); + final var mock1 = eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); + final var mock2 = eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); final var mock3 = eventSourceMockWithName(EventSource.class, "name3", ConfigMap.class); eventSources.add(mock1); @@ -118,10 +113,8 @@ void flatMappedSourcesShouldReturnOnlyUserRegisteredEventSources() { @Test void clearShouldWork() { final var eventSources = new EventSources(); - final var mock1 = - eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); - final var mock2 = - eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); + final var mock1 = eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); + final var mock2 = eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); final var mock3 = eventSourceMockWithName(EventSource.class, "name3", ConfigMap.class); eventSources.add(mock1); @@ -135,10 +128,8 @@ void clearShouldWork() { @Test void getShouldWork() { final var eventSources = new EventSources(); - final var mock1 = - eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); - final var mock2 = - eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); + final var mock1 = eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); + final var mock2 = eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); final var mock3 = eventSourceMockWithName(EventSource.class, "name3", ConfigMap.class); eventSources.add(mock1); @@ -150,10 +141,9 @@ void getShouldWork() { assertEquals(mock3, eventSources.get(ConfigMap.class, "name3")); assertEquals(mock3, eventSources.get(ConfigMap.class, null)); - assertThrows(IllegalArgumentException.class, () -> eventSources.get(HasMetadata.class, null)); - assertThrows(IllegalArgumentException.class, - () -> eventSources.get(ConfigMap.class, "unknown")); + assertThrows( + IllegalArgumentException.class, () -> eventSources.get(ConfigMap.class, "unknown")); assertThrows(IllegalArgumentException.class, () -> eventSources.get(null, null)); assertThrows(IllegalArgumentException.class, () -> eventSources.get(HasMetadata.class, null)); } @@ -161,10 +151,8 @@ void getShouldWork() { @Test void getEventSourcesShouldWork() { final var eventSources = new EventSources(); - final var mock1 = - eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); - final var mock2 = - eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); + final var mock1 = eventSourceMockWithName(EventSource.class, "name1", HasMetadata.class); + final var mock2 = eventSourceMockWithName(EventSource.class, "name2", HasMetadata.class); final var mock3 = eventSourceMockWithName(EventSource.class, "name3", ConfigMap.class); eventSources.add(mock1); @@ -189,9 +177,9 @@ void testConcurrentAddRemoveAndGet() throws InterruptedException { for (int i = 0; i < 1000 && !concurrentExceptionFound.get(); i++) { final var eventSources = new EventSources(); - var eventSourceList = - IntStream.range(1, 20).mapToObj(n -> eventSourceMockWithName(EventSource.class, - "name" + n, HasMetadata.class)).toList(); + var eventSourceList = IntStream.range(1, 20) + .mapToObj(n -> eventSourceMockWithName(EventSource.class, "name" + n, HasMetadata.class)) + .toList(); IntStream.range(1, 10).forEach(n -> eventSources.add(eventSourceList.get(n - 1))); @@ -220,12 +208,11 @@ void testConcurrentAddRemoveAndGet() throws InterruptedException { .isFalse(); } - EventSource eventSourceMockWithName(Class clazz, String name, - Class resourceType) { + EventSource eventSourceMockWithName( + Class clazz, String name, Class resourceType) { var mockedES = mock(clazz); when(mockedES.name()).thenReturn(name); when(mockedES.resourceType()).thenReturn(resourceType); return mockedES; } - } 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 f8f0c59845..6f1e450a00 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 @@ -81,26 +81,28 @@ static void initConfigService(boolean useSSA, boolean noCloning) { * equals will fail on the two equal but NOT identical TestCustomResources because equals is not * implemented on TestCustomResourceSpec or TestCustomResourceStatus */ - configurationService = - ConfigurationService.newOverriddenConfigurationService(new BaseConfigurationService(), - overrider -> overrider.checkingCRDAndValidateLocalModel(false) - - .withResourceCloner(new Cloner() { - @Override - public R clone(R object) { - if (noCloning) { - return object; - } else { - return new KubernetesSerialization().clone(object); - } - } - }) - .withUseSSAToPatchPrimaryResource(useSSA)); - } - - private ReconciliationDispatcher init(R customResource, - Reconciler reconciler, ControllerConfiguration configuration, - CustomResourceFacade customResourceFacade, boolean useFinalizer) { + configurationService = ConfigurationService.newOverriddenConfigurationService( + new BaseConfigurationService(), overrider -> overrider + .checkingCRDAndValidateLocalModel(false) + .withResourceCloner(new Cloner() { + @Override + public R clone(R object) { + if (noCloning) { + return object; + } else { + return new KubernetesSerialization().clone(object); + } + } + }) + .withUseSSAToPatchPrimaryResource(useSSA)); + } + + private ReconciliationDispatcher init( + R customResource, + Reconciler reconciler, + ControllerConfiguration configuration, + CustomResourceFacade customResourceFacade, + boolean useFinalizer) { final Class resourceClass = (Class) customResource.getClass(); configuration = configuration == null @@ -118,13 +120,13 @@ private ReconciliationDispatcher init(R customResourc when(configuration.maxReconciliationInterval()) .thenReturn(Optional.of(Duration.ofHours(RECONCILIATION_MAX_INTERVAL))); - Controller controller = new Controller<>(reconciler, configuration, - MockKubernetesClient.client(resourceClass)) { - @Override - public boolean useFinalizer() { - return useFinalizer; - } - }; + Controller controller = + new Controller<>(reconciler, configuration, MockKubernetesClient.client(resourceClass)) { + @Override + public boolean useFinalizer() { + return useFinalizer; + } + }; controller.start(); return new ReconciliationDispatcher<>(controller, customResourceFacade); @@ -134,8 +136,7 @@ public boolean useFinalizer() { void addFinalizerOnNewResource() { assertFalse(testCustomResource.hasFinalizer(DEFAULT_FINALIZER)); reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); - verify(reconciler, never()) - .reconcile(ArgumentMatchers.eq(testCustomResource), any()); + verify(reconciler, never()).reconcile(ArgumentMatchers.eq(testCustomResource), any()); verify(customResourceFacade, times(1)) .patchResourceWithSSA( argThat(testCustomResource -> testCustomResource.hasFinalizer(DEFAULT_FINALIZER))); @@ -149,8 +150,7 @@ void addFinalizerOnNewResourceWithoutSSA() { assertFalse(testCustomResource.hasFinalizer(DEFAULT_FINALIZER)); dispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); - verify(reconciler, never()) - .reconcile(ArgumentMatchers.eq(testCustomResource), any()); + verify(reconciler, never()).reconcile(ArgumentMatchers.eq(testCustomResource), any()); verify(customResourceFacade, times(1)) .patchResource( argThat(testCustomResource -> testCustomResource.hasFinalizer(DEFAULT_FINALIZER)), @@ -162,8 +162,7 @@ void addFinalizerOnNewResourceWithoutSSA() { void callCreateOrUpdateOnNewResourceIfFinalizerSet() { testCustomResource.addFinalizer(DEFAULT_FINALIZER); reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); - verify(reconciler, times(1)) - .reconcile(ArgumentMatchers.eq(testCustomResource), any()); + verify(reconciler, times(1)).reconcile(ArgumentMatchers.eq(testCustomResource), any()); } @Test @@ -197,8 +196,7 @@ void callCreateOrUpdateOnModifiedResourceIfFinalizerSet() { testCustomResource.addFinalizer(DEFAULT_FINALIZER); reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); - verify(reconciler, times(1)) - .reconcile(ArgumentMatchers.eq(testCustomResource), any()); + verify(reconciler, times(1)).reconcile(ArgumentMatchers.eq(testCustomResource), any()); } @Test @@ -275,11 +273,9 @@ void throwsExceptionIfFinalizerRemovalRetryExceeded() { assertThat(postExecControl.isFinalizerRemoved()).isFalse(); assertThat(postExecControl.getRuntimeException()).isPresent(); - assertThat(postExecControl.getRuntimeException().get()) - .isInstanceOf(OperatorException.class); + assertThat(postExecControl.getRuntimeException().get()).isInstanceOf(OperatorException.class); verify(customResourceFacade, times(MAX_UPDATE_RETRY)).patchResourceWithoutSSA(any(), any()); - verify(customResourceFacade, times(MAX_UPDATE_RETRY - 1)).getResource(any(), - any()); + verify(customResourceFacade, times(MAX_UPDATE_RETRY - 1)).getResource(any(), any()); } @Test @@ -356,8 +352,7 @@ void doesNotUpdateTheResourceIfNoUpdateUpdateControlIfFinalizerSet() { void addsFinalizerIfNotMarkedForDeletionAndEmptyCustomResourceReturned() { removeFinalizers(testCustomResource); reconciler.reconcile = (r, c) -> UpdateControl.noUpdate(); - when(customResourceFacade.patchResourceWithSSA(any())) - .thenReturn(testCustomResource); + when(customResourceFacade.patchResourceWithSSA(any())).thenReturn(testCustomResource); var postExecControl = reconciliationDispatcher.handleExecution(executionScopeWithCREvent(testCustomResource)); @@ -392,24 +387,21 @@ void executeControllerRegardlessGenerationInNonGenerationAwareModeIfFinalizerSet void propagatesRetryInfoToContextIfFinalizerSet() { testCustomResource.addFinalizer(DEFAULT_FINALIZER); - reconciliationDispatcher.handleExecution( - new ExecutionScope( - new RetryInfo() { - @Override - public int getAttemptCount() { - return 2; - } - - @Override - public boolean isLastAttempt() { - return true; - } - }).setResource(testCustomResource)); - - ArgumentCaptor contextArgumentCaptor = - ArgumentCaptor.forClass(Context.class); - verify(reconciler, times(1)) - .reconcile(any(), contextArgumentCaptor.capture()); + reconciliationDispatcher.handleExecution(new ExecutionScope(new RetryInfo() { + @Override + public int getAttemptCount() { + return 2; + } + + @Override + public boolean isLastAttempt() { + return true; + } + }) + .setResource(testCustomResource)); + + ArgumentCaptor contextArgumentCaptor = ArgumentCaptor.forClass(Context.class); + verify(reconciler, times(1)).reconcile(any(), contextArgumentCaptor.capture()); Context context = contextArgumentCaptor.getValue(); final var retryInfo = context.getRetryInfo().orElseGet(() -> fail("Missing optional")); assertThat(retryInfo.getAttemptCount()).isEqualTo(2); @@ -453,13 +445,12 @@ void doesNotUpdatesObservedGenerationIfStatusIsNotPatchedWhenUsingSSA() throws E final var config = MockControllerConfiguration.forResource(ObservedGenCustomResource.class); CustomResourceFacade facade = mock(CustomResourceFacade.class); when(config.isGenerationAware()).thenReturn(true); - when(reconciler.reconcile(any(), any())) - .thenReturn(UpdateControl.noUpdate()); + when(reconciler.reconcile(any(), any())).thenReturn(UpdateControl.noUpdate()); when(facade.patchStatus(any(), any())).thenReturn(observedGenResource); var dispatcher = init(observedGenResource, reconciler, config, facade, true); - PostExecutionControl control = dispatcher.handleExecution( - executionScopeWithCREvent(observedGenResource)); + PostExecutionControl control = + dispatcher.handleExecution(executionScopeWithCREvent(observedGenResource)); assertThat(control.getUpdatedCustomResource()).isEmpty(); } @@ -476,8 +467,7 @@ void doesNotPatchObservedGenerationOnCustomResourcePatch() throws Exception { when(facade.patchResource(any(), any())).thenReturn(observedGenResource); var dispatcher = init(observedGenResource, reconciler, config, facade, false); - dispatcher.handleExecution( - executionScopeWithCREvent(observedGenResource)); + dispatcher.handleExecution(executionScopeWithCREvent(observedGenResource)); verify(facade, never()).patchStatus(any(), any()); } @@ -494,23 +484,21 @@ void callErrorStatusHandlerIfImplemented() { return ErrorStatusUpdateControl.patchStatus(testCustomResource); }; - reconciliationDispatcher.handleExecution( - new ExecutionScope( - new RetryInfo() { - @Override - public int getAttemptCount() { - return 2; - } + reconciliationDispatcher.handleExecution(new ExecutionScope(new RetryInfo() { + @Override + public int getAttemptCount() { + return 2; + } - @Override - public boolean isLastAttempt() { - return true; - } - }).setResource(testCustomResource)); + @Override + public boolean isLastAttempt() { + return true; + } + }) + .setResource(testCustomResource)); verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any()); - verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), - any(), any()); + verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), any(), any()); } @Test @@ -528,8 +516,7 @@ void callErrorStatusHandlerEvenOnFirstError() { var postExecControl = reconciliationDispatcher.handleExecution( new ExecutionScope(null).setResource(testCustomResource)); verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any()); - verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), - any(), any()); + verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), any(), any()); assertThat(postExecControl.exceptionDuringExecution()).isTrue(); } @@ -547,8 +534,7 @@ void errorHandlerCanInstructNoRetryWithUpdate() { var postExecControl = reconciliationDispatcher.handleExecution( new ExecutionScope(null).setResource(testCustomResource)); - verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), - any(), any()); + verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), any(), any()); verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any()); assertThat(postExecControl.exceptionDuringExecution()).isFalse(); } @@ -567,8 +553,7 @@ void errorHandlerCanInstructNoRetryNoUpdate() { var postExecControl = reconciliationDispatcher.handleExecution( new ExecutionScope(null).setResource(testCustomResource)); - verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), - any(), any()); + verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), any(), any()); verify(customResourceFacade, times(0)).patchStatus(eq(testCustomResource), any()); assertThat(postExecControl.exceptionDuringExecution()).isFalse(); } @@ -579,22 +564,19 @@ void errorStatusHandlerCanPatchResource() { reconciler.reconcile = (r, c) -> { throw new IllegalStateException("Error Status Test"); }; - reconciler.errorHandler = - () -> ErrorStatusUpdateControl.patchStatus(testCustomResource); + reconciler.errorHandler = () -> ErrorStatusUpdateControl.patchStatus(testCustomResource); reconciliationDispatcher.handleExecution( new ExecutionScope(null).setResource(testCustomResource)); verify(customResourceFacade, times(1)).patchStatus(eq(testCustomResource), any()); - verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), - any(), any()); + verify(reconciler, times(1)).updateErrorStatus(eq(testCustomResource), any(), any()); } @Test void ifRetryLimitedToZeroMaxAttemptsErrorHandlerGetsCorrectLastAttempt() { - var configuration = - MockControllerConfiguration - .forResource((Class) testCustomResource.getClass()); + var configuration = MockControllerConfiguration.forResource( + (Class) testCustomResource.getClass()); when(configuration.getRetry()).thenReturn(new GenericRetry().setMaxAttempts(0)); reconciliationDispatcher = init(testCustomResource, reconciler, configuration, customResourceFacade, false); @@ -608,11 +590,14 @@ void ifRetryLimitedToZeroMaxAttemptsErrorHandlerGetsCorrectLastAttempt() { reconciliationDispatcher.handleExecution( new ExecutionScope(null).setResource(testCustomResource)); - verify(reconciler, times(1)).updateErrorStatus(any(), - ArgumentMatchers.argThat(context -> { - var retryInfo = context.getRetryInfo().orElseThrow(); - return retryInfo.isLastAttempt(); - }), any()); + verify(reconciler, times(1)) + .updateErrorStatus( + any(), + ArgumentMatchers.argThat(context -> { + var retryInfo = context.getRetryInfo().orElseThrow(); + return retryInfo.isLastAttempt(); + }), + any()); } @Test @@ -659,8 +644,7 @@ void reSchedulesFromErrorHandler() { throw new IllegalStateException("Error Status Test"); }; reconciler.errorHandler = - () -> ErrorStatusUpdateControl.noStatusUpdate() - .rescheduleAfter(delay); + () -> ErrorStatusUpdateControl.noStatusUpdate().rescheduleAfter(delay); var res = reconciliationDispatcher.handleExecution( new ExecutionScope(null).setResource(testCustomResource)); @@ -722,8 +706,8 @@ private class TestReconciler private Supplier errorHandler; @Override - public UpdateControl reconcile(TestCustomResource resource, - Context context) { + public UpdateControl reconcile( + TestCustomResource resource, Context context) { if (reconcile != null && resource.equals(testCustomResource)) { return reconcile.apply(resource, context); } @@ -740,10 +724,8 @@ public DeleteControl cleanup(TestCustomResource resource, Context context) { @Override public ErrorStatusUpdateControl updateErrorStatus( - TestCustomResource resource, - Context context, Exception e) { - return errorHandler != null ? errorHandler.get() - : ErrorStatusUpdateControl.noStatusUpdate(); + TestCustomResource resource, Context context, Exception e) { + return errorHandler != null ? errorHandler.get() : ErrorStatusUpdateControl.noStatusUpdate(); } } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManagerTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManagerTest.java index 1cc925fd01..607f0cee41 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManagerTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/ResourceStateManagerTest.java @@ -23,7 +23,6 @@ void init() { state2 = manager.getOrCreate(sampleResourceID2); } - @Test public void returnsNoEventPresentIfNotMarkedYet() { assertThat(state.noEventPresent()).isTrue(); @@ -86,5 +85,4 @@ public void listsResourceIDSWithEventsPresent() { assertThat(res).hasSize(1); assertThat(res.get(0).getId()).isEqualTo(sampleResourceID2); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiterTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiterTest.java index e4aa0a7123..ea3d619d13 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiterTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/rate/LinearRateLimiterTest.java @@ -64,5 +64,4 @@ void rateLimitCanBeTurnedOff() { assertThat(res).isEmpty(); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSourceTestBase.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSourceTestBase.java index 41b8b76623..9cea4790b0 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSourceTestBase.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/AbstractEventSourceTestBase.java @@ -21,7 +21,6 @@ public void setUpSource(S source) { setUpSource(source, true); } - public void setUpSource(S source, boolean start, ControllerConfiguration configurationService) { setUpSource(source, (T) mock(EventHandler.class), start, configurationService); } @@ -39,8 +38,8 @@ public void setUpSource(S source, T eventHandler, boolean start) { setUpSource(source, eventHandler, start, mock(ControllerConfiguration.class)); } - public void setUpSource(S source, T eventHandler, boolean start, - ControllerConfiguration controllerConfiguration) { + public void setUpSource( + S source, T eventHandler, boolean start, ControllerConfiguration controllerConfiguration) { this.eventHandler = eventHandler; this.source = source; diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java index 3055975a98..675935d003 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/ExternalResourceCachingEventSourceTest.java @@ -13,8 +13,9 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.*; -class ExternalResourceCachingEventSourceTest extends - AbstractEventSourceTestBase, EventHandler> { +class ExternalResourceCachingEventSourceTest + extends AbstractEventSourceTestBase< + ExternalResourceCachingEventSource, EventHandler> { @BeforeEach public void setup() { @@ -200,5 +201,4 @@ public TestExternalCachingEventSource() { super(SampleExternalResource.class, SampleExternalResource::getName); } } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/SampleExternalResource.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/SampleExternalResource.java index 6f45090b35..86eccbc57b 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/SampleExternalResource.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/SampleExternalResource.java @@ -56,10 +56,8 @@ public SampleExternalResource setValue(String value) { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; SampleExternalResource that = (SampleExternalResource) o; return Objects.equals(name, that.name) && Objects.equals(value, that.value); } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStoreTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStoreTest.java index 9381aedd0d..1250d78011 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStoreTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/BoundedItemStoreTest.java @@ -20,18 +20,18 @@ class BoundedItemStoreTest { private BoundedItemStore boundedItemStore; + @SuppressWarnings("unchecked") private final BoundedCache boundedCache = mock(BoundedCache.class); + @SuppressWarnings("unchecked") private final ResourceFetcher resourceFetcher = mock(ResourceFetcher.class); @BeforeEach void setup() { - boundedItemStore = new BoundedItemStore<>(boundedCache, - TestCustomResource.class, - namespaceKeyFunc(), - resourceFetcher); + boundedItemStore = new BoundedItemStore<>( + boundedCache, TestCustomResource.class, namespaceKeyFunc(), resourceFetcher); } @Test @@ -44,10 +44,8 @@ void shouldNotFetchResourcesFromServerIfNotKnown() { @Test void getsResourceFromServerIfNotInCache() { - boundedItemStore.put(testRes1Key(), - TestUtils.testCustomResource1()); - when(resourceFetcher.fetchResource(testRes1Key())) - .thenReturn(TestUtils.testCustomResource1()); + boundedItemStore.put(testRes1Key(), TestUtils.testCustomResource1()); + when(resourceFetcher.fetchResource(testRes1Key())).thenReturn(TestUtils.testCustomResource1()); var res = boundedItemStore.get(testRes1Key()); @@ -57,10 +55,8 @@ void getsResourceFromServerIfNotInCache() { @Test void removesResourcesNotFoundOnServerFromStore() { - boundedItemStore.put(testRes1Key(), - TestUtils.testCustomResource1()); - when(resourceFetcher.fetchResource(testRes1Key())) - .thenReturn(null); + boundedItemStore.put(testRes1Key(), TestUtils.testCustomResource1()); + when(resourceFetcher.fetchResource(testRes1Key())).thenReturn(null); var res = boundedItemStore.get(testRes1Key()); @@ -70,8 +66,7 @@ void removesResourcesNotFoundOnServerFromStore() { @Test void removesResourceFromCache() { - boundedItemStore.put(testRes1Key(), - TestUtils.testCustomResource1()); + boundedItemStore.put(testRes1Key(), TestUtils.testCustomResource1()); boundedItemStore.remove(testRes1Key()); @@ -83,8 +78,7 @@ void removesResourceFromCache() { @Test void readingKeySetDoesNotReadFromBoundedCache() { - boundedItemStore.put(testRes1Key(), - TestUtils.testCustomResource1()); + boundedItemStore.put(testRes1Key(), TestUtils.testCustomResource1()); boundedItemStore.keySet(); @@ -93,8 +87,7 @@ void readingKeySetDoesNotReadFromBoundedCache() { @Test void readingValuesDoesNotReadFromBoundedCache() { - boundedItemStore.put(testRes1Key(), - TestUtils.testCustomResource1()); + boundedItemStore.put(testRes1Key(), TestUtils.testCustomResource1()); boundedItemStore.values(); @@ -102,7 +95,8 @@ void readingValuesDoesNotReadFromBoundedCache() { } String key(HasMetadata r) { - return Cache.namespaceKeyFunc(r.getMetadata().getNamespace(), r.getMetadata().getName()); + return Cache.namespaceKeyFunc( + r.getMetadata().getNamespace(), r.getMetadata().getName()); } String testRes1Key() { diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcherTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcherTest.java index 1158e00295..8d01f4f246 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcherTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/cache/KubernetesResourceFetcherTest.java @@ -40,9 +40,7 @@ private HasMetadata namespacedResource() { private HasMetadata clusterScopedResource() { var cm = new CustomResourceDefinition(); - cm.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + cm.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); return cm; } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSourceTest.java index 4ba2a5184c..6548bbddc7 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/controller/ControllerEventSourceTest.java @@ -27,8 +27,8 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -class ControllerEventSourceTest extends - AbstractEventSourceTestBase, EventHandler> { +class ControllerEventSourceTest + extends AbstractEventSourceTestBase, EventHandler> { public static final String FINALIZER = ReconcilerUtils.getDefaultFinalizerName(TestCustomResource.class); @@ -87,8 +87,7 @@ void normalExecutionIfGenerationChanges() { @Test void handlesAllEventIfNotGenerationAware() { - source = - new ControllerEventSource<>(new TestController(false)); + source = new ControllerEventSource<>(new TestController(false)); setup(); TestCustomResource customResource1 = TestUtils.testCustomResource(); @@ -116,8 +115,8 @@ void callsBroadcastsOnResourceEvents() { source.eventReceived(ResourceAction.UPDATED, customResource1, customResource1); verify(testController.getEventSourceManager(), times(1)) - .broadcastOnResourceEvent(eq(ResourceAction.UPDATED), eq(customResource1), - eq(customResource1)); + .broadcastOnResourceEvent( + eq(ResourceAction.UPDATED), eq(customResource1), eq(customResource1)); } @Test @@ -126,9 +125,7 @@ void filtersOutEventsOnAddAndUpdate() { OnAddFilter onAddFilter = (res) -> false; OnUpdateFilter onUpdatePredicate = (res, res2) -> false; - source = - new ControllerEventSource<>( - new TestController(onAddFilter, onUpdatePredicate, null)); + source = new ControllerEventSource<>(new TestController(onAddFilter, onUpdatePredicate, null)); setUpSource(source, true, controllerConfig); source.eventReceived(ResourceAction.ADDED, cr, null); @@ -141,8 +138,7 @@ void filtersOutEventsOnAddAndUpdate() { void genericFilterFiltersOutAddUpdateAndDeleteEvents() { TestCustomResource cr = TestUtils.testCustomResource(); - source = - new ControllerEventSource<>(new TestController(null, null, res -> false)); + source = new ControllerEventSource<>(new TestController(null, null, res -> false)); setUpSource(source, true, controllerConfig); source.eventReceived(ResourceAction.ADDED, cr, null); @@ -161,15 +157,20 @@ private static class TestController extends Controller { private final EventSourceManager eventSourceManager = mock(EventSourceManager.class); - public TestController(OnAddFilter onAddFilter, + public TestController( + OnAddFilter onAddFilter, OnUpdateFilter onUpdateFilter, GenericFilter genericFilter) { - super(reconciler, new TestConfiguration(true, onAddFilter, onUpdateFilter, genericFilter), + super( + reconciler, + new TestConfiguration(true, onAddFilter, onUpdateFilter, genericFilter), MockKubernetesClient.client(TestCustomResource.class)); } public TestController(boolean generationAware) { - super(reconciler, new TestConfiguration(generationAware, null, null, null), + super( + reconciler, + new TestConfiguration(generationAware, null, null, null), MockKubernetesClient.client(TestCustomResource.class)); } @@ -184,10 +185,12 @@ public boolean useFinalizer() { } } - private static class TestConfiguration extends - ResolvedControllerConfiguration { + private static class TestConfiguration + extends ResolvedControllerConfiguration { - public TestConfiguration(boolean generationAware, OnAddFilter onAddFilter, + public TestConfiguration( + boolean generationAware, + OnAddFilter onAddFilter, OnUpdateFilter onUpdateFilter, GenericFilter genericFilter) { super( @@ -201,8 +204,10 @@ public TestConfiguration(boolean generationAware, OnAddFilter, EventHandler> { +class CachingInboundEventSourceTest + extends AbstractEventSourceTestBase< + CachingInboundEventSource, EventHandler> { @SuppressWarnings("unchecked") - private final CachingInboundEventSource.ResourceFetcher supplier = - mock( - CachingInboundEventSource.ResourceFetcher.class); + private final CachingInboundEventSource.ResourceFetcher< + SampleExternalResource, TestCustomResource> + supplier = mock(CachingInboundEventSource.ResourceFetcher.class); + private final TestCustomResource testCustomResource = TestUtils.testCustomResource(); private final CacheKeyMapper cacheKeyMapper = r -> r.getName() + "#" + r.getValue(); @BeforeEach public void setup() { - when(supplier.fetchResources(any())) - .thenReturn(Set.of(SampleExternalResource.testResource1())); + when(supplier.fetchResources(any())).thenReturn(Set.of(SampleExternalResource.testResource1())); - setUpSource(new CachingInboundEventSource<>(supplier, - SampleExternalResource.class, cacheKeyMapper)); + setUpSource( + new CachingInboundEventSource<>(supplier, SampleExternalResource.class, cacheKeyMapper)); } @Test void getSecondaryResourceFromCacheOrSupplier() throws InterruptedException { - when(supplier.fetchResources(any())) - .thenReturn(Set.of(SampleExternalResource.testResource1())); + when(supplier.fetchResources(any())).thenReturn(Set.of(SampleExternalResource.testResource1())); var value = source.getSecondaryResources(testCustomResource); @@ -59,7 +59,8 @@ void getSecondaryResourceFromCacheOrSupplier() throws InterruptedException { verify(supplier, times(1)).fetchResources(eq(testCustomResource)); verify(eventHandler, never()).handleEvent(any()); - source.handleResourceEvent(ResourceID.fromResource(testCustomResource), + source.handleResourceEvent( + ResourceID.fromResource(testCustomResource), Set.of(SampleExternalResource.testResource1(), SampleExternalResource.testResource2())); verify(supplier, times(1)).fetchResources(eq(testCustomResource)); @@ -69,11 +70,13 @@ void getSecondaryResourceFromCacheOrSupplier() throws InterruptedException { @Test void propagateEventOnDeletedResource() throws InterruptedException { - source.handleResourceEvent(ResourceID.fromResource(testCustomResource), - SampleExternalResource.testResource1()); - source.handleResourceDeleteEvent(ResourceID.fromResource(testCustomResource), + source.handleResourceEvent( + ResourceID.fromResource(testCustomResource), SampleExternalResource.testResource1()); + source.handleResourceDeleteEvent( + ResourceID.fromResource(testCustomResource), cacheKeyMapper.keyFor(SampleExternalResource.testResource1())); - source.handleResourceDeleteEvent(ResourceID.fromResource(testCustomResource), + source.handleResourceDeleteEvent( + ResourceID.fromResource(testCustomResource), cacheKeyMapper.keyFor(SampleExternalResource.testResource2())); verify(eventHandler, times(2)).handleEvent(any()); @@ -81,7 +84,8 @@ void propagateEventOnDeletedResource() throws InterruptedException { @Test void propagateEventOnUpdateResources() throws InterruptedException { - source.handleResourceEvent(ResourceID.fromResource(testCustomResource), + source.handleResourceEvent( + ResourceID.fromResource(testCustomResource), Set.of(SampleExternalResource.testResource1(), SampleExternalResource.testResource2())); verify(eventHandler, times(1)).handleEvent(any()); diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java index ce027846f0..1c50a69a87 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/InformerEventSourceTest.java @@ -93,8 +93,8 @@ void skipsAddEventPropagationViaAnnotation() { @Test void skipsUpdateEventPropagationViaAnnotation() { - informerEventSource.onUpdate(testDeployment(), - informerEventSource.addPreviousAnnotation("1", testDeployment())); + informerEventSource.onUpdate( + testDeployment(), informerEventSource.addPreviousAnnotation("1", testDeployment())); verify(eventHandlerMock, never()).handleEvent(any()); } @@ -108,9 +108,11 @@ void processEventPropagationWithoutAnnotation() { @Test void processEventPropagationWithIncorrectAnnotation() { - informerEventSource.onAdd(new DeploymentBuilder(testDeployment()).editMetadata() + informerEventSource.onAdd(new DeploymentBuilder(testDeployment()) + .editMetadata() .addToAnnotations(InformerEventSource.PREVIOUS_ANNOTATION_KEY, "invalid") - .endMetadata().build()); + .endMetadata() + .build()); verify(eventHandlerMock, times(1)).handleEvent(any()); } @@ -122,7 +124,6 @@ void propagateEventAndRemoveResourceFromTempCacheIfResourceVersionMismatch() { when(temporaryResourceCacheMock.getResourceFromCache(any())) .thenReturn(Optional.of(cachedDeployment)); - informerEventSource.onUpdate(cachedDeployment, testDeployment()); verify(eventHandlerMock, times(1)).handleEvent(any()); @@ -132,8 +133,7 @@ void propagateEventAndRemoveResourceFromTempCacheIfResourceVersionMismatch() { @Test void genericFilterForEvents() { informerEventSource.setGenericFilter(r -> false); - when(temporaryResourceCacheMock.getResourceFromCache(any())) - .thenReturn(Optional.empty()); + when(temporaryResourceCacheMock.getResourceFromCache(any())).thenReturn(Optional.empty()); informerEventSource.onAdd(testDeployment()); informerEventSource.onUpdate(testDeployment(), testDeployment()); @@ -145,8 +145,7 @@ void genericFilterForEvents() { @Test void filtersOnAddEvents() { informerEventSource.setOnAddFilter(r -> false); - when(temporaryResourceCacheMock.getResourceFromCache(any())) - .thenReturn(Optional.empty()); + when(temporaryResourceCacheMock.getResourceFromCache(any())).thenReturn(Optional.empty()); informerEventSource.onAdd(testDeployment()); @@ -156,8 +155,7 @@ void filtersOnAddEvents() { @Test void filtersOnUpdateEvents() { informerEventSource.setOnUpdateFilter((r1, r2) -> false); - when(temporaryResourceCacheMock.getResourceFromCache(any())) - .thenReturn(Optional.empty()); + when(temporaryResourceCacheMock.getResourceFromCache(any())).thenReturn(Optional.empty()); informerEventSource.onUpdate(testDeployment(), testDeployment()); @@ -167,8 +165,7 @@ void filtersOnUpdateEvents() { @Test void filtersOnDeleteEvents() { informerEventSource.setOnDeleteFilter((r, b) -> false); - when(temporaryResourceCacheMock.getResourceFromCache(any())) - .thenReturn(Optional.empty()); + when(temporaryResourceCacheMock.getResourceFromCache(any())).thenReturn(Optional.empty()); informerEventSource.onDelete(testDeployment(), true); @@ -179,15 +176,14 @@ void filtersOnDeleteEvents() { void informerStoppedHandlerShouldBeCalledWhenInformerStops() { final var exception = new RuntimeException("Informer stopped exceptionally!"); final var informerStoppedHandler = mock(InformerStoppedHandler.class); - var configuration = - ConfigurationService.newOverriddenConfigurationService(new BaseConfigurationService(), - o -> o.withInformerStoppedHandler(informerStoppedHandler)); + var configuration = ConfigurationService.newOverriddenConfigurationService( + new BaseConfigurationService(), o -> o.withInformerStoppedHandler(informerStoppedHandler)); var mockControllerConfig = mock(ControllerConfiguration.class); when(mockControllerConfig.getConfigurationService()).thenReturn(configuration); - informerEventSource = new InformerEventSource<>(informerEventSourceConfiguration, - MockKubernetesClient.client(Deployment.class, unused -> { + informerEventSource = new InformerEventSource<>( + informerEventSourceConfiguration, MockKubernetesClient.client(Deployment.class, unused -> { throw exception; })); informerEventSource.setControllerConfiguration(mockControllerConfig); @@ -205,5 +201,4 @@ Deployment testDeployment() { deployment.getMetadata().setName("test"); return deployment; } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/MappersTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/MappersTest.java index 12e7b54706..ad0b473300 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/MappersTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/MappersTest.java @@ -17,7 +17,6 @@ class MappersTest { - @Test void secondaryToPrimaryMapperFromOwnerReference() { var primary = TestUtils.testCustomResource(); @@ -25,8 +24,7 @@ void secondaryToPrimaryMapperFromOwnerReference() { var secondary = getConfigMap(primary); secondary.addOwnerReference(primary); - var res = Mappers.fromOwnerReferences(TestCustomResource.class) - .toPrimaryResourceIDs(secondary); + var res = Mappers.fromOwnerReferences(TestCustomResource.class).toPrimaryResourceIDs(secondary); assertThat(res).contains(ResourceID.fromResource(primary)); } @@ -44,7 +42,6 @@ void secondaryToPrimaryMapperFromOwnerReferenceFiltersByType() { assertThat(res).isEmpty(); } - private static ConfigMap getConfigMap(TestCustomResource primary) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndexTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndexTest.java index 6793b09550..7343b1e581 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndexTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/PrimaryToSecondaryIndexTest.java @@ -20,6 +20,7 @@ class PrimaryToSecondaryIndexTest { @SuppressWarnings("unchecked") private final SecondaryToPrimaryMapper secondaryToPrimaryMapperMock = mock(SecondaryToPrimaryMapper.class); + private final PrimaryToSecondaryIndex primaryToSecondaryIndex = new DefaultPrimaryToSecondaryIndex<>(secondaryToPrimaryMapperMock); @@ -59,10 +60,10 @@ void indexesAdditionalResources() { var secondaryResources1 = primaryToSecondaryIndex.getSecondaryResources(primaryID1); var secondaryResources2 = primaryToSecondaryIndex.getSecondaryResources(primaryID2); - assertThat(secondaryResources1).containsOnly(ResourceID.fromResource(secondary1), - ResourceID.fromResource(secondary2)); - assertThat(secondaryResources2).containsOnly(ResourceID.fromResource(secondary1), - ResourceID.fromResource(secondary2)); + assertThat(secondaryResources1) + .containsOnly(ResourceID.fromResource(secondary1), ResourceID.fromResource(secondary2)); + assertThat(secondaryResources2) + .containsOnly(ResourceID.fromResource(secondary1), ResourceID.fromResource(secondary2)); } @Test diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCacheTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCacheTest.java index 60eb7245a9..b7cab2616e 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCacheTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TemporaryResourceCacheTest.java @@ -22,8 +22,10 @@ class TemporaryResourceCacheTest { public static final String RESOURCE_VERSION = "2"; + @SuppressWarnings("unchecked") private InformerEventSource informerEventSource; + private TemporaryResourceCache temporaryResourceCache; @BeforeEach @@ -99,8 +101,11 @@ void resourceVersionParsing() { ConfigMap testResource = propagateTestResourceToCache(); // an event with a newer version will not remove - temporaryResourceCache.onAddOrUpdateEvent(new ConfigMapBuilder(testResource).editMetadata() - .withResourceVersion("1").endMetadata().build()); + temporaryResourceCache.onAddOrUpdateEvent(new ConfigMapBuilder(testResource) + .editMetadata() + .withResourceVersion("1") + .endMetadata() + .build()); assertThat(temporaryResourceCache.isKnownResourceVersion(testResource)).isTrue(); assertThat(temporaryResourceCache.getResourceFromCache(ResourceID.fromResource(testResource))) @@ -118,8 +123,13 @@ void rapidDeletion() { var testResource = testResource(); temporaryResourceCache.onAddOrUpdateEvent(testResource); - temporaryResourceCache.onDeleteEvent(new ConfigMapBuilder(testResource).editMetadata() - .withResourceVersion("3").endMetadata().build(), false); + temporaryResourceCache.onDeleteEvent( + new ConfigMapBuilder(testResource) + .editMetadata() + .withResourceVersion("3") + .endMetadata() + .build(), + false); temporaryResourceCache.putAddedResource(testResource); assertThat(temporaryResourceCache.getResourceFromCache(ResourceID.fromResource(testResource))) @@ -163,14 +173,11 @@ private ConfigMap propagateTestResourceToCache() { ConfigMap testResource() { ConfigMap configMap = new ConfigMap(); - configMap.setMetadata(new ObjectMetaBuilder() - .withLabels(Map.of("k", "v")) - .build()); + configMap.setMetadata(new ObjectMetaBuilder().withLabels(Map.of("k", "v")).build()); configMap.getMetadata().setName("test"); configMap.getMetadata().setNamespace("default"); configMap.getMetadata().setResourceVersion(RESOURCE_VERSION); configMap.getMetadata().setUid("test-uid"); return configMap; } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStoreTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStoreTest.java index 3bebc79094..9e667d7306 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStoreTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/informer/TransformingItemStoreTest.java @@ -43,7 +43,7 @@ void preservesSelectedAttributes() { assertThat(transformingItemStore.get(metaNamespaceKeyFunc(cm)).getMetadata().getNamespace()) .isNotNull(); assertThat( - transformingItemStore.get(metaNamespaceKeyFunc(cm)).getMetadata().getResourceVersion()) + transformingItemStore.get(metaNamespaceKeyFunc(cm)).getMetadata().getResourceVersion()) .isNotNull(); } @@ -51,9 +51,9 @@ ConfigMap configMap() { var cm = new ConfigMap(); cm.setMetadata(new ObjectMetaBuilder() .withName("test1") - .withNamespace("default").withResourceVersion("1") + .withNamespace("default") + .withResourceVersion("1") .build()); return cm; } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java index fd5b85aa16..5b9fac89db 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PerResourcePollingEventSourceTest.java @@ -23,30 +23,36 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; -class PerResourcePollingEventSourceTest extends - AbstractEventSourceTestBase, EventHandler> { +class PerResourcePollingEventSourceTest + extends AbstractEventSourceTestBase< + PerResourcePollingEventSource, EventHandler> { public static final int PERIOD = 150; + @SuppressWarnings("unchecked") - private final PerResourcePollingEventSource.ResourceFetcher supplier = - mock(PerResourcePollingEventSource.ResourceFetcher.class); + private final PerResourcePollingEventSource.ResourceFetcher< + SampleExternalResource, TestCustomResource> + supplier = mock(PerResourcePollingEventSource.ResourceFetcher.class); + @SuppressWarnings("unchecked") private final IndexerResourceCache resourceCache = mock(IndexerResourceCache.class); + private final TestCustomResource testCustomResource = TestUtils.testCustomResource(); private final EventSourceContext context = mock(EventSourceContext.class); @BeforeEach public void setup() { when(resourceCache.get(any())).thenReturn(Optional.of(testCustomResource)); - when(supplier.fetchResources(any())) - .thenReturn(Set.of(SampleExternalResource.testResource1())); + when(supplier.fetchResources(any())).thenReturn(Set.of(SampleExternalResource.testResource1())); when(context.getPrimaryCache()).thenReturn(resourceCache); - setUpSource(new PerResourcePollingEventSource<>(SampleExternalResource.class, context, - new PerResourcePollingConfigurationBuilder<>(supplier, Duration.ofMillis(PERIOD)) - .withCacheKeyMapper(r -> r.getName() + "#" + r.getValue()) - .build())); + setUpSource(new PerResourcePollingEventSource<>( + SampleExternalResource.class, + context, + new PerResourcePollingConfigurationBuilder<>(supplier, Duration.ofMillis(PERIOD)) + .withCacheKeyMapper(r -> r.getName() + "#" + r.getValue()) + .build())); } @Test @@ -62,9 +68,10 @@ void pollsTheResourceAfterAwareOfIt() { @Test void registeringTaskOnAPredicate() { - setUpSource(new PerResourcePollingEventSource<>(SampleExternalResource.class, context, - new PerResourcePollingConfigurationBuilder<>( - supplier, Duration.ofMillis(PERIOD)) + setUpSource(new PerResourcePollingEventSource<>( + SampleExternalResource.class, + context, + new PerResourcePollingConfigurationBuilder<>(supplier, Duration.ofMillis(PERIOD)) .withRegisterPredicate( testCustomResource -> testCustomResource.getMetadata().getGeneration() > 1) .withCacheKeyMapper(CacheKeyMapper.singleResourceCacheKeyMapper()) @@ -72,15 +79,14 @@ void registeringTaskOnAPredicate() { source.onResourceCreated(testCustomResource); - - await().pollDelay(Duration.ofMillis(2 * PERIOD)) - .untilAsserted(() -> verify(supplier, times(0)).fetchResources(eq(testCustomResource))); + await().pollDelay(Duration.ofMillis(2 * PERIOD)).untilAsserted(() -> verify(supplier, times(0)) + .fetchResources(eq(testCustomResource))); testCustomResource.getMetadata().setGeneration(2L); source.onResourceUpdated(testCustomResource, testCustomResource); - - await().pollDelay(Duration.ofMillis(2 * PERIOD)) + await() + .pollDelay(Duration.ofMillis(2 * PERIOD)) .untilAsserted(() -> verify(supplier, atLeast(1)).fetchResources(eq(testCustomResource))); } @@ -146,45 +152,50 @@ void getsValueFromCacheOrSupplier() { @Test void supportsDynamicPollingDelay() { - when(supplier.fetchResources(any())) - .thenReturn(Set.of(SampleExternalResource.testResource1())); - when(supplier.fetchDelay(any(),any())) - .thenReturn(Optional.of(Duration.ofMillis(PERIOD))) - .thenReturn(Optional.of(Duration.ofMillis(PERIOD*2))); + when(supplier.fetchResources(any())).thenReturn(Set.of(SampleExternalResource.testResource1())); + when(supplier.fetchDelay(any(), any())) + .thenReturn(Optional.of(Duration.ofMillis(PERIOD))) + .thenReturn(Optional.of(Duration.ofMillis(PERIOD * 2))); source.onResourceCreated(testCustomResource); - await().pollDelay(Duration.ofMillis(PERIOD)).atMost(Duration.ofMillis((long) (1.5 * PERIOD))) - .pollInterval(Duration.ofMillis(20)) - .untilAsserted(() -> verify(supplier,times(1)).fetchResources(any())); + await() + .pollDelay(Duration.ofMillis(PERIOD)) + .atMost(Duration.ofMillis((long) (1.5 * PERIOD))) + .pollInterval(Duration.ofMillis(20)) + .untilAsserted(() -> verify(supplier, times(1)).fetchResources(any())); // verifying that it is not called as with normal interval - await().pollDelay(Duration.ofMillis(PERIOD)).atMost(Duration.ofMillis((long) (1.5*PERIOD))) - .pollInterval(Duration.ofMillis(20)) - .untilAsserted(() -> verify(supplier,times(1)).fetchResources(any())); - await().pollDelay(Duration.ofMillis(PERIOD)).atMost(Duration.ofMillis(2 * PERIOD)) - .pollInterval(Duration.ofMillis(20)) - .untilAsserted(() -> verify(supplier,times(2)).fetchResources(any())); + await() + .pollDelay(Duration.ofMillis(PERIOD)) + .atMost(Duration.ofMillis((long) (1.5 * PERIOD))) + .pollInterval(Duration.ofMillis(20)) + .untilAsserted(() -> verify(supplier, times(1)).fetchResources(any())); + await() + .pollDelay(Duration.ofMillis(PERIOD)) + .atMost(Duration.ofMillis(2 * PERIOD)) + .pollInterval(Duration.ofMillis(20)) + .untilAsserted(() -> verify(supplier, times(2)).fetchResources(any())); } @Test void deleteEventCancelsTheScheduling() { - when(supplier.fetchResources(any())) - .thenReturn(Set.of(SampleExternalResource.testResource1())); + when(supplier.fetchResources(any())).thenReturn(Set.of(SampleExternalResource.testResource1())); source.onResourceCreated(testCustomResource); - await().pollDelay(Duration.ofMillis(PERIOD)) - .atMost(Duration.ofMillis((2* PERIOD))) - .pollInterval(Duration.ofMillis(20)) - .untilAsserted(() -> verify(supplier,times(1)).fetchResources(any())); + await() + .pollDelay(Duration.ofMillis(PERIOD)) + .atMost(Duration.ofMillis((2 * PERIOD))) + .pollInterval(Duration.ofMillis(20)) + .untilAsserted(() -> verify(supplier, times(1)).fetchResources(any())); when(resourceCache.get(any())).thenReturn(Optional.empty()); source.onResourceDeleted(testCustomResource); // check if not called again - await().pollDelay(Duration.ofMillis(2*PERIOD)) - .atMost(Duration.ofMillis((4* PERIOD))) - .untilAsserted(() -> verify(supplier,times(1)).fetchResources(any())); + await() + .pollDelay(Duration.ofMillis(2 * PERIOD)) + .atMost(Duration.ofMillis((4 * PERIOD))) + .untilAsserted(() -> verify(supplier, times(1)).fetchResources(any())); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSourceTest.java index ced96e9b7d..0ccf1e2ce3 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/polling/PollingEventSourceTest.java @@ -21,8 +21,8 @@ import static org.mockito.Mockito.*; class PollingEventSourceTest - extends - AbstractEventSourceTestBase, EventHandler> { + extends AbstractEventSourceTestBase< + PollingEventSource, EventHandler> { public static final int DEFAULT_WAIT_PERIOD = 100; public static final Duration POLL_PERIOD = Duration.ofMillis(30L); @@ -30,9 +30,14 @@ class PollingEventSourceTest @SuppressWarnings("unchecked") private final PollingEventSource.GenericResourceFetcher resourceFetcher = mock(PollingEventSource.GenericResourceFetcher.class); + private final PollingEventSource pollingEventSource = - new PollingEventSource<>(SampleExternalResource.class, - new PollingConfiguration<>(null, resourceFetcher, POLL_PERIOD, + new PollingEventSource<>( + SampleExternalResource.class, + new PollingConfiguration<>( + null, + resourceFetcher, + POLL_PERIOD, (SampleExternalResource er) -> er.getName() + "#" + er.getValue())); @BeforeEach @@ -51,7 +56,8 @@ void pollsAndProcessesEvents() throws InterruptedException { @Test void propagatesEventForRemovedResources() throws InterruptedException { - when(resourceFetcher.fetchResources()).thenReturn(testResponseWithTwoValues()) + when(resourceFetcher.fetchResources()) + .thenReturn(testResponseWithTwoValues()) .thenReturn(testResponseWithOneValue()); pollingEventSource.start(); Thread.sleep(DEFAULT_WAIT_PERIOD); @@ -82,8 +88,7 @@ void propagatesEventOnNewResourceForPrimary() throws InterruptedException { @Test void updatesHealthIndicatorBasedOnExceptionsInFetcher() throws InterruptedException { - when(resourceFetcher.fetchResources()) - .thenReturn(testResponseWithOneValue()); + when(resourceFetcher.fetchResources()).thenReturn(testResponseWithOneValue()); pollingEventSource.start(); assertThat(pollingEventSource.getStatus()).isEqualTo(Status.HEALTHY); @@ -93,8 +98,8 @@ void updatesHealthIndicatorBasedOnExceptionsInFetcher() throws InterruptedExcept .thenThrow(new RuntimeException("test exception")) .thenReturn(testResponseWithOneValue()); - await().pollInterval(POLL_PERIOD).untilAsserted( - () -> assertThat(pollingEventSource.getStatus()).isEqualTo(Status.UNHEALTHY)); + await().pollInterval(POLL_PERIOD).untilAsserted(() -> assertThat(pollingEventSource.getStatus()) + .isEqualTo(Status.UNHEALTHY)); await() .untilAsserted(() -> assertThat(pollingEventSource.getStatus()).isEqualTo(Status.HEALTHY)); @@ -118,5 +123,4 @@ private Map> testResponseWithTwoValues() res.put(primaryID2(), Set.of(testResource2())); return res; } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSourceTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSourceTest.java index 3fe3a5db58..9396411777 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSourceTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/event/source/timer/TimerEventSourceTest.java @@ -23,13 +23,12 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType; class TimerEventSourceTest - extends - AbstractEventSourceTestBase, CapturingEventHandler> { + extends AbstractEventSourceTestBase< + TimerEventSource, CapturingEventHandler> { public static final int INITIAL_DELAY = 50; public static final int PERIOD = 50; - @BeforeEach public void setup() { setUpSource(new TimerEventSource<>(), new CapturingEventHandler()); @@ -80,8 +79,8 @@ public void eventNotRegisteredIfStopped() throws IOException { var resourceID = ResourceID.fromResource(TestUtils.testCustomResource()); source.stop(); - assertThatExceptionOfType(IllegalStateException.class).isThrownBy( - () -> source.scheduleOnce(resourceID, PERIOD)); + assertThatExceptionOfType(IllegalStateException.class) + .isThrownBy(() -> source.scheduleOnce(resourceID, PERIOD)); } @Test diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecutionTest.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecutionTest.java index 1659995877..688be40bc1 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecutionTest.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/processing/retry/GenericRetryExecutionTest.java @@ -21,12 +21,11 @@ public void noNextDelayIfMaxAttemptLimitReached() { @Test public void canLimitMaxIntervalLength() { - RetryExecution retryExecution = - GenericRetry.defaultLimitedExponentialRetry() - .setInitialInterval(2000) - .setMaxInterval(4500) - .setIntervalMultiplier(2) - .initExecution(); + RetryExecution retryExecution = GenericRetry.defaultLimitedExponentialRetry() + .setInitialInterval(2000) + .setMaxInterval(4500) + .setIntervalMultiplier(2) + .initExecution(); Optional res = callNextDelayNTimes(retryExecution, 4); @@ -51,7 +50,8 @@ public void supportsIsLastExecution() { @Test public void returnAttemptIndex() { - RetryExecution retryExecution = GenericRetry.defaultLimitedExponentialRetry().initExecution(); + RetryExecution retryExecution = + GenericRetry.defaultLimitedExponentialRetry().initExecution(); assertThat(retryExecution.getAttemptCount()).isEqualTo(0); retryExecution.nextDelay(); diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenCustomResource.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenCustomResource.java index 74f58b795f..f06c0035d3 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenCustomResource.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenCustomResource.java @@ -6,8 +6,7 @@ @Group("sample.javaoperatorsdk.io") @Version("v1") -public class ObservedGenCustomResource - extends CustomResource { +public class ObservedGenCustomResource extends CustomResource { @Override protected ObservedGenSpec initSpec() { diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenSpec.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenSpec.java index 181204bc1c..30fb495c56 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenSpec.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenSpec.java @@ -14,8 +14,6 @@ public void setValue(String value) { @Override public String toString() { - return "TestCustomResourceSpec{" + - "value='" + value + '\'' + - '}'; + return "TestCustomResourceSpec{" + "value='" + value + '\'' + '}'; } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenStatus.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenStatus.java index 81ce9a435d..0f685d5b05 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenStatus.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/observedgeneration/ObservedGenStatus.java @@ -1,5 +1,3 @@ package io.javaoperatorsdk.operator.sample.observedgeneration; -public class ObservedGenStatus { - -} +public class ObservedGenStatus {} diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/NamespacedTestCustomResource.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/NamespacedTestCustomResource.java index 45bd9cb6ce..761d91dc04 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/NamespacedTestCustomResource.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/NamespacedTestCustomResource.java @@ -9,5 +9,4 @@ @Version("v1") public class NamespacedTestCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconciler.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconciler.java index be2c80667e..3466e0bde5 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconciler.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconciler.java @@ -35,14 +35,12 @@ public TestCustomReconciler(KubernetesClient kubernetesClient, boolean updateSta } @Override - public DeleteControl cleanup( - TestCustomResource resource, Context context) { - var statusDetails = - kubernetesClient - .configMaps() - .inNamespace(resource.getMetadata().getNamespace()) - .withName(resource.getSpec().getConfigMapName()) - .delete(); + public DeleteControl cleanup(TestCustomResource resource, Context context) { + var statusDetails = kubernetesClient + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) + .withName(resource.getSpec().getConfigMapName()) + .delete(); if (statusDetails.size() == 1 && statusDetails.get(0).getCauses().isEmpty()) { log.info( "Deleted ConfigMap {} for resource: {}", @@ -64,12 +62,11 @@ public UpdateControl reconcile( throw new IllegalStateException("Finalizer is not present."); } - ConfigMap existingConfigMap = - kubernetesClient - .configMaps() - .inNamespace(resource.getMetadata().getNamespace()) - .withName(resource.getSpec().getConfigMapName()) - .get(); + ConfigMap existingConfigMap = kubernetesClient + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) + .withName(resource.getSpec().getConfigMapName()) + .get(); if (existingConfigMap != null) { existingConfigMap.setData(configMapData(resource)); @@ -82,16 +79,14 @@ public UpdateControl reconcile( } else { Map labels = new HashMap<>(); labels.put("managedBy", TestCustomReconciler.class.getSimpleName()); - ConfigMap newConfigMap = - new ConfigMapBuilder() - .withMetadata( - new ObjectMetaBuilder() - .withName(resource.getSpec().getConfigMapName()) - .withNamespace(resource.getMetadata().getNamespace()) - .withLabels(labels) - .build()) - .withData(configMapData(resource)) - .build(); + ConfigMap newConfigMap = new ConfigMapBuilder() + .withMetadata(new ObjectMetaBuilder() + .withName(resource.getSpec().getConfigMapName()) + .withNamespace(resource.getMetadata().getNamespace()) + .withLabels(labels) + .build()) + .withData(configMapData(resource)) + .build(); kubernetesClient .configMaps() .inNamespace(resource.getMetadata().getNamespace()) diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconcilerOtherV1.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconcilerOtherV1.java index 97f2fb9098..5327b30a79 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconcilerOtherV1.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomReconcilerOtherV1.java @@ -9,8 +9,8 @@ public class TestCustomReconcilerOtherV1 implements Reconciler { @Override - public UpdateControl reconcile(TestCustomResourceOtherV1 resource, - Context context) { + public UpdateControl reconcile( + TestCustomResourceOtherV1 resource, Context context) { return UpdateControl.noUpdate(); } } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResource.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResource.java index 59d9d4fb91..d01bd3c747 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResource.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResource.java @@ -18,5 +18,4 @@ protected TestCustomResourceSpec initSpec() { protected TestCustomResourceStatus initStatus() { return new TestCustomResourceStatus(); } - } diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceOtherV1.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceOtherV1.java index 90e226abc8..6bb572ca4e 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceOtherV1.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceOtherV1.java @@ -9,6 +9,4 @@ @Version("v1") @Kind("TestCustomResourceOtherV1") // this is needed to override the automatically generated kind public class TestCustomResourceOtherV1 - extends CustomResource { - -} + extends CustomResource {} diff --git a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceSpec.java b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceSpec.java index 5c23cc4c95..69a6b107b2 100644 --- a/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceSpec.java +++ b/operator-framework-core/src/test/java/io/javaoperatorsdk/operator/sample/simple/TestCustomResourceSpec.java @@ -58,8 +58,9 @@ public boolean equals(Object o) { return false; } TestCustomResourceSpec that = (TestCustomResourceSpec) o; - return Objects.equals(configMapName, that.configMapName) && Objects.equals( - key, that.key) && Objects.equals(value, that.value); + return Objects.equals(configMapName, that.configMapName) + && Objects.equals(key, that.key) + && Objects.equals(value, that.value); } @Override diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java index d46987caa6..b39bdc5c7d 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/AbstractOperatorExtension.java @@ -25,11 +25,12 @@ import io.fabric8.kubernetes.client.utils.Utils; import io.javaoperatorsdk.operator.api.config.ConfigurationServiceOverrider; -public abstract class AbstractOperatorExtension implements HasKubernetesClient, - BeforeAllCallback, - BeforeEachCallback, - AfterAllCallback, - AfterEachCallback { +public abstract class AbstractOperatorExtension + implements HasKubernetesClient, + BeforeAllCallback, + BeforeEachCallback, + AfterAllCallback, + AfterEachCallback { private static final Logger LOGGER = LoggerFactory.getLogger(AbstractOperatorExtension.class); public static final int MAX_NAMESPACE_NAME_LENGTH = 63; @@ -57,8 +58,8 @@ protected AbstractOperatorExtension( KubernetesClient kubernetesClient, Function namespaceNameSupplier, Function perClassNamespaceNameSupplier) { - this.kubernetesClient = kubernetesClient != null ? kubernetesClient - : new KubernetesClientBuilder().build(); + this.kubernetesClient = + kubernetesClient != null ? kubernetesClient : new KubernetesClientBuilder().build(); this.infrastructure = infrastructure; this.infrastructureTimeout = infrastructureTimeout; this.oneNamespacePerClass = oneNamespacePerClass; @@ -68,7 +69,6 @@ protected AbstractOperatorExtension( this.perClassNamespaceNameSupplier = perClassNamespaceNameSupplier; } - @Override public void beforeAll(ExtensionContext context) { beforeAllImpl(context); @@ -98,13 +98,17 @@ public String getNamespace() { return namespace; } - public NonNamespaceOperation, Resource> resources( - Class type) { + public + NonNamespaceOperation, Resource> resources(Class type) { return kubernetesClient.resources(type).inNamespace(namespace); } public T get(Class type, String name) { - return kubernetesClient.resources(type).inNamespace(namespace).withName(name).get(); + return kubernetesClient + .resources(type) + .inNamespace(namespace) + .withName(name) + .get(); } public T create(T resource) { @@ -139,14 +143,12 @@ protected void before(ExtensionContext context) { kubernetesClient .namespaces() - .resource( - new NamespaceBuilder().withMetadata(new ObjectMetaBuilder().withName(namespace).build()) - .build()) + .resource(new NamespaceBuilder() + .withMetadata(new ObjectMetaBuilder().withName(namespace).build()) + .build()) .serverSideApply(); - kubernetesClient - .resourceList(infrastructure) - .serverSideApply(); + kubernetesClient.resourceList(infrastructure).serverSideApply(); kubernetesClient .resourceList(infrastructure) .waitUntilReady(infrastructureTimeout.toMillis(), TimeUnit.MILLISECONDS); @@ -189,7 +191,7 @@ protected void deleteOperator() { } @SuppressWarnings("unchecked") - public static abstract class AbstractBuilder> { + public abstract static class AbstractBuilder> { protected final List infrastructure; protected Duration infrastructureTimeout; protected boolean preserveNamespaceOnError; @@ -206,21 +208,17 @@ protected AbstractBuilder() { this.infrastructure = new ArrayList<>(); this.infrastructureTimeout = Duration.ofMinutes(1); - this.preserveNamespaceOnError = Utils.getSystemPropertyOrEnvVar( - "josdk.it.preserveNamespaceOnError", - false); + this.preserveNamespaceOnError = + Utils.getSystemPropertyOrEnvVar("josdk.it.preserveNamespaceOnError", false); - this.waitForNamespaceDeletion = Utils.getSystemPropertyOrEnvVar( - "josdk.it.waitForNamespaceDeletion", - true); + this.waitForNamespaceDeletion = + Utils.getSystemPropertyOrEnvVar("josdk.it.waitForNamespaceDeletion", true); - this.oneNamespacePerClass = Utils.getSystemPropertyOrEnvVar( - "josdk.it.oneNamespacePerClass", - false); + this.oneNamespacePerClass = + Utils.getSystemPropertyOrEnvVar("josdk.it.oneNamespacePerClass", false); this.namespaceDeleteTimeout = Utils.getSystemPropertyOrEnvVar( - "josdk.it.namespaceDeleteTimeout", - DEFAULT_NAMESPACE_DELETE_TIMEOUT); + "josdk.it.namespaceDeleteTimeout", DEFAULT_NAMESPACE_DELETE_TIMEOUT); } public T preserveNamespaceOnError(boolean value) { diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/ClusterDeployedOperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/ClusterDeployedOperatorExtension.java index b2ec773fcc..a0c5bb5b67 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/ClusterDeployedOperatorExtension.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/ClusterDeployedOperatorExtension.java @@ -41,10 +41,15 @@ private ClusterDeployedOperatorExtension( KubernetesClient kubernetesClient, Function namespaceNameSupplier, Function perClassNamespaceNameSupplier) { - super(infrastructure, infrastructureTimeout, oneNamespacePerClass, + super( + infrastructure, + infrastructureTimeout, + oneNamespacePerClass, preserveNamespaceOnError, waitForNamespaceDeletion, - kubernetesClient, namespaceNameSupplier, perClassNamespaceNameSupplier); + kubernetesClient, + namespaceNameSupplier, + perClassNamespaceNameSupplier); this.operatorDeployment = operatorDeployment; this.operatorDeploymentTimeout = operatorDeploymentTimeout; } @@ -65,8 +70,8 @@ protected void before(ExtensionContext context) { final var crdSuffix = "-v1.yml"; final var kubernetesClient = getKubernetesClient(); - for (var crdFile : Objects - .requireNonNull(new File(crdPath).listFiles((ignored, name) -> name.endsWith(crdSuffix)))) { + for (var crdFile : Objects.requireNonNull( + new File(crdPath).listFiles((ignored, name) -> name.endsWith(crdSuffix)))) { try (InputStream is = new FileInputStream(crdFile)) { final var crd = kubernetesClient.load(is); crd.createOrReplace(); @@ -91,10 +96,7 @@ protected void before(ExtensionContext context) { } }); - kubernetesClient - .resourceList(operatorDeployment) - .inNamespace(namespace) - .createOrReplace(); + kubernetesClient.resourceList(operatorDeployment).inNamespace(namespace).createOrReplace(); kubernetesClient .resourceList(operatorDeployment) .waitUntilReady(operatorDeploymentTimeout.toMillis(), TimeUnit.MILLISECONDS); @@ -103,7 +105,10 @@ protected void before(ExtensionContext context) { @Override protected void deleteOperator() { - getKubernetesClient().resourceList(operatorDeployment).inNamespace(namespace).delete(); + getKubernetesClient() + .resourceList(operatorDeployment) + .inNamespace(namespace) + .delete(); } public static class Builder extends AbstractBuilder { @@ -123,8 +128,8 @@ public Builder withDeploymentTimeout(Duration value) { return this; } - public Builder withOperatorDeployment(List hm, - Consumer> modifications) { + public Builder withOperatorDeployment( + List hm, Consumer> modifications) { modifications.accept(hm); operatorDeployment.addAll(hm); return this; diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplier.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplier.java index 3041ed0f31..a00246739e 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplier.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplier.java @@ -25,24 +25,27 @@ public class DefaultNamespaceNameSupplier implements Function MAX_NAMESPACE_NAME_LENGTH) { + if (classPart.length() + methodPart.length() + DELIMITERS_LENGTH + RANDOM_SUFFIX_LENGTH + > MAX_NAMESPACE_NAME_LENGTH) { if (classPart.length() > PART_RESERVED_NAME_LENGTH) { - int classPartMaxLength = - methodPart.length() > PART_RESERVED_NAME_LENGTH ? PART_RESERVED_NAME_LENGTH - : MAX_NAME_LENGTH_TOGETHER - methodPart.length(); + int classPartMaxLength = methodPart.length() > PART_RESERVED_NAME_LENGTH + ? PART_RESERVED_NAME_LENGTH + : MAX_NAME_LENGTH_TOGETHER - methodPart.length(); classPart = classPart.substring(0, Math.min(classPartMaxLength, classPart.length())); } if (methodPart.length() > PART_RESERVED_NAME_LENGTH) { - int methodPartMaxLength = - classPart.length() > PART_RESERVED_NAME_LENGTH ? PART_RESERVED_NAME_LENGTH - : MAX_NAME_LENGTH_TOGETHER - classPart.length(); + int methodPartMaxLength = classPart.length() > PART_RESERVED_NAME_LENGTH + ? PART_RESERVED_NAME_LENGTH + : MAX_NAME_LENGTH_TOGETHER - classPart.length(); methodPart = methodPart.substring(0, Math.min(methodPartMaxLength, methodPart.length())); } } - String namespace = classPart + DELIMITER + methodPart + DELIMITER + UUID.randomUUID().toString() - .substring(0, RANDOM_SUFFIX_LENGTH); + String namespace = classPart + + DELIMITER + + methodPart + + DELIMITER + + UUID.randomUUID().toString().substring(0, RANDOM_SUFFIX_LENGTH); namespace = KubernetesResourceUtil.sanitizeName(namespace).toLowerCase(Locale.US); return namespace; } diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplier.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplier.java index b184a3fc3d..b900794460 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplier.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplier.java @@ -20,9 +20,9 @@ public class DefaultPerClassNamespaceNameSupplier implements Function MAX_CLASS_NAME_LENGTH ? className.substring(0, MAX_CLASS_NAME_LENGTH) - : className; + String namespace = className.length() > MAX_CLASS_NAME_LENGTH + ? className.substring(0, MAX_CLASS_NAME_LENGTH) + : className; namespace += DELIMITER; namespace += UUID.randomUUID().toString().substring(0, RANDOM_SUFFIX_LENGTH); namespace = KubernetesResourceUtil.sanitizeName(namespace).toLowerCase(Locale.US); diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/InClusterCurl.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/InClusterCurl.java index dd9748383b..f5e29d35cb 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/InClusterCurl.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/InClusterCurl.java @@ -27,7 +27,9 @@ public String checkUrl(String url) { public String checkUrl(String... args) { String podName = KubernetesResourceUtil.sanitizeName("curl-" + UUID.randomUUID()); try { - Pod curlPod = client.run().inNamespace(namespace) + Pod curlPod = client + .run() + .inNamespace(namespace) .withRunConfig(new RunConfigBuilder() .withArgs(args) .withName(podName) @@ -35,24 +37,29 @@ public String checkUrl(String... args) { .withRestartPolicy("Never") .build()) .done(); - await("wait-for-curl-pod-run").atMost(2, MINUTES) - .until(() -> { - String phase = - client.pods().inNamespace(namespace).withName(podName).get() - .getStatus().getPhase(); - return phase.equals("Succeeded") || phase.equals("Failed"); - }); - - String curlOutput = - client.pods().inNamespace(namespace) - .withName(curlPod.getMetadata().getName()).getLog(); + await("wait-for-curl-pod-run").atMost(2, MINUTES).until(() -> { + String phase = client + .pods() + .inNamespace(namespace) + .withName(podName) + .get() + .getStatus() + .getPhase(); + return phase.equals("Succeeded") || phase.equals("Failed"); + }); + + String curlOutput = client + .pods() + .inNamespace(namespace) + .withName(curlPod.getMetadata().getName()) + .getLog(); return curlOutput; } finally { client.pods().inNamespace(namespace).withName(podName).delete(); - await("wait-for-curl-pod-stop").atMost(1, MINUTES) - .until(() -> client.pods().inNamespace(namespace).withName(podName) - .get() == null); + await("wait-for-curl-pod-stop") + .atMost(1, MINUTES) + .until(() -> client.pods().inNamespace(namespace).withName(podName).get() == null); } } } diff --git a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java index 14bc096ff2..73b56f5c61 100644 --- a/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java +++ b/operator-framework-junit5/src/main/java/io/javaoperatorsdk/operator/junit/LocallyRunOperatorExtension.java @@ -83,16 +83,16 @@ private LocallyRunOperatorExtension( this.localPortForwards = new ArrayList<>(portForwards.size()); this.additionalCustomResourceDefinitions = additionalCustomResourceDefinitions; configurationServiceOverrider = configurationServiceOverrider != null - ? configurationServiceOverrider - .andThen(overrider -> overrider.withKubernetesClient(kubernetesClient)) + ? configurationServiceOverrider.andThen( + overrider -> overrider.withKubernetesClient(kubernetesClient)) : overrider -> overrider.withKubernetesClient(kubernetesClient); this.operator = new Operator(configurationServiceOverrider); this.registeredControllers = new HashMap<>(); crdMappings = getAdditionalCRDsFromFiles(additionalCrds, getKubernetesClient()); } - static Map getAdditionalCRDsFromFiles(Iterable additionalCrds, - KubernetesClient client) { + static Map getAdditionalCRDsFromFiles( + Iterable additionalCrds, KubernetesClient client) { Map crdMappings = new HashMap<>(); additionalCrds.forEach(p -> { try (InputStream is = new FileInputStream(p)) { @@ -238,7 +238,8 @@ protected void before(ExtensionContext context) { final var kubernetesClient = getKubernetesClient(); for (var ref : portForwards) { - String podName = kubernetesClient.pods() + String podName = kubernetesClient + .pods() .inNamespace(ref.getNamespace()) .withLabel(ref.getLabelKey(), ref.getLabelValue()) .list() @@ -247,8 +248,11 @@ protected void before(ExtensionContext context) { .getMetadata() .getName(); - localPortForwards.add(kubernetesClient.pods().inNamespace(ref.getNamespace()) - .withName(podName).portForward(ref.getPort(), ref.getLocalPort())); + localPortForwards.add(kubernetesClient + .pods() + .inNamespace(ref.getNamespace()) + .withName(podName) + .portForward(ref.getPort(), ref.getLocalPort())); } additionalCustomResourceDefinitions.forEach(this::applyCrd); @@ -390,8 +394,8 @@ public Builder withReconciler(Class value) { return this; } - public Builder withPortForward(String namespace, String labelKey, String labelValue, int port, - int localPort) { + public Builder withPortForward( + String namespace, String labelKey, String labelValue, int port, int localPort) { portForwards.add(new PortForwardSpec(namespace, labelKey, labelValue, port, localPort)); return this; } @@ -425,7 +429,8 @@ public LocallyRunOperatorExtension build() { waitForNamespaceDeletion, oneNamespacePerClass, kubernetesClient, - configurationServiceOverrider, namespaceNameSupplier, + configurationServiceOverrider, + namespaceNameSupplier, perClassNamespaceNameSupplier, additionalCRDs); } @@ -438,8 +443,8 @@ private static class PortForwardSpec { final int port; final int localPort; - public PortForwardSpec(String namespace, String labelKey, String labelValue, int port, - int localPort) { + public PortForwardSpec( + String namespace, String labelKey, String labelValue, int port, int localPort) { this.namespace = namespace; this.labelKey = labelKey; this.labelValue = labelValue; diff --git a/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplierTest.java b/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplierTest.java index cd1dce1a51..90b8500c7a 100644 --- a/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplierTest.java +++ b/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultNamespaceNameSupplierTest.java @@ -9,7 +9,6 @@ class DefaultNamespaceNameSupplierTest { - DefaultNamespaceNameSupplier supplier = new DefaultNamespaceNameSupplier(); @Test @@ -40,17 +39,16 @@ void methodPartLonger() { void methodPartAndClassPartLonger() { String ns = supplier.apply(mockExtensionContext(LONG_CLASS_NAME, LONG_METHOD_NAME)); - assertThat(ns).startsWith(LONG_CLASS_NAME.substring(0, PART_RESERVED_NAME_LENGTH) + DELIMITER - + LONG_METHOD_NAME.substring(0, PART_RESERVED_NAME_LENGTH) - + DELIMITER); + assertThat(ns) + .startsWith(LONG_CLASS_NAME.substring(0, PART_RESERVED_NAME_LENGTH) + + DELIMITER + + LONG_METHOD_NAME.substring(0, PART_RESERVED_NAME_LENGTH) + + DELIMITER); shortEnoughAndEndsWithRandomString(ns); } - private static void shortEnoughAndEndsWithRandomString(String ns) { assertThat(ns.length()).isLessThanOrEqualTo(MAX_NAMESPACE_NAME_LENGTH); assertThat(ns.split("-")[2]).hasSize(RANDOM_SUFFIX_LENGTH); } - - } diff --git a/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplierTest.java b/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplierTest.java index 40e240cbd1..5e46b15551 100644 --- a/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplierTest.java +++ b/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/DefaultPerClassNamespaceNameSupplierTest.java @@ -40,5 +40,4 @@ private static void shortEnoughAndEndsWithRandomString(String ns) { assertThat(ns.length()).isLessThanOrEqualTo(MAX_NAMESPACE_NAME_LENGTH); assertThat(ns.split("-")[1]).hasSize(RANDOM_SUFFIX_LENGTH); } - } diff --git a/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/NamespaceNamingTestUtils.java b/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/NamespaceNamingTestUtils.java index 0443d0e983..72a6c66883 100644 --- a/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/NamespaceNamingTestUtils.java +++ b/operator-framework-junit5/src/test/java/io/javaoperatorsdk/operator/junit/NamespaceNamingTestUtils.java @@ -12,12 +12,13 @@ public class NamespaceNamingTestUtils { public static final String SHORT_CLASS_NAME = Method.class.getSimpleName().toLowerCase(); public static final String SHORT_METHOD_NAME = "short"; public static final String LONG_METHOD_NAME = "longmethodnametotestifistruncatedcorrectly"; - public static final String LONG_CLASS_NAME = VeryLongClassNameForSakeOfThisTestIfItWorks.class - .getSimpleName().toLowerCase(); + public static final String LONG_CLASS_NAME = + VeryLongClassNameForSakeOfThisTestIfItWorks.class.getSimpleName().toLowerCase(); // longer then 63 public static final String VERY_LONG_CLASS_NAME = VeryVeryVeryVeryVeryVeryLongClassNameForSakeOfThisTestIfItWorks.class - .getSimpleName().toLowerCase(); + .getSimpleName() + .toLowerCase(); public static ExtensionContext mockExtensionContext(String className, String methodName) { ExtensionContext extensionContext = mock(ExtensionContext.class); @@ -41,13 +42,7 @@ public static ExtensionContext mockExtensionContext(String className, String met return extensionContext; } + public static class VeryVeryVeryVeryVeryVeryLongClassNameForSakeOfThisTestIfItWorks {} - public static class VeryVeryVeryVeryVeryVeryLongClassNameForSakeOfThisTestIfItWorks { - - } - - public static class VeryLongClassNameForSakeOfThisTestIfItWorks { - - } - + public static class VeryLongClassNameForSakeOfThisTestIfItWorks {} } diff --git a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/AccumulativeMappingWriter.java b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/AccumulativeMappingWriter.java index 6f37572e24..f43e52fd4f 100644 --- a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/AccumulativeMappingWriter.java +++ b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/AccumulativeMappingWriter.java @@ -30,18 +30,16 @@ public AccumulativeMappingWriter( public AccumulativeMappingWriter loadExistingMappings() { try { - final var readonlyResource = - processingEnvironment - .getFiler() - .getResource(StandardLocation.CLASS_OUTPUT, "", resourcePath); + final var readonlyResource = processingEnvironment + .getFiler() + .getResource(StandardLocation.CLASS_OUTPUT, "", resourcePath); try (BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(readonlyResource.openInputStream()))) { - final var existingLines = - bufferedReader - .lines() - .map(l -> l.split(",")) - .collect(Collectors.toMap(parts -> parts[0], parts -> parts[1])); + final var existingLines = bufferedReader + .lines() + .map(l -> l.split(",")) + .collect(Collectors.toMap(parts -> parts[0], parts -> parts[1])); mappings.putAll(existingLines); } } catch (IOException e) { @@ -62,10 +60,9 @@ public AccumulativeMappingWriter add(String key, String value) { public void flush() { PrintWriter printWriter = null; try { - final var resource = - processingEnvironment - .getFiler() - .createResource(StandardLocation.CLASS_OUTPUT, "", resourcePath); + final var resource = processingEnvironment + .getFiler() + .createResource(StandardLocation.CLASS_OUTPUT, "", resourcePath); printWriter = new PrintWriter(resource.openOutputStream()); for (Map.Entry entry : mappings.entrySet()) { diff --git a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ClassMappingProvider.java b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ClassMappingProvider.java index d3559a9201..670100a50f 100644 --- a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ClassMappingProvider.java +++ b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ClassMappingProvider.java @@ -25,27 +25,24 @@ static Map provide(final String resourcePath, T key, V value) { try { final var classLoader = Thread.currentThread().getContextClassLoader(); final Enumeration resourcesMetadataList = classLoader.getResources(resourcePath); - for (Iterator it = resourcesMetadataList.asIterator(); it.hasNext();) { + for (Iterator it = resourcesMetadataList.asIterator(); it.hasNext(); ) { URL url = it.next(); List classNamePairs = retrieveClassNamePairs(url); - classNamePairs.forEach( - clazzPair -> { - try { - final String[] classNames = clazzPair.split(","); - if (classNames.length != 2) { - throw new IllegalStateException( - String.format( - "%s is not valid Mapping metadata, defined in %s", - clazzPair, url)); - } - - result.put( - (T) ClassUtils.getClass(classNames[0]), (V) ClassUtils.getClass(classNames[1])); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - }); + classNamePairs.forEach(clazzPair -> { + try { + final String[] classNames = clazzPair.split(","); + if (classNames.length != 2) { + throw new IllegalStateException( + String.format("%s is not valid Mapping metadata, defined in %s", clazzPair, url)); + } + + result.put( + (T) ClassUtils.getClass(classNames[0]), (V) ClassUtils.getClass(classNames[1])); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + }); } log.debug("Loaded Controller to resource mappings {}", result); return result; @@ -56,8 +53,7 @@ static Map provide(final String resourcePath, T key, V value) { private static List retrieveClassNamePairs(URL url) throws IOException { try (BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream()))) { - return br.lines() - .collect(Collectors.toList()); + return br.lines().collect(Collectors.toList()); } } } diff --git a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessor.java b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessor.java index 6440ec78a0..6dbee44208 100644 --- a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessor.java +++ b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessor.java @@ -40,9 +40,9 @@ public SourceVersion getSupportedSourceVersion() { @Override public synchronized void init(ProcessingEnvironment processingEnv) { super.init(processingEnv); - controllersResourceWriter = - new AccumulativeMappingWriter(RECONCILERS_RESOURCE_PATH, processingEnv) - .loadExistingMappings(); + controllersResourceWriter = new AccumulativeMappingWriter( + RECONCILERS_RESOURCE_PATH, processingEnv) + .loadExistingMappings(); typeParameterResolver = initializeResolver(processingEnv); } @@ -66,14 +66,11 @@ public boolean process(Set annotations, RoundEnvironment } private TypeParameterResolver initializeResolver(ProcessingEnvironment processingEnv) { - final DeclaredType resourceControllerType = - processingEnv - .getTypeUtils() - .getDeclaredType( - processingEnv - .getElementUtils() - .getTypeElement(Reconciler.class.getCanonicalName()), - processingEnv.getTypeUtils().getWildcardType(null, null)); + final DeclaredType resourceControllerType = processingEnv + .getTypeUtils() + .getDeclaredType( + processingEnv.getElementUtils().getTypeElement(Reconciler.class.getCanonicalName()), + processingEnv.getTypeUtils().getWildcardType(null, null)); return new TypeParameterResolver(resourceControllerType, 0); } @@ -84,10 +81,9 @@ private void recordCRType(TypeElement controllerClassSymbol) { controllersResourceWriter.add( controllerClassSymbol.getQualifiedName().toString(), CustomResource.class.getCanonicalName()); - System.out.println( - "No defined resource type for '" - + controllerClassSymbol.getQualifiedName() - + "': ignoring!"); + System.out.println("No defined resource type for '" + + controllerClassSymbol.getQualifiedName() + + "': ignoring!"); return; } final TypeName customResourceType = TypeName.get(resourceType); diff --git a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/RuntimeControllerMetadata.java b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/RuntimeControllerMetadata.java index 068d762c03..c2b3b13c4b 100644 --- a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/RuntimeControllerMetadata.java +++ b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/RuntimeControllerMetadata.java @@ -9,12 +9,12 @@ public class RuntimeControllerMetadata { public static final String RECONCILERS_RESOURCE_PATH = "javaoperatorsdk/reconcilers"; - private static final Map, Class> controllerToCustomResourceMappings; + private static final Map, Class> + controllerToCustomResourceMappings; static { - controllerToCustomResourceMappings = - ClassMappingProvider.provide( - RECONCILERS_RESOURCE_PATH, Reconciler.class, HasMetadata.class); + controllerToCustomResourceMappings = ClassMappingProvider.provide( + RECONCILERS_RESOURCE_PATH, Reconciler.class, HasMetadata.class); } @SuppressWarnings("unchecked") @@ -22,10 +22,9 @@ static Class getResourceClass(Reconciler reconcile final Class resourceClass = controllerToCustomResourceMappings.get(reconciler.getClass()); if (resourceClass == null) { - throw new IllegalArgumentException( - String.format( - "No custom resource has been found for controller %s", - reconciler.getClass().getCanonicalName())); + throw new IllegalArgumentException(String.format( + "No custom resource has been found for controller %s", + reconciler.getClass().getCanonicalName())); } return (Class) resourceClass; } diff --git a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/TypeParameterResolver.java b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/TypeParameterResolver.java index 1ecf8ffb81..7951d4935a 100644 --- a/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/TypeParameterResolver.java +++ b/operator-framework/src/main/java/io/javaoperatorsdk/operator/config/runtime/TypeParameterResolver.java @@ -45,11 +45,10 @@ public TypeMirror resolve(Types typeUtils, DeclaredType declaredType) { return null; } if (typeArguments.get(interestedTypeArgumentIndex).getKind() == TYPEVAR) { - typeName = - ((TypeVariable) typeArguments.get(interestedTypeArgumentIndex)) - .asElement() - .getSimpleName() - .toString(); + typeName = ((TypeVariable) typeArguments.get(interestedTypeArgumentIndex)) + .asElement() + .getSimpleName() + .toString(); } else if (typeArguments.get(interestedTypeArgumentIndex).getKind() == DECLARED) { return typeArguments.get(0); } @@ -119,11 +118,10 @@ private List findChain(Types typeUtils, DeclaredType declaredType) private ArrayList getMatchingInterfaces(Types typeUtils, TypeElement superElement) { final var result = new ArrayList(); - final var matchedInterfaces = - superElement.getInterfaces().stream() - .filter(intface -> typeUtils.isAssignable(intface, interestedClass)) - .map(i -> (DeclaredType) i) - .collect(Collectors.toList()); + final var matchedInterfaces = superElement.getInterfaces().stream() + .filter(intface -> typeUtils.isAssignable(intface, interestedClass)) + .map(i -> (DeclaredType) i) + .collect(Collectors.toList()); if (matchedInterfaces.size() > 0) { result.addAll(matchedInterfaces); final var lastFoundInterface = result.get(result.size() - 1); @@ -135,18 +133,16 @@ private ArrayList getMatchingInterfaces(Types typeUtils, TypeEleme private List findChainOfInterfaces(Types typeUtils, DeclaredType parentInterface) { final var result = new ArrayList(); - var matchingInterfaces = - ((TypeElement) parentInterface.asElement()) - .getInterfaces().stream() + var matchingInterfaces = ((TypeElement) parentInterface.asElement()) + .getInterfaces().stream() .filter(i -> typeUtils.isAssignable(i, interestedClass)) .map(i -> (DeclaredType) i) .collect(Collectors.toList()); while (matchingInterfaces.size() > 0) { result.addAll(matchingInterfaces); final var lastFoundInterface = matchingInterfaces.get(matchingInterfaces.size() - 1); - matchingInterfaces = - ((TypeElement) lastFoundInterface.asElement()) - .getInterfaces().stream() + matchingInterfaces = ((TypeElement) lastFoundInterface.asElement()) + .getInterfaces().stream() .filter(i -> typeUtils.isAssignable(i, interestedClass)) .map(i -> (DeclaredType) i) .collect(Collectors.toList()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/CRDMappingInTestExtensionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/CRDMappingInTestExtensionIT.java index e0535381fa..f03d3f93d3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/CRDMappingInTestExtensionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/CRDMappingInTestExtensionIT.java @@ -25,32 +25,36 @@ public class CRDMappingInTestExtensionIT { private final KubernetesClient client = new KubernetesClientBuilder().build(); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new TestReconciler()) - .withAdditionalCRD("src/test/resources/crd/test.crd", "src/test/crd/test.crd") - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new TestReconciler()) + .withAdditionalCRD("src/test/resources/crd/test.crd", "src/test/crd/test.crd") + .build(); @Test void correctlyAppliesManuallySpecifiedCRD() { final var crdClient = client.apiextensions().v1().customResourceDefinitions(); - await().pollDelay(Duration.ofMillis(150)) - .untilAsserted(() -> { - final var actual = crdClient.withName("tests.crd.example").get(); - assertThat(actual).isNotNull(); - assertThat(actual.getSpec().getVersions().get(0).getSchema().getOpenAPIV3Schema() - .getProperties().containsKey("foo")).isTrue(); - }); - await().pollDelay(Duration.ofMillis(150)) - .untilAsserted( - () -> assertThat(crdClient.withName("externals.crd.example").get()).isNotNull()); + await().pollDelay(Duration.ofMillis(150)).untilAsserted(() -> { + final var actual = crdClient.withName("tests.crd.example").get(); + assertThat(actual).isNotNull(); + assertThat(actual + .getSpec() + .getVersions() + .get(0) + .getSchema() + .getOpenAPIV3Schema() + .getProperties() + .containsKey("foo")) + .isTrue(); + }); + await().pollDelay(Duration.ofMillis(150)).untilAsserted(() -> assertThat( + crdClient.withName("externals.crd.example").get()) + .isNotNull()); } @Group("crd.example") @Version("v1") @Kind("Test") - private static class TestCR extends CustomResource implements Namespaced { - } + private static class TestCR extends CustomResource implements Namespaced {} @ControllerConfiguration private static class TestReconciler implements Reconciler { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/IntegrationTestConstants.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/IntegrationTestConstants.java index 0f2a976731..a4c3abfad4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/IntegrationTestConstants.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/IntegrationTestConstants.java @@ -3,5 +3,4 @@ public class IntegrationTestConstants { public static final int GARBAGE_COLLECTION_TIMEOUT_SECONDS = 60; - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ConcurrencyIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ConcurrencyIT.java index eb60907e12..90ef9da673 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ConcurrencyIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ConcurrencyIT.java @@ -26,8 +26,9 @@ class ConcurrencyIT { private static final Logger log = LoggerFactory.getLogger(ConcurrencyIT.class); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new TestReconciler(true)).build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new TestReconciler(true)) + .build(); @Test void manyResourcesGetCreatedUpdatedAndDeleted() throws InterruptedException { @@ -37,28 +38,22 @@ void manyResourcesGetCreatedUpdatedAndDeleted() throws InterruptedException { operator.resources(TestCustomResource.class).resource(tcr).create(); } - await() - .atMost(1, TimeUnit.MINUTES) - .untilAsserted( - () -> { - List items = - operator.resources(ConfigMap.class) - .withLabel( - "managedBy", TestReconciler.class.getSimpleName()) - .list() - .getItems(); - assertThat(items).hasSize(NUMBER_OF_RESOURCES_CREATED); - }); + await().atMost(1, TimeUnit.MINUTES).untilAsserted(() -> { + List items = operator + .resources(ConfigMap.class) + .withLabel("managedBy", TestReconciler.class.getSimpleName()) + .list() + .getItems(); + assertThat(items).hasSize(NUMBER_OF_RESOURCES_CREATED); + }); log.info("Updating {} resources", NUMBER_OF_RESOURCES_UPDATED); // update some resources for (int i = 0; i < NUMBER_OF_RESOURCES_UPDATED; i++) { TestCustomResource tcr = - operator.get(TestCustomResource.class, - TestUtils.TEST_CUSTOM_RESOURCE_PREFIX + i); + operator.get(TestCustomResource.class, TestUtils.TEST_CUSTOM_RESOURCE_PREFIX + i); tcr.getSpec().setValue(i + UPDATED_SUFFIX); - operator.resources(TestCustomResource.class).resource(tcr) - .createOrReplace(); + operator.resources(TestCustomResource.class).resource(tcr).createOrReplace(); } // sleep for a short time to make variability to the test, so some updates are not // executed before delete @@ -70,30 +65,21 @@ void manyResourcesGetCreatedUpdatedAndDeleted() throws InterruptedException { operator.resources(TestCustomResource.class).resource(tcr).delete(); } - await() - .atMost(1, TimeUnit.MINUTES) - .untilAsserted( - () -> { - List items = - operator.resources(ConfigMap.class) - .withLabel( - "managedBy", TestReconciler.class.getSimpleName()) - .list() - .getItems(); - // reducing configmaps to names only - better for debugging - List itemDescs = - items.stream() - .map(configMap -> configMap.getMetadata().getName()) - .collect(Collectors.toList()); - assertThat(itemDescs) - .hasSize(NUMBER_OF_RESOURCES_CREATED - NUMBER_OF_RESOURCES_DELETED); + await().atMost(1, TimeUnit.MINUTES).untilAsserted(() -> { + List items = operator + .resources(ConfigMap.class) + .withLabel("managedBy", TestReconciler.class.getSimpleName()) + .list() + .getItems(); + // reducing configmaps to names only - better for debugging + List itemDescs = items.stream() + .map(configMap -> configMap.getMetadata().getName()) + .collect(Collectors.toList()); + assertThat(itemDescs).hasSize(NUMBER_OF_RESOURCES_CREATED - NUMBER_OF_RESOURCES_DELETED); - List crs = - operator.resources(TestCustomResource.class) - .list() - .getItems(); - assertThat(crs) - .hasSize(NUMBER_OF_RESOURCES_CREATED - NUMBER_OF_RESOURCES_DELETED); - }); + List crs = + operator.resources(TestCustomResource.class).list().getItems(); + assertThat(crs).hasSize(NUMBER_OF_RESOURCES_CREATED - NUMBER_OF_RESOURCES_DELETED); + }); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/InformerErrorHandlerStartIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/InformerErrorHandlerStartIT.java index b18e9b6763..119e4de831 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/InformerErrorHandlerStartIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/InformerErrorHandlerStartIT.java @@ -23,13 +23,11 @@ class InformerErrorHandlerStartIT { @Timeout(5) void operatorStart() { KubernetesClient client = new KubernetesClientBuilder() - .withConfig(new ConfigBuilder() - .withImpersonateUsername("user-with-no-rights") - .build()) + .withConfig( + new ConfigBuilder().withImpersonateUsername("user-with-no-rights").build()) .build(); - Operator operator = new Operator(o -> o - .withKubernetesClient(client) + Operator operator = new Operator(o -> o.withKubernetesClient(client) .withStopOnInformerErrorDuringStartup(false) .withCacheSyncTimeout(Duration.ofSeconds(2))); operator.register(new ConfigMapReconciler()); @@ -44,5 +42,4 @@ public UpdateControl reconcile(ConfigMap resource, Context return UpdateControl.noUpdate(); } } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/LeaderElectionPermissionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/LeaderElectionPermissionIT.java index 2523e15423..4499e7ff62 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/LeaderElectionPermissionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/LeaderElectionPermissionIT.java @@ -30,27 +30,24 @@ void operatorStopsIfNoLeaderElectionPermission() { applyRole(); applyRoleBinding(); - var client = new KubernetesClientBuilder().withConfig(new ConfigBuilder() - .withImpersonateUsername("leader-elector-stop-noaccess") - .build()).build(); + var client = new KubernetesClientBuilder() + .withConfig(new ConfigBuilder() + .withImpersonateUsername("leader-elector-stop-noaccess") + .build()) + .build(); var operator = new Operator(o -> { o.withKubernetesClient(client); - o.withLeaderElectionConfiguration( - new LeaderElectionConfiguration("lease1", "default")); + o.withLeaderElectionConfiguration(new LeaderElectionConfiguration("lease1", "default")); o.withStopOnInformerErrorDuringStartup(false); }); operator.register(new TestReconciler(), o -> o.settingNamespace("default")); - OperatorException exception = assertThrows( - OperatorException.class, - operator::start); + OperatorException exception = assertThrows(OperatorException.class, operator::start); - assertThat(exception.getCause().getMessage()) - .contains(NO_PERMISSION_TO_LEASE_RESOURCE_MESSAGE); + assertThat(exception.getCause().getMessage()).contains(NO_PERMISSION_TO_LEASE_RESOURCE_MESSAGE); } - @ControllerConfiguration public static class TestReconciler implements Reconciler { @Override @@ -61,15 +58,14 @@ public UpdateControl reconcile(ConfigMap resource, Context } private void applyRoleBinding() { - var clusterRoleBinding = ReconcilerUtils - .loadYaml(RoleBinding.class, this.getClass(), - "leader-elector-stop-noaccess-role-binding.yaml"); + var clusterRoleBinding = ReconcilerUtils.loadYaml( + RoleBinding.class, this.getClass(), "leader-elector-stop-noaccess-role-binding.yaml"); adminClient.resource(clusterRoleBinding).createOrReplace(); } private void applyRole() { - var role = ReconcilerUtils - .loadYaml(Role.class, this.getClass(), "leader-elector-stop-role-noaccess.yaml"); + var role = ReconcilerUtils.loadYaml( + Role.class, this.getClass(), "leader-elector-stop-role-noaccess.yaml"); adminClient.resource(role).createOrReplace(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerIT.java index 3867711f7f..0c60087e56 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerIT.java @@ -20,10 +20,9 @@ class BuiltInResourceCleanerIT { private static final Logger log = LoggerFactory.getLogger(BuiltInResourceCleanerIT.class); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new BuiltInResourceCleanerReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new BuiltInResourceCleanerReconciler()) + .build(); /** * Issue is with generation, some built in resources like Pod, Service does not seem to use @@ -34,8 +33,10 @@ void cleanerIsCalledOnBuiltInResource() { var service = operator.create(testService()); await().untilAsserted(() -> { - assertThat(operator.getReconcilerOfType(BuiltInResourceCleanerReconciler.class) - .getReconcileCount()).isPositive(); + assertThat(operator + .getReconcilerOfType(BuiltInResourceCleanerReconciler.class) + .getReconcileCount()) + .isPositive(); var actualService = operator.get(Service.class, service.getMetadata().getName()); assertThat(actualService.getMetadata().getFinalizers()).isNotEmpty(); }); @@ -43,16 +44,19 @@ void cleanerIsCalledOnBuiltInResource() { operator.delete(service); await().untilAsserted(() -> { - assertThat(operator.getReconcilerOfType(BuiltInResourceCleanerReconciler.class) - .getCleanCount()).isPositive(); + assertThat(operator + .getReconcilerOfType(BuiltInResourceCleanerReconciler.class) + .getCleanCount()) + .isPositive(); }); } Service testService() { - Service service = ReconcilerUtils.loadYaml(Service.class, StandaloneDependentResourceIT.class, + Service service = ReconcilerUtils.loadYaml( + Service.class, + StandaloneDependentResourceIT.class, "/io/javaoperatorsdk/operator/service-template.yaml"); service.getMetadata().setLabels(Map.of("builtintest", "true")); return service; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerReconciler.java index 79150eb745..5b42e795c3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/builtinresourcecleaner/BuiltInResourceCleanerReconciler.java @@ -7,16 +7,13 @@ import io.javaoperatorsdk.operator.api.reconciler.*; @ControllerConfiguration(informer = @Informer(labelSelector = "builtintest=true")) -public class BuiltInResourceCleanerReconciler - implements Reconciler, Cleaner { +public class BuiltInResourceCleanerReconciler implements Reconciler, Cleaner { private final AtomicInteger reconciled = new AtomicInteger(0); private final AtomicInteger cleaned = new AtomicInteger(0); @Override - public UpdateControl reconcile( - Service resource, - Context context) { + public UpdateControl reconcile(Service resource, Context context) { reconciled.addAndGet(1); return UpdateControl.noUpdate(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceIT.java index 1f6806aed7..a4ba74b5aa 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceIT.java @@ -29,9 +29,9 @@ class ChangeNamespaceIT { public static final String ADDITIONAL_TEST_NAMESPACE = "additional-test-namespace"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new ChangeNamespaceTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new ChangeNamespaceTestReconciler()) + .build(); @BeforeEach void setup() { @@ -56,15 +56,14 @@ void addNewAndRemoveOldNamespaceTest() { // adding additional namespace RegisteredController registeredController = operator.getRegisteredControllerForReconcile(ChangeNamespaceTestReconciler.class); - registeredController - .changeNamespaces(Set.of(operator.getNamespace(), ADDITIONAL_TEST_NAMESPACE)); + registeredController.changeNamespaces( + Set.of(operator.getNamespace(), ADDITIONAL_TEST_NAMESPACE)); assertReconciled(reconciler, resourceInAdditionalTestNamespace); // removing a namespace registeredController.changeNamespaces(Set.of(ADDITIONAL_TEST_NAMESPACE)); - var newResourceInDefaultNamespace = operator.create(customResource(TEST_RESOURCE_NAME_3)); assertNotReconciled(reconciler, newResourceInDefaultNamespace); @@ -84,8 +83,7 @@ void changeToWatchAllNamespaces() { var registeredController = operator.getRegisteredControllerForReconcile(ChangeNamespaceTestReconciler.class); - registeredController - .changeNamespaces(Set.of(Constants.WATCH_ALL_NAMESPACES)); + registeredController.changeNamespaces(Set.of(Constants.WATCH_ALL_NAMESPACES)); assertReconciled(reconciler, resourceInAdditionalTestNamespace); @@ -97,20 +95,20 @@ void changeToWatchAllNamespaces() { assertNotReconciled(reconciler, resource2InAdditionalResource); } - private static void assertReconciled(ChangeNamespaceTestReconciler reconciler, + private static void assertReconciled( + ChangeNamespaceTestReconciler reconciler, ChangeNamespaceTestCustomResource resourceInAdditionalTestNamespace) { - await().untilAsserted( - () -> assertThat( + await().untilAsserted(() -> assertThat( reconciler.numberOfResourceReconciliations(resourceInAdditionalTestNamespace)) - .isEqualTo(2)); + .isEqualTo(2)); } - private static void assertNotReconciled(ChangeNamespaceTestReconciler reconciler, + private static void assertNotReconciled( + ChangeNamespaceTestReconciler reconciler, ChangeNamespaceTestCustomResource resourceInAdditionalTestNamespace) { - await().pollDelay(Duration.ofMillis(200)).untilAsserted( - () -> assertThat( + await().pollDelay(Duration.ofMillis(200)).untilAsserted(() -> assertThat( reconciler.numberOfResourceReconciliations(resourceInAdditionalTestNamespace)) - .isZero()); + .isZero()); } private ChangeNamespaceTestCustomResource createResourceInAdditionalNamespace() { @@ -119,7 +117,8 @@ private ChangeNamespaceTestCustomResource createResourceInAdditionalNamespace() private ChangeNamespaceTestCustomResource createResourceInAdditionalNamespace(String name) { var res = customResource(name); - return client().resources(ChangeNamespaceTestCustomResource.class) + return client() + .resources(ChangeNamespaceTestCustomResource.class) .inNamespace(ADDITIONAL_TEST_NAMESPACE) .resource(res) .create(); @@ -130,15 +129,15 @@ private KubernetesClient client() { } private Namespace additionalTestNamespace() { - return new NamespaceBuilder().withMetadata(new ObjectMetaBuilder() - .withName(ADDITIONAL_TEST_NAMESPACE) - .build()).build(); + return new NamespaceBuilder() + .withMetadata( + new ObjectMetaBuilder().withName(ADDITIONAL_TEST_NAMESPACE).build()) + .build(); } private ChangeNamespaceTestCustomResource customResource(String name) { ChangeNamespaceTestCustomResource customResource = new ChangeNamespaceTestCustomResource(); - customResource.setMetadata( - new ObjectMetaBuilder().withName(name).build()); + customResource.setMetadata(new ObjectMetaBuilder().withName(name).build()); return customResource; } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestCustomResource.java index eff8a4bb3f..853d10e433 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestCustomResource.java @@ -8,7 +8,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") public class ChangeNamespaceTestCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestReconciler.java index fc14b0951f..b1072b0b4d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/changenamespace/ChangeNamespaceTestReconciler.java @@ -25,8 +25,8 @@ public List> prepareEventSourc InformerEventSource configMapES = new InformerEventSource<>( - InformerEventSourceConfiguration - .from(ConfigMap.class, ChangeNamespaceTestCustomResource.class) + InformerEventSourceConfiguration.from( + ConfigMap.class, ChangeNamespaceTestCustomResource.class) .build(), context); @@ -40,7 +40,10 @@ public UpdateControl reconcile( var actualConfigMap = context.getSecondaryResource(ConfigMap.class); if (actualConfigMap.isEmpty()) { - context.getClient().configMaps().inNamespace(primary.getMetadata().getNamespace()) + context + .getClient() + .configMaps() + .inNamespace(primary.getMetadata().getNamespace()) .resource(configMap(primary)) .create(); } @@ -52,9 +55,9 @@ public UpdateControl reconcile( var statusPatchResource = new ChangeNamespaceTestCustomResource(); statusPatchResource.setMetadata(new ObjectMetaBuilder() - .withName(primary.getMetadata().getName()) - .withNamespace(primary.getMetadata().getNamespace()) - .build()); + .withName(primary.getMetadata().getName()) + .withNamespace(primary.getMetadata().getNamespace()) + .build()); statusPatchResource.setStatus(new ChangeNamespaceTestCustomResourceStatus()); var statusUpdates = primary.getStatus().getNumberOfStatusUpdates(); statusPatchResource.getStatus().setNumberOfStatusUpdates(statusUpdates + 1); @@ -73,7 +76,8 @@ public int numberOfResourceReconciliations(ChangeNamespaceTestCustomResource pri private ConfigMap configMap(ChangeNamespaceTestCustomResource primary) { ConfigMap configMap = new ConfigMap(); - configMap.setMetadata(new ObjectMetaBuilder().withName(primary.getMetadata().getName()) + configMap.setMetadata(new ObjectMetaBuilder() + .withName(primary.getMetadata().getName()) .withNamespace(primary.getMetadata().getNamespace()) .build()); configMap.setData(Map.of("data", primary.getMetadata().getName())); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerCustomResource.java index 4367d6d089..d4f8aa6b0c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerCustomResource.java @@ -11,7 +11,5 @@ @Version("v1") @Kind("CleanerForReconcilerCustomResource") @ShortNames("cfr") -public class CleanerForReconcilerCustomResource - extends CustomResource - implements Namespaced { -} +public class CleanerForReconcilerCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerIT.java index 04ea2f9646..14ea57bef4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerIT.java @@ -14,10 +14,9 @@ class CleanerForReconcilerIT { public static final String TEST_RESOURCE_NAME = "cleaner-for-reconciler-test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new CleanerForReconcilerTestReconciler()) - .build(); - + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new CleanerForReconcilerTestReconciler()) + .build(); @Test void addsFinalizerAndCallsCleanupIfCleanerImplemented() { @@ -28,13 +27,17 @@ void addsFinalizerAndCallsCleanupIfCleanerImplemented() { var testResource = createTestResource(); operator.create(testResource); - await().until(() -> !operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) - .getMetadata().getFinalizers().isEmpty()); + await().until(() -> !operator + .get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) + .getMetadata() + .getFinalizers() + .isEmpty()); operator.delete(testResource); - await().until( - () -> operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) == null); + await() + .until(() -> + operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) == null); assertThat(reconciler.getNumberOfExecutions()).isEqualTo(1); assertThat(reconciler.getNumberOfCleanupExecutions()).isEqualTo(1); @@ -49,17 +52,21 @@ void reSchedulesCleanupIfInstructed() { var testResource = createTestResource(); operator.create(testResource); - await().until(() -> !operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) - .getMetadata().getFinalizers().isEmpty()); + await().until(() -> !operator + .get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) + .getMetadata() + .getFinalizers() + .isEmpty()); operator.delete(testResource); - await().untilAsserted( - () -> assertThat(reconciler.getNumberOfCleanupExecutions()).isGreaterThan(5)); + await().untilAsserted(() -> assertThat(reconciler.getNumberOfCleanupExecutions()) + .isGreaterThan(5)); reconciler.setReScheduleCleanup(false); - await().until( - () -> operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) == null); + await() + .until(() -> + operator.get(CleanerForReconcilerCustomResource.class, TEST_RESOURCE_NAME) == null); } private CleanerForReconcilerCustomResource createTestResource() { @@ -68,5 +75,4 @@ private CleanerForReconcilerCustomResource createTestResource() { cr.getMetadata().setName(TEST_RESOURCE_NAME); return cr; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerTestReconciler.java index 8bb5fa1062..4c19e41952 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanerforreconciler/CleanerForReconcilerTestReconciler.java @@ -8,8 +8,8 @@ @ControllerConfiguration public class CleanerForReconcilerTestReconciler implements Reconciler, - Cleaner, - TestExecutionInfoProvider { + Cleaner, + TestExecutionInfoProvider { public static final int RESCHEDULE_DELAY = 150; private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @@ -34,7 +34,8 @@ public int getNumberOfCleanupExecutions() { } @Override - public DeleteControl cleanup(CleanerForReconcilerCustomResource resource, + public DeleteControl cleanup( + CleanerForReconcilerCustomResource resource, Context context) { if (reScheduleCleanup) { numberOfCleanupExecutions.addAndGet(1); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictCustomResource.java index 82f51c1f83..58a118761d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictCustomResource.java @@ -12,7 +12,4 @@ @Kind("CleanupConflictCustomResource") @ShortNames("ccc") public class CleanupConflictCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictIT.java index 4d79d6d1d3..6a2bd61978 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictIT.java @@ -18,9 +18,9 @@ class CleanupConflictIT { public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new CleanupConflictReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new CleanupConflictReconciler()) + .build(); @Test void cleanupRemovesFinalizerWithoutConflict() throws InterruptedException { @@ -28,9 +28,10 @@ void cleanupRemovesFinalizerWithoutConflict() throws InterruptedException { testResource.addFinalizer(ADDITIONAL_FINALIZER); testResource = operator.create(testResource); - await().untilAsserted( - () -> assertThat(operator.getReconcilerOfType(CleanupConflictReconciler.class) - .getNumberReconcileExecutions()).isEqualTo(1)); + await().untilAsserted(() -> assertThat(operator + .getReconcilerOfType(CleanupConflictReconciler.class) + .getNumberReconcileExecutions()) + .isEqualTo(1)); operator.delete(testResource); Thread.sleep(WAIT_TIME / 2); @@ -39,9 +40,10 @@ void cleanupRemovesFinalizerWithoutConflict() throws InterruptedException { testResource.getMetadata().setResourceVersion(null); operator.replace(testResource); - await().pollDelay(Duration.ofMillis(WAIT_TIME * 2)).untilAsserted( - () -> assertThat(operator.getReconcilerOfType(CleanupConflictReconciler.class) - .getNumberOfCleanupExecutions()).isEqualTo(1)); + await().pollDelay(Duration.ofMillis(WAIT_TIME * 2)).untilAsserted(() -> assertThat(operator + .getReconcilerOfType(CleanupConflictReconciler.class) + .getNumberOfCleanupExecutions()) + .isEqualTo(1)); } private CleanupConflictCustomResource createTestResource() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictReconciler.java index 1c66fde159..7f2bb64896 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/cleanupconflict/CleanupConflictReconciler.java @@ -14,15 +14,14 @@ public class CleanupConflictReconciler @Override public UpdateControl reconcile( - CleanupConflictCustomResource resource, - Context context) { + CleanupConflictCustomResource resource, Context context) { numberReconcileExecutions.addAndGet(1); return UpdateControl.noUpdate(); } @Override - public DeleteControl cleanup(CleanupConflictCustomResource resource, - Context context) { + public DeleteControl cleanup( + CleanupConflictCustomResource resource, Context context) { numberOfCleanupExecutions.addAndGet(1); try { Thread.sleep(WAIT_TIME); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResource.java index 0e26316cfb..11250ed2b3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResource.java @@ -9,7 +9,4 @@ @Version("v1") @ShortNames("csc") public class ClusterScopedCustomResource - extends CustomResource { - - -} + extends CustomResource {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResourceReconciler.java index dd3316f8fc..62757de46a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResourceReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedCustomResourceReconciler.java @@ -32,11 +32,13 @@ public UpdateControl reconcile( var optionalConfigMap = context.getSecondaryResource(ConfigMap.class); final var client = context.getClient(); - optionalConfigMap.ifPresentOrElse(cm -> { - if (!resource.getSpec().getData().equals(cm.getData().get(DATA_KEY))) { - client.configMaps().resource(desired(resource)).replace(); - } - }, () -> client.configMaps().resource(desired(resource)).create()); + optionalConfigMap.ifPresentOrElse( + cm -> { + if (!resource.getSpec().getData().equals(cm.getData().get(DATA_KEY))) { + client.configMaps().resource(desired(resource)).replace(); + } + }, + () -> client.configMaps().resource(desired(resource)).create()); resource.setStatus(new ClusterScopedCustomResourceStatus()); resource.getStatus().setCreated(true); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedResourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedResourceIT.java index e923084425..2f36c341b7 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedResourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/clusterscopedresource/ClusterScopedResourceIT.java @@ -18,10 +18,11 @@ class ClusterScopedResourceIT { public static final String TEST_NAME = "test1"; public static final String INITIAL_DATA = "initialData"; public static final String UPDATED_DATA = "updatedData"; + @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new ClusterScopedCustomResourceReconciler()).build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new ClusterScopedCustomResourceReconciler()) + .build(); @Test void crudOperationOnClusterScopedCustomResource() { @@ -47,21 +48,19 @@ void crudOperationOnClusterScopedCustomResource() { }); operator.delete(resource); - await().atMost(Duration.ofSeconds(GARBAGE_COLLECTION_TIMEOUT_SECONDS)) - .untilAsserted(() -> assertThat(operator.get(ConfigMap.class, TEST_NAME)).isNull()); + await() + .atMost(Duration.ofSeconds(GARBAGE_COLLECTION_TIMEOUT_SECONDS)) + .untilAsserted( + () -> assertThat(operator.get(ConfigMap.class, TEST_NAME)).isNull()); } - ClusterScopedCustomResource testResource() { var res = new ClusterScopedCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_NAME).build()); res.setSpec(new ClusterScopedCustomResourceSpec()); res.getSpec().setTargetNamespace(operator.getNamespace()); res.getSpec().setData(INITIAL_DATA); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResource.java index 31ef818cd6..9b56bbc650 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResource.java @@ -10,8 +10,5 @@ @Version("v1") @ShortNames("cue") public class CreateUpdateEventFilterTestCustomResource - extends - CustomResource - implements Namespaced { - -} + extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResourceSpec.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResourceSpec.java index 4575e68db0..fb38fa9f39 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResourceSpec.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestCustomResourceSpec.java @@ -12,5 +12,4 @@ public CreateUpdateEventFilterTestCustomResourceSpec setValue(String value) { this.value = value; return this; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java index 4ec65f5673..242a91ccae 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateEventFilterTestReconciler.java @@ -32,12 +32,12 @@ public UpdateControl reconcile( Context context) { numberOfExecutions.incrementAndGet(); - ConfigMap configMap = - context.getClient() - .configMaps() - .inNamespace(resource.getMetadata().getNamespace()) - .withName(resource.getMetadata().getName()) - .get(); + ConfigMap configMap = context + .getClient() + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) + .withName(resource.getMetadata().getName()) + .get(); if (configMap == null) { configMapDR.desired = createConfigMap(resource); configMapDR.reconcile(resource, context); @@ -70,14 +70,12 @@ private ConfigMap createConfigMap(CreateUpdateEventFilterTestCustomResource reso public List> prepareEventSources( EventSourceContext context) { InformerEventSourceConfiguration informerConfiguration = - InformerEventSourceConfiguration - .from(ConfigMap.class, CreateUpdateEventFilterTestCustomResource.class) + InformerEventSourceConfiguration.from( + ConfigMap.class, CreateUpdateEventFilterTestCustomResource.class) .withLabelSelector("integrationtest = " + this.getClass().getSimpleName()) .build(); - final var informerEventSource = - new InformerEventSource<>( - informerConfiguration, context); + final var informerEventSource = new InformerEventSource<>(informerConfiguration, context); this.configMapDR.setEventSource(informerEventSource); return List.of(informerEventSource); @@ -88,8 +86,8 @@ public int getNumberOfExecutions() { } private static final class DirectConfigMapDependentResource - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + ConfigMap, CreateUpdateEventFilterTestCustomResource> { private ConfigMap desired; @@ -98,14 +96,17 @@ private DirectConfigMapDependentResource(Class resourceType) { } @Override - protected ConfigMap desired(CreateUpdateEventFilterTestCustomResource primary, + protected ConfigMap desired( + CreateUpdateEventFilterTestCustomResource primary, Context context) { return desired; } @Override public void setEventSource( - io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource eventSource) { + io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource< + ConfigMap, CreateUpdateEventFilterTestCustomResource> + eventSource) { super.setEventSource(eventSource); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateInformerEventSourceEventFilterIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateInformerEventSourceEventFilterIT.java index 9c69087e74..fefd68367d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateInformerEventSourceEventFilterIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/CreateUpdateInformerEventSourceEventFilterIT.java @@ -16,42 +16,40 @@ class CreateUpdateInformerEventSourceEventFilterIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new CreateUpdateEventFilterTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new CreateUpdateEventFilterTestReconciler()) + .build(); @Test void updateEventNotReceivedAfterCreateOrUpdate() { CreateUpdateEventFilterTestCustomResource resource = CreateUpdateInformerEventSourceEventFilterIT.prepareTestResource(); - var createdResource = - operator.create(resource); + var createdResource = operator.create(resource); assertData(operator, createdResource, 1, 1); - CreateUpdateEventFilterTestCustomResource actualCreatedResource = - operator.get(CreateUpdateEventFilterTestCustomResource.class, - resource.getMetadata().getName()); + CreateUpdateEventFilterTestCustomResource actualCreatedResource = operator.get( + CreateUpdateEventFilterTestCustomResource.class, resource.getMetadata().getName()); actualCreatedResource.getSpec().setValue("2"); operator.replace(actualCreatedResource); assertData(operator, actualCreatedResource, 2, 2); } - static void assertData(LocallyRunOperatorExtension operator, - CreateUpdateEventFilterTestCustomResource resource, int minExecutions, int maxExecutions) { - await() - .atMost(Duration.ofSeconds(1)) - .until(() -> { - var cm = operator.get(ConfigMap.class, resource.getMetadata().getName()); - if (cm == null) { - return false; - } - return cm.getData() - .get(CONFIG_MAP_TEST_DATA_KEY) - .equals(resource.getSpec().getValue()); - }); + static void assertData( + LocallyRunOperatorExtension operator, + CreateUpdateEventFilterTestCustomResource resource, + int minExecutions, + int maxExecutions) { + await().atMost(Duration.ofSeconds(1)).until(() -> { + var cm = operator.get(ConfigMap.class, resource.getMetadata().getName()); + if (cm == null) { + return false; + } + return cm.getData() + .get(CONFIG_MAP_TEST_DATA_KEY) + .equals(resource.getSpec().getValue()); + }); int numberOfExecutions = ((CreateUpdateEventFilterTestReconciler) operator.getFirstReconciler()) .getNumberOfExecutions(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/PreviousAnnotationDisabledIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/PreviousAnnotationDisabledIT.java index 209c5fd15c..bbf7443652 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/PreviousAnnotationDisabledIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/createupdateeventfilter/PreviousAnnotationDisabledIT.java @@ -8,29 +8,25 @@ class PreviousAnnotationDisabledIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new CreateUpdateEventFilterTestReconciler()) - .withConfigurationService( - overrider -> overrider.withPreviousAnnotationForDependentResources(false)) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new CreateUpdateEventFilterTestReconciler()) + .withConfigurationService( + overrider -> overrider.withPreviousAnnotationForDependentResources(false)) + .build(); @Test void updateEventReceivedAfterCreateOrUpdate() { CreateUpdateEventFilterTestCustomResource resource = CreateUpdateInformerEventSourceEventFilterIT.prepareTestResource(); - var createdResource = - operator.create(resource); + var createdResource = operator.create(resource); CreateUpdateInformerEventSourceEventFilterIT.assertData(operator, createdResource, 1, 2); - CreateUpdateEventFilterTestCustomResource actualCreatedResource = - operator.get(CreateUpdateEventFilterTestCustomResource.class, - resource.getMetadata().getName()); + CreateUpdateEventFilterTestCustomResource actualCreatedResource = operator.get( + CreateUpdateEventFilterTestCustomResource.class, resource.getMetadata().getName()); actualCreatedResource.getSpec().setValue("2"); operator.replace(actualCreatedResource); CreateUpdateInformerEventSourceEventFilterIT.assertData(operator, actualCreatedResource, 2, 4); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/DeploymentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/DeploymentReconciler.java index ef04ca644a..0dd8df05d8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/DeploymentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/DeploymentReconciler.java @@ -18,8 +18,7 @@ @ControllerConfiguration( informer = @Informer(labelSelector = "test=KubernetesResourceStatusUpdateIT")) -public class DeploymentReconciler - implements Reconciler, TestExecutionInfoProvider { +public class DeploymentReconciler implements Reconciler, TestExecutionInfoProvider { public static final String STATUS_MESSAGE = "Reconciled by DeploymentReconciler"; @@ -27,8 +26,7 @@ public class DeploymentReconciler private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @Override - public UpdateControl reconcile( - Deployment resource, Context context) { + public UpdateControl reconcile(Deployment resource, Context context) { log.info("Reconcile deployment: {}", resource); numberOfExecutions.incrementAndGet(); @@ -42,15 +40,14 @@ public UpdateControl reconcile( var condition = conditions.stream().filter(c -> c.getMessage().equals(STATUS_MESSAGE)).findFirst(); if (condition.isEmpty()) { - conditions.add(new DeploymentCondition(null, null, STATUS_MESSAGE, null, - "unknown", "DeploymentReconciler")); + conditions.add(new DeploymentCondition( + null, null, STATUS_MESSAGE, null, "unknown", "DeploymentReconciler")); return UpdateControl.patchStatus(resource); } else { return UpdateControl.noUpdate(); } } - @Override public int getNumberOfExecutions() { return numberOfExecutions.get(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/KubernetesResourceStatusUpdateIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/KubernetesResourceStatusUpdateIT.java index dff60df5cd..f0dbc70874 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/KubernetesResourceStatusUpdateIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/deployment/KubernetesResourceStatusUpdateIT.java @@ -26,8 +26,9 @@ class KubernetesResourceStatusUpdateIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new DeploymentReconciler()).build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new DeploymentReconciler()) + .build(); @Test void testReconciliationOfNonCustomResourceAndStatusUpdate() { @@ -39,8 +40,8 @@ void testReconciliationOfNonCustomResourceAndStatusUpdate() { // wait until the pod is ready, if not this is causing some test stability issues with // namespace cleanup in k8s version 1.22 assertThat(d.getStatus().getReadyReplicas()).isGreaterThanOrEqualTo(1); - assertThat( - d.getStatus().getConditions().stream().filter(c -> c.getMessage().equals(STATUS_MESSAGE)) + assertThat(d.getStatus().getConditions().stream() + .filter(c -> c.getMessage().equals(STATUS_MESSAGE)) .count()) .isEqualTo(1); }); @@ -51,10 +52,7 @@ private Deployment testDeployment() { Map labels = new HashMap<>(); labels.put("test", "KubernetesResourceStatusUpdateIT"); resource.setMetadata( - new ObjectMetaBuilder() - .withName("test-deployment") - .withLabels(labels) - .build()); + new ObjectMetaBuilder().withName("test-deployment").withLabels(labels).build()); DeploymentSpec spec = new DeploymentSpec(); resource.setSpec(spec); spec.setReplicas(1); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationCustomResource.java index 339f14434a..df1273c4d9 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationCustomResource.java @@ -9,8 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("dger") -public class DynamicGenericEventSourceRegistrationCustomResource - extends CustomResource - implements Namespaced { - -} +public class DynamicGenericEventSourceRegistrationCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationIT.java index b00573e334..fcfae95ac0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationIT.java @@ -16,11 +16,11 @@ class DynamicGenericEventSourceRegistrationIT { public static final String TEST_RESOURCE_NAME = "test1"; + @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(DynamicGenericEventSourceRegistrationReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(DynamicGenericEventSourceRegistrationReconciler.class) + .build(); @Test void registersEventSourcesDynamically() { @@ -49,12 +49,9 @@ void registersEventSourcesDynamically() { assertThat(reconciler.getNumberOfEventSources()).isEqualTo(2); } - DynamicGenericEventSourceRegistrationCustomResource testResource() { var res = new DynamicGenericEventSourceRegistrationCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); return res; } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationReconciler.java index 0abf91f32f..c0076a4e47 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/dynamicgenericeventsourceregistration/DynamicGenericEventSourceRegistrationReconciler.java @@ -28,16 +28,20 @@ public UpdateControl reconc numberOfExecutions.addAndGet(1); - context.eventSourceRetriever().dynamicallyRegisterEventSource( - genericInformerFor(ConfigMap.class, context)); - context.eventSourceRetriever().dynamicallyRegisterEventSource( - genericInformerFor(Secret.class, context)); + context + .eventSourceRetriever() + .dynamicallyRegisterEventSource(genericInformerFor(ConfigMap.class, context)); + context + .eventSourceRetriever() + .dynamicallyRegisterEventSource(genericInformerFor(Secret.class, context)); context.getClient().resource(secret(primary)).createOr(NonDeletingOperation::update); context.getClient().resource(configMap(primary)).createOr(NonDeletingOperation::update); - numberOfEventSources.set(context.eventSourceRetriever() - .getEventSourcesFor(GenericKubernetesResource.class).size()); + numberOfEventSources.set(context + .eventSourceRetriever() + .getEventSourcesFor(GenericKubernetesResource.class) + .size()); return UpdateControl.noUpdate(); } @@ -66,13 +70,15 @@ private ConfigMap configMap(DynamicGenericEventSourceRegistrationCustomResource return cm; } - private InformerEventSource genericInformerFor( - Class clazz, - Context context) { + private InformerEventSource< + GenericKubernetesResource, DynamicGenericEventSourceRegistrationCustomResource> + genericInformerFor( + Class clazz, + Context context) { return new InformerEventSource<>( - InformerEventSourceConfiguration - .from(GroupVersionKind.gvkFor(clazz), + InformerEventSourceConfiguration.from( + GroupVersionKind.gvkFor(clazz), DynamicGenericEventSourceRegistrationCustomResource.class) .withName(clazz.getSimpleName()) .build(), diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerIT.java index 6e69a50e82..9044ddbbd6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerIT.java @@ -18,41 +18,35 @@ class ErrorStatusHandlerIT { ErrorStatusHandlerTestReconciler reconciler = new ErrorStatusHandlerTestReconciler(); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(reconciler, - new GenericRetry().setMaxAttempts(MAX_RETRY_ATTEMPTS).withLinearRetry()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler( + reconciler, new GenericRetry().setMaxAttempts(MAX_RETRY_ATTEMPTS).withLinearRetry()) + .build(); @Test void testErrorMessageSetEventually() { - ErrorStatusHandlerTestCustomResource resource = - operator.create(createCustomResource()); + ErrorStatusHandlerTestCustomResource resource = operator.create(createCustomResource()); await() .atMost(10, TimeUnit.SECONDS) .pollInterval(250, TimeUnit.MICROSECONDS) - .untilAsserted( - () -> { - ErrorStatusHandlerTestCustomResource res = - operator.get(ErrorStatusHandlerTestCustomResource.class, - resource.getMetadata().getName()); - assertThat(res.getStatus()).isNotNull(); - for (int i = 0; i < MAX_RETRY_ATTEMPTS + 1; i++) { - assertThat(res.getStatus().getMessages()) - .contains(ErrorStatusHandlerTestReconciler.ERROR_STATUS_MESSAGE + i); - } - }); + .untilAsserted(() -> { + ErrorStatusHandlerTestCustomResource res = operator.get( + ErrorStatusHandlerTestCustomResource.class, resource.getMetadata().getName()); + assertThat(res.getStatus()).isNotNull(); + for (int i = 0; i < MAX_RETRY_ATTEMPTS + 1; i++) { + assertThat(res.getStatus().getMessages()) + .contains(ErrorStatusHandlerTestReconciler.ERROR_STATUS_MESSAGE + i); + } + }); } public ErrorStatusHandlerTestCustomResource createCustomResource() { ErrorStatusHandlerTestCustomResource resource = new ErrorStatusHandlerTestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName("error-status-test") - .withNamespace(operator.getNamespace()) - .build()); + resource.setMetadata(new ObjectMetaBuilder() + .withName("error-status-test") + .withNamespace(operator.getNamespace()) + .build()); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestCustomResource.java index 0606115f5f..2e4664a5de 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestCustomResource.java @@ -13,5 +13,4 @@ @ShortNames("esh") public class ErrorStatusHandlerTestCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestReconciler.java index e51286ef5f..d917faab93 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/errorstatushandler/ErrorStatusHandlerTestReconciler.java @@ -25,7 +25,10 @@ public UpdateControl reconcile( if (context.getRetryInfo().isPresent()) { retryAttempt = context.getRetryInfo().get().getAttemptCount(); } - log.info("Number of execution: {} retry attempt: {} , resource: {}", number, retryAttempt, + log.info( + "Number of execution: {} retry attempt: {} , resource: {}", + number, + retryAttempt, resource); throw new IllegalStateException(); } @@ -45,10 +48,13 @@ public int getNumberOfExecutions() { @Override public ErrorStatusUpdateControl updateErrorStatus( ErrorStatusHandlerTestCustomResource resource, - Context context, Exception e) { + Context context, + Exception e) { log.info("Setting status."); ensureStatusExists(resource); - resource.getStatus().getMessages() + resource + .getStatus() + .getMessages() .add(ERROR_STATUS_MESSAGE + context.getRetryInfo().orElseThrow().getAttemptCount()); return ErrorStatusUpdateControl.patchStatus(resource); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceIT.java index 227adaeadc..9e177c7202 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceIT.java @@ -15,9 +15,9 @@ class EventSourceIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(EventSourceTestCustomReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(EventSourceTestCustomReconciler.class) + .build(); @Test void receivingPeriodicEvents() { @@ -27,20 +27,17 @@ void receivingPeriodicEvents() { await() .atMost(5, TimeUnit.SECONDS) - .pollInterval( - EventSourceTestCustomReconciler.TIMER_PERIOD / 2, TimeUnit.MILLISECONDS) + .pollInterval(EventSourceTestCustomReconciler.TIMER_PERIOD / 2, TimeUnit.MILLISECONDS) .untilAsserted( - () -> assertThat(TestUtils.getNumberOfExecutions(operator)) - .isGreaterThanOrEqualTo(4)); + () -> assertThat(TestUtils.getNumberOfExecutions(operator)).isGreaterThanOrEqualTo(4)); } public EventSourceTestCustomResource createTestCustomResource(String id) { EventSourceTestCustomResource resource = new EventSourceTestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName("eventsource-" + id) - .withNamespace(operator.getNamespace()) - .build()); + resource.setMetadata(new ObjectMetaBuilder() + .withName("eventsource-" + id) + .withNamespace(operator.getNamespace()) + .build()); resource.setSpec(new EventSourceTestCustomResourceSpec()); resource.getSpec().setValue(id); return resource; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomReconciler.java index 59f27e5723..2993a29103 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomReconciler.java @@ -7,8 +7,7 @@ @ControllerConfiguration public class EventSourceTestCustomReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { public static final int TIMER_PERIOD = 500; private final AtomicInteger numberOfExecutions = new AtomicInteger(0); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResource.java index 2493fc138b..b5f50df476 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResource.java @@ -13,5 +13,4 @@ @ShortNames("es") public class EventSourceTestCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResourceStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResourceStatus.java index bb4c9cd5f1..c602dd5db4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResourceStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/event/EventSourceTestCustomResourceStatus.java @@ -14,6 +14,7 @@ public EventSourceTestCustomResourceStatus setState(State state) { } public enum State { - SUCCESS, ERROR + SUCCESS, + ERROR } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterIT.java index 634873ec86..8f7c90369e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterIT.java @@ -18,53 +18,49 @@ class FilterIT { public static final int POLL_DELAY = 150; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(FilterTestReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(FilterTestReconciler.class) + .build(); @Test void filtersControllerResourceUpdate() { var res = operator.create(createResource()); // One for CR create event other for ConfigMap event - await().pollDelay(Duration.ofMillis(POLL_DELAY)) - .untilAsserted(() -> assertThat(operator.getReconcilerOfType(FilterTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(2)); + await().pollDelay(Duration.ofMillis(POLL_DELAY)).untilAsserted(() -> assertThat( + operator.getReconcilerOfType(FilterTestReconciler.class).getNumberOfExecutions()) + .isEqualTo(2)); res.getSpec().setValue(FilterTestReconciler.CUSTOM_RESOURCE_FILTER_VALUE); operator.replace(res); // not more reconciliation with the filtered value - await().pollDelay(Duration.ofMillis(POLL_DELAY)) - .untilAsserted(() -> assertThat(operator.getReconcilerOfType(FilterTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(2)); + await().pollDelay(Duration.ofMillis(POLL_DELAY)).untilAsserted(() -> assertThat( + operator.getReconcilerOfType(FilterTestReconciler.class).getNumberOfExecutions()) + .isEqualTo(2)); } @Test void filtersSecondaryResourceUpdate() { var res = operator.create(createResource()); // One for CR create event other for ConfigMap event - await().pollDelay(Duration.ofMillis(POLL_DELAY)) - .untilAsserted(() -> assertThat(operator.getReconcilerOfType(FilterTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(2)); + await().pollDelay(Duration.ofMillis(POLL_DELAY)).untilAsserted(() -> assertThat( + operator.getReconcilerOfType(FilterTestReconciler.class).getNumberOfExecutions()) + .isEqualTo(2)); res.getSpec().setValue(CONFIG_MAP_FILTER_VALUE); operator.replace(res); // the CM event filtered out - await().pollDelay(Duration.ofMillis(POLL_DELAY)) - .untilAsserted(() -> assertThat(operator.getReconcilerOfType(FilterTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(3)); + await().pollDelay(Duration.ofMillis(POLL_DELAY)).untilAsserted(() -> assertThat( + operator.getReconcilerOfType(FilterTestReconciler.class).getNumberOfExecutions()) + .isEqualTo(3)); } - FilterTestCustomResource createResource() { FilterTestCustomResource resource = new FilterTestCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); resource.setSpec(new FilterTestResourceSpec()); resource.getSpec().setValue("value1"); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestCustomResource.java index a9f560b9bb..83a34deeb9 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestCustomResource.java @@ -10,8 +10,7 @@ @Version("v1") @ShortNames("ftc") public class FilterTestCustomResource - extends CustomResource - implements Namespaced { + extends CustomResource implements Namespaced { public String getConfigMapName(int id) { return "configmap" + id; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestReconciler.java index add0075a3b..409542d600 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestReconciler.java @@ -17,8 +17,7 @@ import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; @ControllerConfiguration(informer = @Informer(onUpdateFilter = UpdateFilter.class)) -public class FilterTestReconciler - implements Reconciler { +public class FilterTestReconciler implements Reconciler { public static final String CONFIG_MAP_FILTER_VALUE = "config_map_skip_this"; public static final String CUSTOM_RESOURCE_FILTER_VALUE = "custom_resource_skip_this"; @@ -28,10 +27,12 @@ public class FilterTestReconciler @Override public UpdateControl reconcile( - FilterTestCustomResource resource, - Context context) { + FilterTestCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); - context.getClient().configMaps().inNamespace(resource.getMetadata().getNamespace()) + context + .getClient() + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) .resource(createConfigMap(resource)) .createOrReplace(); return UpdateControl.noUpdate(); @@ -48,7 +49,6 @@ private ConfigMap createConfigMap(FilterTestCustomResource resource) { return configMap; } - public int getNumberOfExecutions() { return numberOfExecutions.get(); } @@ -57,11 +57,10 @@ public int getNumberOfExecutions() { public List> prepareEventSources( EventSourceContext context) { - final var informerConfiguration = InformerEventSourceConfiguration - .from(ConfigMap.class, FilterTestCustomResource.class) - .withOnUpdateFilter((newCM, - oldCM) -> !newCM.getData().get(CM_VALUE_KEY) - .equals(CONFIG_MAP_FILTER_VALUE)) + final var informerConfiguration = InformerEventSourceConfiguration.from( + ConfigMap.class, FilterTestCustomResource.class) + .withOnUpdateFilter( + (newCM, oldCM) -> !newCM.getData().get(CM_VALUE_KEY).equals(CONFIG_MAP_FILTER_VALUE)) .build(); InformerEventSource configMapES = new InformerEventSource<>(informerConfiguration, context); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestResourceStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestResourceStatus.java index 1714a2135d..9d72abadf7 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestResourceStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/FilterTestResourceStatus.java @@ -1,5 +1,3 @@ package io.javaoperatorsdk.operator.baseapi.filter; -public class FilterTestResourceStatus { - -} +public class FilterTestResourceStatus {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/UpdateFilter.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/UpdateFilter.java index 7f697d32a1..62d7ceaa76 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/UpdateFilter.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/filter/UpdateFilter.java @@ -4,8 +4,7 @@ import static io.javaoperatorsdk.operator.baseapi.filter.FilterTestReconciler.CUSTOM_RESOURCE_FILTER_VALUE; -public class UpdateFilter - implements OnUpdateFilter { +public class UpdateFilter implements OnUpdateFilter { @Override public boolean accept(FilterTestCustomResource resource, FilterTestCustomResource oldResource) { return !resource.getSpec().getValue().equals(CUSTOM_RESOURCE_FILTER_VALUE); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingCustomResource.java index 45f424b8eb..07baef441a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingCustomResource.java @@ -11,6 +11,4 @@ @Version("v1") @ShortNames("gkrr") public class GenericKubernetesResourceHandlingCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingIT.java index 0e4700a482..efe0c74284 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingIT.java @@ -11,10 +11,9 @@ public class GenericKubernetesResourceHandlingIT extends GenericKubernetesDependentTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new GenericKubernetesResourceHandlingReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new GenericKubernetesResourceHandlingReconciler()) + .build(); @Override public LocallyRunOperatorExtension extension() { @@ -24,12 +23,9 @@ public LocallyRunOperatorExtension extension() { @Override public GenericKubernetesResourceHandlingCustomResource testResource(String name, String data) { var resource = new GenericKubernetesResourceHandlingCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(name).build()); resource.setSpec(new GenericKubernetesDependentSpec()); resource.getSpec().setValue(INITIAL_DATA); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java index 2d7cf217bc..bf5f92263d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/generickubernetesresourcehandling/GenericKubernetesResourceHandlingReconciler.java @@ -17,7 +17,6 @@ public class GenericKubernetesResourceHandlingReconciler implements Reconciler { - public static final String VERSION = "v1"; public static final String KIND = "ConfigMap"; public static final String KEY = "key"; @@ -29,13 +28,22 @@ public UpdateControl reconcile( var secondary = context.getSecondaryResource(GenericKubernetesResource.class); - secondary.ifPresentOrElse(r -> { - var desired = desiredConfigMap(primary, context); - if (!matches(r, desired)) { - context.getClient().genericKubernetesResources(VERSION, KIND).resource(desired).update(); - } - }, () -> context.getClient().genericKubernetesResources(VERSION, KIND) - .resource(desiredConfigMap(primary, context)).create()); + secondary.ifPresentOrElse( + r -> { + var desired = desiredConfigMap(primary, context); + if (!matches(r, desired)) { + context + .getClient() + .genericKubernetesResources(VERSION, KIND) + .resource(desired) + .update(); + } + }, + () -> context + .getClient() + .genericKubernetesResources(VERSION, KIND) + .resource(desiredConfigMap(primary, context)) + .create()); return UpdateControl.noUpdate(); } @@ -43,7 +51,8 @@ public UpdateControl reconcile( @SuppressWarnings("unchecked") private boolean matches(GenericKubernetesResource actual, GenericKubernetesResource desired) { var actualData = (HashMap) actual.getAdditionalProperties().get("data"); - var desiredData = (HashMap) desired.getAdditionalProperties().get("data"); + var desiredData = + (HashMap) desired.getAdditionalProperties().get("data"); return actualData.equals(desiredData); } @@ -51,10 +60,12 @@ GenericKubernetesResource desiredConfigMap( GenericKubernetesResourceHandlingCustomResource primary, Context context) { try (InputStream is = this.getClass().getResourceAsStream("/configmap.yaml")) { - var res = context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item(); + var res = + context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item(); res.getMetadata().setName(primary.getMetadata().getName()); res.getMetadata().setNamespace(primary.getMetadata().getNamespace()); - Map data = (Map) res.getAdditionalProperties().get("data"); + Map data = + (Map) res.getAdditionalProperties().get("data"); data.put(KEY, primary.getSpec().getValue()); res.addOwnerReference(primary); return res; @@ -63,14 +74,15 @@ GenericKubernetesResource desiredConfigMap( } } - @Override public List> prepareEventSources( EventSourceContext context) { - var informerEventSource = new InformerEventSource<>(InformerEventSourceConfiguration.from( - new GroupVersionKind("", VERSION, KIND), - GenericKubernetesResourceHandlingCustomResource.class).build(), + var informerEventSource = new InformerEventSource<>( + InformerEventSourceConfiguration.from( + new GroupVersionKind("", VERSION, KIND), + GenericKubernetesResourceHandlingCustomResource.class) + .build(), context); return List.of(informerEventSource); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopIT.java index a28d6da07d..823622a58f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopIT.java @@ -17,12 +17,11 @@ public class GracefulStopIT { public static final String TEST_1 = "test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withConfigurationService(o -> o.withCloseClientOnStop(false) - .withReconciliationTerminationTimeout(Duration.ofMillis(RECONCILER_SLEEP))) - .withReconciler(new GracefulStopTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withConfigurationService(o -> o.withCloseClientOnStop(false) + .withReconciliationTerminationTimeout(Duration.ofMillis(RECONCILER_SLEEP))) + .withReconciler(new GracefulStopTestReconciler()) + .build(); @Test void stopsGracefullyWithTimeoutConfiguration() { @@ -35,16 +34,18 @@ private void testGracefulStop(String resourceName, int expectedFinalGeneration) var r = operator.get(GracefulStopTestCustomResource.class, resourceName); assertThat(r.getStatus()).isNotNull(); assertThat(r.getStatus().getObservedGeneration()).isEqualTo(1); - assertThat(operator.getReconcilerOfType(GracefulStopTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(1); + assertThat(operator + .getReconcilerOfType(GracefulStopTestReconciler.class) + .getNumberOfExecutions()) + .isEqualTo(1); }); testRes.getSpec().setValue(2); operator.replace(testRes); - await().pollDelay(Duration.ofMillis(50)).untilAsserted( - () -> assertThat(operator.getReconcilerOfType(GracefulStopTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(2)); + await().pollDelay(Duration.ofMillis(50)).untilAsserted(() -> assertThat( + operator.getReconcilerOfType(GracefulStopTestReconciler.class).getNumberOfExecutions()) + .isEqualTo(2)); operator.getOperator().stop(); @@ -56,16 +57,13 @@ private void testGracefulStop(String resourceName, int expectedFinalGeneration) } public GracefulStopTestCustomResource testResource(String name) { - GracefulStopTestCustomResource resource = - new GracefulStopTestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName(name) - .withNamespace(operator.getNamespace()) - .build()); + GracefulStopTestCustomResource resource = new GracefulStopTestCustomResource(); + resource.setMetadata(new ObjectMetaBuilder() + .withName(name) + .withNamespace(operator.getNamespace()) + .build()); resource.setSpec(new GracefulStopTestCustomResourceSpec()); resource.getSpec().setValue(1); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestCustomResource.java index 0a3f0c680f..3c21246c41 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestCustomResource.java @@ -11,6 +11,4 @@ @ShortNames("gst") public class GracefulStopTestCustomResource extends CustomResource - implements Namespaced { - -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestReconciler.java index 7b33c68722..64c527196e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/gracefulstop/GracefulStopTestReconciler.java @@ -8,8 +8,7 @@ import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; @ControllerConfiguration -public class GracefulStopTestReconciler - implements Reconciler { +public class GracefulStopTestReconciler implements Reconciler { public static final int RECONCILER_SLEEP = 1000; @@ -17,8 +16,8 @@ public class GracefulStopTestReconciler @Override public UpdateControl reconcile( - GracefulStopTestCustomResource resource, - Context context) throws InterruptedException { + GracefulStopTestCustomResource resource, Context context) + throws InterruptedException { numberOfExecutions.addAndGet(1); resource.setStatus(new GracefulStopTestCustomResourceStatus()); @@ -31,5 +30,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceIT.java index 81e0a0febe..d5f8e2871c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceIT.java @@ -24,10 +24,9 @@ class InformerEventSourceIT { public static final String UPDATE_STATUS_MESSAGE = "Updated Status"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new InformerEventSourceTestCustomReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new InformerEventSourceTestCustomReconciler()) + .build(); @Test void testUsingInformerToWatchChangesOfConfigMap() { @@ -58,8 +57,9 @@ void deletingSecondaryResource() { } waitForCRStatusValue(MISSING_CONFIG_MAP); - assertThat(((InformerEventSourceTestCustomReconciler) operator.getReconcilers().get(0)) - .getNumberOfExecutions()) + assertThat( + ((InformerEventSourceTestCustomReconciler) operator.getReconcilers().get(0)) + .getNumberOfExecutions()) .isEqualTo(3); } @@ -87,11 +87,9 @@ private InformerEventSourceTestCustomResource initialCustomResource() { private void waitForCRStatusValue(String value) { await().atMost(10, TimeUnit.SECONDS).untilAsserted(() -> { - var cr = - operator.get(InformerEventSourceTestCustomResource.class, RESOURCE_NAME); + var cr = operator.get(InformerEventSourceTestCustomResource.class, RESOURCE_NAME); assertThat(cr.getStatus()).isNotNull(); assertThat(cr.getStatus().getConfigMapValue()).isEqualTo(value); }); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomReconciler.java index 5028d6a0f4..661888bbfa 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomReconciler.java @@ -36,13 +36,13 @@ public class InformerEventSourceTestCustomReconciler public List> prepareEventSources( EventSourceContext context) { - InformerEventSourceConfiguration config = - InformerEventSourceConfiguration - .from(ConfigMap.class, InformerEventSourceTestCustomResource.class) - .withSecondaryToPrimaryMapper( - Mappers.fromAnnotation(RELATED_RESOURCE_NAME, RELATED_RESOURCE_TYPE, - InformerEventSourceTestCustomResource.class)) - .build(); + InformerEventSourceConfiguration config = InformerEventSourceConfiguration.from( + ConfigMap.class, InformerEventSourceTestCustomResource.class) + .withSecondaryToPrimaryMapper(Mappers.fromAnnotation( + RELATED_RESOURCE_NAME, + RELATED_RESOURCE_TYPE, + InformerEventSourceTestCustomResource.class)) + .build(); return List.of(new InformerEventSource<>(config, context)); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomResource.java index 4d1077c64e..cb63ac4754 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informereventsource/InformerEventSourceTestCustomResource.java @@ -11,8 +11,6 @@ @Version("v1") @Kind("Informereventsourcesample") @ShortNames("ies") -public class InformerEventSourceTestCustomResource extends - CustomResource - implements Namespaced { - -} +public class InformerEventSourceTestCustomResource + extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterCustomResource.java index c7e6ee43b4..79011f1448 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterCustomResource.java @@ -10,5 +10,4 @@ @Version("v1") @ShortNames("irc") public class InformerRemoteClusterCustomResource - extends CustomResource implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterIT.java index 3ad274d954..e7a264e73f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterIT.java @@ -30,24 +30,27 @@ class InformerRemoteClusterIT { static KubernetesClient kubernetesClient; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new InformerRemoteClusterReconciler(kubernetesClient)) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new InformerRemoteClusterReconciler(kubernetesClient)) + .build(); @Test void testRemoteClusterInformer() { var r = extension.create(testCustomResource()); - var cm = kubernetesClient.configMaps() - .resource(remoteConfigMap(r.getMetadata().getName(), - r.getMetadata().getNamespace())) + var cm = kubernetesClient + .configMaps() + .resource(remoteConfigMap(r.getMetadata().getName(), r.getMetadata().getNamespace())) .create(); // config map does not exist on the primary resource cluster - assertThat(extension.getKubernetesClient().configMaps() - .inNamespace(CM_NAMESPACE) - .withName(CONFIG_MAP_NAME).get()).isNull(); + assertThat(extension + .getKubernetesClient() + .configMaps() + .inNamespace(CM_NAMESPACE) + .withName(CONFIG_MAP_NAME) + .get()) + .isNull(); await().untilAsserted(() -> { var cr = extension.get(InformerRemoteClusterCustomResource.class, NAME); @@ -66,9 +69,7 @@ void testRemoteClusterInformer() { InformerRemoteClusterCustomResource testCustomResource() { var res = new InformerRemoteClusterCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(NAME).build()); return res; } @@ -84,5 +85,4 @@ ConfigMap remoteConfigMap(String ownerName, String ownerNamespace) { .withData(Map.of(DATA_KEY, INITIAL_VALUE)) .build(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterReconciler.java index 30735dd880..7a56c1660e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/informerremotecluster/InformerRemoteClusterReconciler.java @@ -30,34 +30,40 @@ public InformerRemoteClusterReconciler(KubernetesClient remoteClient) { @Override public UpdateControl reconcile( InformerRemoteClusterCustomResource resource, - Context context) throws Exception { + Context context) + throws Exception { - return context.getSecondaryResource(ConfigMap.class).map(cm -> { - var r = new InformerRemoteClusterCustomResource(); - r.setMetadata(new ObjectMetaBuilder() - .withName(resource.getMetadata().getName()) - .withNamespace(resource.getMetadata().getNamespace()) - .build()); - r.setStatus(new InformerRemoteClusterStatus()); - r.getStatus().setRemoteConfigMapMessage(cm.getData().get(DATA_KEY)); - return UpdateControl.patchStatus(r); - }).orElseGet(UpdateControl::noUpdate); + return context + .getSecondaryResource(ConfigMap.class) + .map(cm -> { + var r = new InformerRemoteClusterCustomResource(); + r.setMetadata(new ObjectMetaBuilder() + .withName(resource.getMetadata().getName()) + .withNamespace(resource.getMetadata().getNamespace()) + .build()); + r.setStatus(new InformerRemoteClusterStatus()); + r.getStatus().setRemoteConfigMapMessage(cm.getData().get(DATA_KEY)); + return UpdateControl.patchStatus(r); + }) + .orElseGet(UpdateControl::noUpdate); } @Override public List> prepareEventSources( EventSourceContext context) { - var es = new InformerEventSource<>(InformerEventSourceConfiguration - .from(ConfigMap.class, InformerRemoteClusterCustomResource.class) - // owner references do not work cross cluster, using - // annotations here to reference primary resource - .withSecondaryToPrimaryMapper( - Mappers.fromDefaultAnnotations(InformerRemoteClusterCustomResource.class)) - // setting remote client for informer - .withKubernetesClient(remoteClient) - .withWatchAllNamespaces() - .build(), context); + var es = new InformerEventSource<>( + InformerEventSourceConfiguration.from( + ConfigMap.class, InformerRemoteClusterCustomResource.class) + // owner references do not work cross cluster, using + // annotations here to reference primary resource + .withSecondaryToPrimaryMapper( + Mappers.fromDefaultAnnotations(InformerRemoteClusterCustomResource.class)) + // setting remote client for informer + .withKubernetesClient(remoteClient) + .withWatchAllNamespaces() + .build(), + context); return List.of(es); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorIT.java index 41411fa16f..c6236e3259 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorIT.java @@ -18,9 +18,9 @@ class LabelSelectorIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new LabelSelectorTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new LabelSelectorTestReconciler()) + .build(); @Test void filtersCustomResourceByLabel() { @@ -28,8 +28,9 @@ void filtersCustomResourceByLabel() { operator.create(resource("r2", false)); await().pollDelay(Duration.ofMillis(150)).untilAsserted(() -> { - assertThat( - operator.getReconcilerOfType(LabelSelectorTestReconciler.class).getNumberOfExecutions()) + assertThat(operator + .getReconcilerOfType(LabelSelectorTestReconciler.class) + .getNumberOfExecutions()) .isEqualTo(1); }); } @@ -38,10 +39,8 @@ LabelSelectorTestCustomResource resource(String name, boolean addLabel) { var res = new LabelSelectorTestCustomResource(); res.setMetadata(new ObjectMetaBuilder() .withName(name) - .withLabels(addLabel ? Map.of(LABEL_KEY, LABEL_VALUE) - : Collections.emptyMap()) + .withLabels(addLabel ? Map.of(LABEL_KEY, LABEL_VALUE) : Collections.emptyMap()) .build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestCustomResource.java index 321c684eef..6659af0404 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("lst") -public class LabelSelectorTestCustomResource - extends CustomResource - implements Namespaced { -} +public class LabelSelectorTestCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestReconciler.java index a225f6a7be..4800f758fb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/labelselector/LabelSelectorTestReconciler.java @@ -9,8 +9,7 @@ import static io.javaoperatorsdk.operator.baseapi.labelselector.LabelSelectorTestReconciler.LABEL_KEY; import static io.javaoperatorsdk.operator.baseapi.labelselector.LabelSelectorTestReconciler.LABEL_VALUE; -@ControllerConfiguration( - informer = @Informer(labelSelector = LABEL_KEY + "=" + LABEL_VALUE)) +@ControllerConfiguration(informer = @Informer(labelSelector = LABEL_KEY + "=" + LABEL_VALUE)) public class LabelSelectorTestReconciler implements Reconciler, TestExecutionInfoProvider { @@ -30,5 +29,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceCustomResource.java index 7b4a38d429..421ab2b5ce 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("lcn") -public class LeaderElectionChangeNamespaceCustomResource - extends CustomResource - implements Namespaced { -} +public class LeaderElectionChangeNamespaceCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceIT.java index dab495ba18..99ca569902 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceIT.java @@ -25,12 +25,11 @@ public class LeaderElectionChangeNamespaceIT { public static final String LEASE_NAME = "nschangelease"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withConfigurationService(o -> o.withLeaderElectionConfiguration( - new LeaderElectionConfiguration(LEASE_NAME))) - .withReconciler(new LeaderElectionChangeNamespaceReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withConfigurationService( + o -> o.withLeaderElectionConfiguration(new LeaderElectionConfiguration(LEASE_NAME))) + .withReconciler(new LeaderElectionChangeNamespaceReconciler()) + .build(); private static KubernetesClient client = new KubernetesClientBuilder().build(); @@ -50,37 +49,29 @@ void noReconcileOnChangeNamespace() { extension.create(testResource()); var reconciler = extension.getReconcilerOfType(LeaderElectionChangeNamespaceReconciler.class); - await().pollDelay(Duration.ofSeconds(1)) - .timeout(Duration.ofSeconds(3)) - .untilAsserted(() -> { - assertThat(reconciler.getNumberOfExecutions()).isEqualTo(0); - }); + await().pollDelay(Duration.ofSeconds(1)).timeout(Duration.ofSeconds(3)).untilAsserted(() -> { + assertThat(reconciler.getNumberOfExecutions()).isEqualTo(0); + }); - extension.getRegisteredControllerForReconcile(LeaderElectionChangeNamespaceReconciler.class) + extension + .getRegisteredControllerForReconcile(LeaderElectionChangeNamespaceReconciler.class) .changeNamespaces("default", extension.getNamespace()); - await().pollDelay(Duration.ofSeconds(1)) - .timeout(Duration.ofSeconds(3)) - .untilAsserted(() -> { - assertThat(reconciler.getNumberOfExecutions()).isEqualTo(0); - }); + await().pollDelay(Duration.ofSeconds(1)).timeout(Duration.ofSeconds(3)).untilAsserted(() -> { + assertThat(reconciler.getNumberOfExecutions()).isEqualTo(0); + }); } - LeaderElectionChangeNamespaceCustomResource testResource() { var resource = new LeaderElectionChangeNamespaceCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName("test1") - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName("test1").build()); return resource; } static Lease lease() { var lease = new Lease(); - lease.setMetadata(new ObjectMetaBuilder() - .withName(LEASE_NAME) - .withNamespace("default") - .build()); + lease.setMetadata( + new ObjectMetaBuilder().withName(LEASE_NAME).withNamespace("default").build()); var time = ZonedDateTime.now(); lease.setSpec(new LeaseSpecBuilder() .withAcquireTime(ZonedDateTime.now()) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceReconciler.java index 70b45035b7..c98900a694 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/leaderelectionchangenamespace/LeaderElectionChangeNamespaceReconciler.java @@ -25,5 +25,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationCustomResource.java index d33f9dd5b3..386940857f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationCustomResource.java @@ -11,5 +11,4 @@ @ShortNames("mog") public class ManualObservedGenerationCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationIT.java index 743f73742d..c64ea797fb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationIT.java @@ -12,10 +12,11 @@ public class ManualObservedGenerationIT { public static final String RESOURCE_NAME = "test1"; + @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new ManualObservedGenerationReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new ManualObservedGenerationReconciler()) + .build(); @Test void observedGenerationUpdated() { @@ -25,7 +26,8 @@ void observedGenerationUpdated() { var r = extension.get(ManualObservedGenerationCustomResource.class, RESOURCE_NAME); assertThat(r).isNotNull(); assertThat(r.getStatus().getObservedGeneration()).isEqualTo(1); - assertThat(r.getStatus().getObservedGeneration()).isEqualTo(r.getMetadata().getGeneration()); + assertThat(r.getStatus().getObservedGeneration()) + .isEqualTo(r.getMetadata().getGeneration()); }); var changed = testResource(); @@ -35,15 +37,14 @@ void observedGenerationUpdated() { await().untilAsserted(() -> { var r = extension.get(ManualObservedGenerationCustomResource.class, RESOURCE_NAME); assertThat(r.getStatus().getObservedGeneration()).isEqualTo(2); - assertThat(r.getStatus().getObservedGeneration()).isEqualTo(r.getMetadata().getGeneration()); + assertThat(r.getStatus().getObservedGeneration()) + .isEqualTo(r.getMetadata().getGeneration()); }); } ManualObservedGenerationCustomResource testResource() { var res = new ManualObservedGenerationCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); res.setSpec(new ManualObservedGenerationSpec()); res.getSpec().setValue("Initial Value"); return res; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationReconciler.java index 865d099766..7a93014020 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/manualobservedgeneration/ManualObservedGenerationReconciler.java @@ -18,9 +18,11 @@ public UpdateControl reconcile( Context context) { numberOfExecutions.addAndGet(1); var resourceForStatusPatch = resourceForStatusPatch(resource); - if (!Objects.equals(resource.getMetadata().getGeneration(), + if (!Objects.equals( + resource.getMetadata().getGeneration(), resourceForStatusPatch.getStatus().getObservedGeneration())) { - resourceForStatusPatch.getStatus() + resourceForStatusPatch + .getStatus() .setObservedGeneration(resource.getMetadata().getGeneration()); return UpdateControl.patchStatus(resourceForStatusPatch); } else { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalIT.java index 460b374071..bfc38993cb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalIT.java @@ -14,8 +14,9 @@ class MaxIntervalIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new MaxIntervalTestReconciler()).build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new MaxIntervalTestReconciler()) + .build(); @Test void reconciliationTriggeredBasedOnMaxInterval() { @@ -26,10 +27,10 @@ void reconciliationTriggeredBasedOnMaxInterval() { await() .pollInterval(50, TimeUnit.MILLISECONDS) .atMost(500, TimeUnit.MILLISECONDS) - .untilAsserted( - () -> assertThat(operator.getReconcilerOfType(MaxIntervalTestReconciler.class) + .untilAsserted(() -> assertThat(operator + .getReconcilerOfType(MaxIntervalTestReconciler.class) .getNumberOfExecutions()) - .isGreaterThan(3)); + .isGreaterThan(3)); } private MaxIntervalTestCustomResource createTestResource() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestCustomResource.java index d9f7cb74ba..ad4af2df74 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestCustomResource.java @@ -11,7 +11,5 @@ @Version("v1") @Kind("MaxIntervalTestCustomResource") @ShortNames("mit") -public class MaxIntervalTestCustomResource - extends CustomResource - implements Namespaced { -} +public class MaxIntervalTestCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestReconciler.java index ce9197cff5..d017a9d2e1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxinterval/MaxIntervalTestReconciler.java @@ -10,8 +10,9 @@ import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@ControllerConfiguration(maxReconciliationInterval = @MaxReconciliationInterval(interval = 50, - timeUnit = TimeUnit.MILLISECONDS)) +@ControllerConfiguration( + maxReconciliationInterval = + @MaxReconciliationInterval(interval = 50, timeUnit = TimeUnit.MILLISECONDS)) public class MaxIntervalTestReconciler implements Reconciler, TestExecutionInfoProvider { @@ -27,5 +28,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryIT.java index ce53c483cc..08d4079e3b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryIT.java @@ -14,9 +14,9 @@ class MaxIntervalAfterRetryIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new MaxIntervalAfterRetryTestReconciler()).build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new MaxIntervalAfterRetryTestReconciler()) + .build(); @Test void reconciliationTriggeredBasedOnMaxInterval() { @@ -27,9 +27,10 @@ void reconciliationTriggeredBasedOnMaxInterval() { await() .pollInterval(50, TimeUnit.MILLISECONDS) .atMost(1, TimeUnit.SECONDS) - .untilAsserted( - () -> assertThat(operator.getReconcilerOfType(MaxIntervalAfterRetryTestReconciler.class) - .getNumberOfExecutions()).isGreaterThan(5)); + .untilAsserted(() -> assertThat(operator + .getReconcilerOfType(MaxIntervalAfterRetryTestReconciler.class) + .getNumberOfExecutions()) + .isGreaterThan(5)); } private MaxIntervalAfterRetryTestCustomResource createTestResource() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestCustomResource.java index 85328a26a3..b854d05560 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("mir") -public class MaxIntervalAfterRetryTestCustomResource - extends CustomResource - implements Namespaced { -} +public class MaxIntervalAfterRetryTestCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestReconciler.java index cf9a42f0e2..ec1bbc99d5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/maxintervalafterretry/MaxIntervalAfterRetryTestReconciler.java @@ -11,8 +11,9 @@ import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; @GradualRetry(maxAttempts = 1, initialInterval = 100) -@ControllerConfiguration(maxReconciliationInterval = @MaxReconciliationInterval(interval = 50, - timeUnit = TimeUnit.MILLISECONDS)) +@ControllerConfiguration( + maxReconciliationInterval = + @MaxReconciliationInterval(interval = 50, timeUnit = TimeUnit.MILLISECONDS)) public class MaxIntervalAfterRetryTestReconciler implements Reconciler, TestExecutionInfoProvider { @@ -33,5 +34,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeCustomResource.java index d7e3fa5c37..1d8062366f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeCustomResource.java @@ -10,6 +10,4 @@ @Version("v1") @ShortNames("mrst") public class MultipleReconcilerSameTypeCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeIT.java index 57e4ad795b..7fb2c6e164 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeIT.java @@ -13,25 +13,27 @@ public class MultipleReconcilerSameTypeIT { public static final String TEST_RESOURCE_1 = "test1"; public static final String TEST_RESOURCE_2 = "test2"; - @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(MultipleReconcilerSameTypeReconciler1.class) - .withReconciler(MultipleReconcilerSameTypeReconciler2.class) - .build(); + @RegisterExtension + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(MultipleReconcilerSameTypeReconciler1.class) + .withReconciler(MultipleReconcilerSameTypeReconciler2.class) + .build(); @Test void multipleReconcilersBasedOnLeaderElection() { extension.create(testResource(TEST_RESOURCE_1, true)); extension.create(testResource(TEST_RESOURCE_2, false)); - await().untilAsserted(() -> { - assertThat(extension.getReconcilerOfType(MultipleReconcilerSameTypeReconciler1.class) - .getNumberOfExecutions()).isEqualTo(1); - assertThat(extension.getReconcilerOfType(MultipleReconcilerSameTypeReconciler2.class) - .getNumberOfExecutions()).isEqualTo(1); + assertThat(extension + .getReconcilerOfType(MultipleReconcilerSameTypeReconciler1.class) + .getNumberOfExecutions()) + .isEqualTo(1); + assertThat(extension + .getReconcilerOfType(MultipleReconcilerSameTypeReconciler2.class) + .getNumberOfExecutions()) + .isEqualTo(1); var res1 = extension.get(MultipleReconcilerSameTypeCustomResource.class, TEST_RESOURCE_1); var res2 = extension.get(MultipleReconcilerSameTypeCustomResource.class, TEST_RESOURCE_2); @@ -46,13 +48,10 @@ void multipleReconcilersBasedOnLeaderElection() { MultipleReconcilerSameTypeCustomResource testResource(String name, boolean type1) { var res = new MultipleReconcilerSameTypeCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(name).build()); if (type1) { res.getMetadata().getLabels().put("reconciler", "1"); } return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler1.java index a3ffd9667e..42aa52f9e1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler1.java @@ -26,5 +26,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler2.java index ee446a7cf4..fc61f0624a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplereconcilersametype/MultipleReconcilerSameTypeReconciler2.java @@ -29,5 +29,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceCustomResource.java index d142f1f0d1..7c3f88ae74 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceCustomResource.java @@ -11,7 +11,5 @@ @Version("v1") @Kind("MultipleSecondaryEventSourceCustomResource") @ShortNames("mses") -public class MultipleSecondaryEventSourceCustomResource - extends CustomResource - implements Namespaced { -} +public class MultipleSecondaryEventSourceCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceIT.java index 856f6d8a6f..194ece2d16 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceIT.java @@ -14,11 +14,11 @@ class MultipleSecondaryEventSourceIT { public static final String TEST_RESOURCE_NAME = "testresource"; + @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(MultipleSecondaryEventSourceReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(MultipleSecondaryEventSourceReconciler.class) + .build(); @Test void receivingPeriodicEvents() { @@ -28,25 +28,28 @@ void receivingPeriodicEvents() { var reconciler = operator.getReconcilerOfType(MultipleSecondaryEventSourceReconciler.class); - await().pollDelay(Duration.ofMillis(300)) - .until(() -> reconciler.getNumberOfExecutions() <= 3); + await().pollDelay(Duration.ofMillis(300)).until(() -> reconciler.getNumberOfExecutions() <= 3); int numberOfInitialExecutions = reconciler.getNumberOfExecutions(); updateConfigMap(resource, 1); - await().pollDelay(Duration.ofMillis(300)) + await() + .pollDelay(Duration.ofMillis(300)) .until(() -> reconciler.getNumberOfExecutions() == numberOfInitialExecutions + 1); updateConfigMap(resource, 2); - await().pollDelay(Duration.ofMillis(300)) + await() + .pollDelay(Duration.ofMillis(300)) .until(() -> reconciler.getNumberOfExecutions() == numberOfInitialExecutions + 2); } private void updateConfigMap(MultipleSecondaryEventSourceCustomResource resource, int number) { - ConfigMap map1 = operator.get(ConfigMap.class, - number == 1 ? MultipleSecondaryEventSourceReconciler.getName1(resource) + ConfigMap map1 = operator.get( + ConfigMap.class, + number == 1 + ? MultipleSecondaryEventSourceReconciler.getName1(resource) : MultipleSecondaryEventSourceReconciler.getName2(resource)); map1.getData().put("value2", "value2"); operator.replace(map1); @@ -55,12 +58,10 @@ private void updateConfigMap(MultipleSecondaryEventSourceCustomResource resource public MultipleSecondaryEventSourceCustomResource createTestCustomResource() { MultipleSecondaryEventSourceCustomResource resource = new MultipleSecondaryEventSourceCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .withNamespace(operator.getNamespace()) - .build()); + resource.setMetadata(new ObjectMetaBuilder() + .withName(TEST_RESOURCE_NAME) + .withNamespace(operator.getNamespace()) + .build()); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java index 12ebf45c8c..900ffba2b5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiplesecondaryeventsource/MultipleSecondaryEventSourceReconciler.java @@ -39,15 +39,27 @@ public UpdateControl reconcile( numberOfExecutions.addAndGet(1); final var client = context.getClient(); - if (client.configMaps().inNamespace(resource.getMetadata().getNamespace()) - .withName(getName1(resource)).get() == null) { - client.configMaps().inNamespace(resource.getMetadata().getNamespace()) + if (client + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) + .withName(getName1(resource)) + .get() + == null) { + client + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) .resource(configMap(getName1(resource), resource)) .createOrReplace(); } - if (client.configMaps().inNamespace(resource.getMetadata().getNamespace()) - .withName(getName2(resource)).get() == null) { - client.configMaps().inNamespace(resource.getMetadata().getNamespace()) + if (client + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) + .withName(getName2(resource)) + .get() + == null) { + client + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) .resource(configMap(getName2(resource), resource)) .createOrReplace(); } @@ -68,17 +80,18 @@ public int getNumberOfExecutions() { public List> prepareEventSources( EventSourceContext context) { - var config = InformerEventSourceConfiguration - .from(ConfigMap.class, MultipleSecondaryEventSourceCustomResource.class) + var config = InformerEventSourceConfiguration.from( + ConfigMap.class, MultipleSecondaryEventSourceCustomResource.class) .withNamespacesInheritedFromController() .withLabelSelector("multisecondary") .withSecondaryToPrimaryMapper(s -> { var name = s.getMetadata().getName().subSequence(0, s.getMetadata().getName().length() - 1); return Set.of(new ResourceID(name.toString(), s.getMetadata().getNamespace())); - }).build(); - InformerEventSource configMapEventSource = - new InformerEventSource<>(config, context); + }) + .build(); + InformerEventSource + configMapEventSource = new InformerEventSource<>(config, context); return List.of(configMapEventSource); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDIT.java index 687ea3c581..eee2475ee9 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDIT.java @@ -29,13 +29,12 @@ class MultiVersionCRDIT { public static final String CR_V2_NAME = "crv2"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(MultiVersionCRDTestReconciler1.class) - .withReconciler(MultiVersionCRDTestReconciler2.class) - .withConfigurationService( - overrider -> overrider.withInformerStoppedHandler(informerStoppedHandler)) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(MultiVersionCRDTestReconciler1.class) + .withReconciler(MultiVersionCRDTestReconciler2.class) + .withConfigurationService( + overrider -> overrider.withInformerStoppedHandler(informerStoppedHandler)) + .build(); private static class TestInformerStoppedHandler implements InformerStoppedHandler { private volatile String resourceClassName; @@ -61,19 +60,25 @@ public void onStop(SharedIndexInformer informer, Throwable ex) { // version) final var unmarshal = Serialization.jsonMapper().readTree(raw); final var object = unmarshal.get("object"); - resourceCreateAsVersion = acceptOnlyIfUnsetOrEqualToAlreadySet(resourceCreateAsVersion, - object.get("apiVersion").asText()); + resourceCreateAsVersion = acceptOnlyIfUnsetOrEqualToAlreadySet( + resourceCreateAsVersion, object.get("apiVersion").asText()); // extract the asked resource version - failedResourceVersion = acceptOnlyIfUnsetOrEqualToAlreadySet(failedResourceVersion, - object.get("metadata").get("managedFields").get(0).get("apiVersion").asText()); + failedResourceVersion = acceptOnlyIfUnsetOrEqualToAlreadySet( + failedResourceVersion, + object + .get("metadata") + .get("managedFields") + .get(0) + .get("apiVersion") + .asText()); } catch (JsonProcessingException e) { throw new RuntimeException(e); } }); // extract error message - errorMessage = - acceptOnlyIfUnsetOrEqualToAlreadySet(errorMessage, watcherEx.getCause().getMessage()); + errorMessage = acceptOnlyIfUnsetOrEqualToAlreadySet( + errorMessage, watcherEx.getCause().getMessage()); } final var apiTypeClass = informer.getApiTypeClass(); @@ -82,10 +87,10 @@ public void onStop(SharedIndexInformer informer, Throwable ex) { resourceClassName = acceptOnlyIfUnsetOrEqualToAlreadySet(resourceClassName, apiTypeClass.getName()); - log.debug("API Type Class: " + apiTypeClass.getName() - + " - resource class name: " + resourceClassName); - log.info("Informer for " + HasMetadata.getFullResourceName(apiTypeClass) - + " stopped due to: " + ex.getMessage()); + log.debug("API Type Class: " + apiTypeClass.getName() + " - resource class name: " + + resourceClassName); + log.info("Informer for " + HasMetadata.getFullResourceName(apiTypeClass) + " stopped due to: " + + ex.getMessage()); } public String getResourceClassName() { @@ -109,7 +114,7 @@ private String acceptOnlyIfUnsetOrEqualToAlreadySet(String existing, String newV } } - private final static TestInformerStoppedHandler informerStoppedHandler = + private static final TestInformerStoppedHandler informerStoppedHandler = new TestInformerStoppedHandler(); @Test @@ -118,20 +123,16 @@ void multipleCRDVersions() { operator.create(createTestResourceV1WithoutLabel()); operator.create(createTestResourceV2WithLabel()); - await() - .atMost(Duration.ofSeconds(2)) - .pollInterval(Duration.ofMillis(50)) - .untilAsserted( - () -> { - var crV1Now = operator.get(MultiVersionCRDTestCustomResource1.class, CR_V1_NAME); - var crV2Now = operator.get(MultiVersionCRDTestCustomResource2.class, CR_V2_NAME); - assertThat(crV1Now.getStatus()).isNotNull(); - assertThat(crV2Now.getStatus()).isNotNull(); - assertThat(crV1Now.getStatus().getReconciledBy()) - .containsExactly(MultiVersionCRDTestReconciler1.class.getSimpleName()); - assertThat(crV2Now.getStatus().getReconciledBy()) - .containsExactly(MultiVersionCRDTestReconciler2.class.getSimpleName()); - }); + await().atMost(Duration.ofSeconds(2)).pollInterval(Duration.ofMillis(50)).untilAsserted(() -> { + var crV1Now = operator.get(MultiVersionCRDTestCustomResource1.class, CR_V1_NAME); + var crV2Now = operator.get(MultiVersionCRDTestCustomResource2.class, CR_V2_NAME); + assertThat(crV1Now.getStatus()).isNotNull(); + assertThat(crV2Now.getStatus()).isNotNull(); + assertThat(crV1Now.getStatus().getReconciledBy()) + .containsExactly(MultiVersionCRDTestReconciler1.class.getSimpleName()); + assertThat(crV2Now.getStatus().getReconciledBy()) + .containsExactly(MultiVersionCRDTestReconciler2.class.getSimpleName()); + }); } @Test @@ -143,32 +144,25 @@ void invalidEventsShouldStopInformerAndCallInformerStoppedHandler() { var v1res = createTestResourceV1WithoutLabel(); operator.create(v1res); - await() - .atMost(Duration.ofSeconds(10)) - .pollInterval(Duration.ofMillis(50)) - .untilAsserted(() -> { - // v1 is the stored version so trying to create a v2 version should fail because we cannot - // convert a String (as defined by the spec of the v2 CRD) to an int (which is what the - // spec of the v1 CRD defines) - assertThat(informerStoppedHandler.getResourceCreateAsVersion()) - .isEqualTo(HasMetadata.getApiVersion( - MultiVersionCRDTestCustomResource1.class)); - assertThat(informerStoppedHandler.getResourceClassName()) - .isEqualTo(MultiVersionCRDTestCustomResource1.class.getName()); - assertThat(informerStoppedHandler.getFailedResourceVersion()) - .isEqualTo(HasMetadata.getApiVersion( - MultiVersionCRDTestCustomResource2.class)); - assertThat(informerStoppedHandler.getErrorMessage()).contains( + await().atMost(Duration.ofSeconds(10)).pollInterval(Duration.ofMillis(50)).untilAsserted(() -> { + // v1 is the stored version so trying to create a v2 version should fail because we cannot + // convert a String (as defined by the spec of the v2 CRD) to an int (which is what the + // spec of the v1 CRD defines) + assertThat(informerStoppedHandler.getResourceCreateAsVersion()) + .isEqualTo(HasMetadata.getApiVersion(MultiVersionCRDTestCustomResource1.class)); + assertThat(informerStoppedHandler.getResourceClassName()) + .isEqualTo(MultiVersionCRDTestCustomResource1.class.getName()); + assertThat(informerStoppedHandler.getFailedResourceVersion()) + .isEqualTo(HasMetadata.getApiVersion(MultiVersionCRDTestCustomResource2.class)); + assertThat(informerStoppedHandler.getErrorMessage()) + .contains( "Cannot deserialize value of type `int` from String \"string value\": not a valid `int` value"); - }); + }); assertThat( - operator - .get(MultiVersionCRDTestCustomResource2.class, CR_V2_NAME) - .getStatus()) + operator.get(MultiVersionCRDTestCustomResource2.class, CR_V2_NAME).getStatus()) .isNull(); } - MultiVersionCRDTestCustomResource1 createTestResourceV1WithoutLabel() { MultiVersionCRDTestCustomResource1 cr = new MultiVersionCRDTestCustomResource1(); cr.setMetadata(new ObjectMeta()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource1.java index cdc56026eb..f376cba7f0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource1.java @@ -12,9 +12,6 @@ @Kind("MultiVersionCRDTestCustomResource") @ShortNames("mvc") public class MultiVersionCRDTestCustomResource1 - extends - CustomResource - implements Namespaced { - - -} + extends CustomResource< + MultiVersionCRDTestCustomResourceSpec1, MultiVersionCRDTestCustomResourceStatus1> + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource2.java index ecf3f0c7e2..87fd47064d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResource2.java @@ -12,8 +12,6 @@ @Kind("MultiVersionCRDTestCustomResource") @ShortNames("mvc") public class MultiVersionCRDTestCustomResource2 - extends - CustomResource - implements Namespaced { - -} + extends CustomResource< + MultiVersionCRDTestCustomResourceSpec2, MultiVersionCRDTestCustomResourceStatus2> + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResourceSpec1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResourceSpec1.java index da6b415cee..d870d4d315 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResourceSpec1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestCustomResourceSpec1.java @@ -12,5 +12,4 @@ public MultiVersionCRDTestCustomResourceSpec1 setValue(int value) { this.value = value; return this; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler1.java index a9b3af7586..89d7147682 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler1.java @@ -19,7 +19,8 @@ public class MultiVersionCRDTestReconciler1 public UpdateControl reconcile( MultiVersionCRDTestCustomResource1 resource, Context context) { - log.info("Reconcile MultiVersionCRDTestCustomResource1: {}", + log.info( + "Reconcile MultiVersionCRDTestCustomResource1: {}", resource.getMetadata().getName()); if (resource.getStatus() == null) { resource.setStatus(new MultiVersionCRDTestCustomResourceStatus1()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler2.java index 29d7e830fa..7561fa2b09 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/multiversioncrd/MultiVersionCRDTestReconciler2.java @@ -19,7 +19,8 @@ public class MultiVersionCRDTestReconciler2 public UpdateControl reconcile( MultiVersionCRDTestCustomResource2 resource, Context context) { - log.info("Reconcile MultiVersionCRDTestCustomResource2: {}", + log.info( + "Reconcile MultiVersionCRDTestCustomResource2: {}", resource.getMetadata().getName()); if (resource.getStatus() == null) { resource.setStatus(new MultiVersionCRDTestCustomResourceStatus2()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentCustomResource.java index 5a54443393..2b1ddbcbec 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentCustomResource.java @@ -10,9 +10,4 @@ @Version("v1") @ShortNames("nri") public class NextReconciliationImminentCustomResource - extends CustomResource - implements Namespaced { - - - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentIT.java index 5f7933610f..2974dc465a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentIT.java @@ -15,17 +15,15 @@ public class NextReconciliationImminentIT { - private static final Logger log = - LoggerFactory.getLogger(NextReconciliationImminentIT.class); + private static final Logger log = LoggerFactory.getLogger(NextReconciliationImminentIT.class); public static final int WAIT_FOR_EVENT = 300; public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new NextReconciliationImminentReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new NextReconciliationImminentReconciler()) + .build(); @Test void skippingStatusUpdateWithNextReconciliationImminent() throws InterruptedException { @@ -47,18 +45,17 @@ void skippingStatusUpdateWithNextReconciliationImminent() throws InterruptedExce reconciler.allowReconciliationToProceed(); await().pollDelay(Duration.ofMillis(WAIT_FOR_EVENT)).untilAsserted(() -> { - assertThat(extension.get(NextReconciliationImminentCustomResource.class, TEST_RESOURCE_NAME) - .getStatus().getUpdateNumber()).isEqualTo(1); + assertThat(extension + .get(NextReconciliationImminentCustomResource.class, TEST_RESOURCE_NAME) + .getStatus() + .getUpdateNumber()) + .isEqualTo(1); }); } - NextReconciliationImminentCustomResource testResource() { var res = new NextReconciliationImminentCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentReconciler.java index d3de766869..7e8b5a49fd 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/nextreconciliationimminent/NextReconciliationImminentReconciler.java @@ -24,7 +24,8 @@ public class NextReconciliationImminentReconciler @Override public UpdateControl reconcile( NextReconciliationImminentCustomResource resource, - Context context) throws InterruptedException { + Context context) + throws InterruptedException { log.info("started reconciliation"); reconciliationWaiting = true; // wait long enough to get manually allowed diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSACustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSACustomResource.java index 45f5543024..9411f43e25 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSACustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSACustomResource.java @@ -13,5 +13,4 @@ @ShortNames("du") public class PatchResourceAndStatusNoSSACustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAIT.java index de4ba09b23..d542513716 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAIT.java @@ -14,12 +14,10 @@ class PatchResourceAndStatusNoSSAIT { @RegisterExtension - LocallyRunOperatorExtension operator = - - LocallyRunOperatorExtension.builder() - .withConfigurationService(o -> o.withUseSSAToPatchPrimaryResource(false)) - .withReconciler(PatchResourceAndStatusNoSSAReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withConfigurationService(o -> o.withUseSSAToPatchPrimaryResource(false)) + .withReconciler(PatchResourceAndStatusNoSSAReconciler.class) + .build(); @Test void updatesSubResourceStatus() { @@ -30,17 +28,13 @@ void updatesSubResourceStatus() { // wait for sure, there are no more events TestUtils.waitXms(300); - PatchResourceAndStatusNoSSACustomResource customResource = - operator - .get(PatchResourceAndStatusNoSSACustomResource.class, - resource.getMetadata().getName()); + PatchResourceAndStatusNoSSACustomResource customResource = operator.get( + PatchResourceAndStatusNoSSACustomResource.class, resource.getMetadata().getName()); - assertThat(TestUtils.getNumberOfExecutions(operator)) - .isEqualTo(1); + assertThat(TestUtils.getNumberOfExecutions(operator)).isEqualTo(1); assertThat(customResource.getStatus().getState()) .isEqualTo(PatchResourceAndStatusNoSSAStatus.State.SUCCESS); - assertThat( - customResource + assertThat(customResource .getMetadata() .getAnnotations() .get(PatchResourceAndStatusNoSSAReconciler.TEST_ANNOTATION)) @@ -48,25 +42,21 @@ void updatesSubResourceStatus() { } void awaitStatusUpdated(String name) { - await("cr status updated") - .atMost(5, TimeUnit.SECONDS) - .untilAsserted( - () -> { - PatchResourceAndStatusNoSSACustomResource cr = - operator.get(PatchResourceAndStatusNoSSACustomResource.class, name); - assertThat(cr) - .isNotNull(); - assertThat(cr.getStatus()) - .isNotNull(); - assertThat(cr.getStatus().getState()) - .isEqualTo(PatchResourceAndStatusNoSSAStatus.State.SUCCESS); - }); + await("cr status updated").atMost(5, TimeUnit.SECONDS).untilAsserted(() -> { + PatchResourceAndStatusNoSSACustomResource cr = + operator.get(PatchResourceAndStatusNoSSACustomResource.class, name); + assertThat(cr).isNotNull(); + assertThat(cr.getStatus()).isNotNull(); + assertThat(cr.getStatus().getState()) + .isEqualTo(PatchResourceAndStatusNoSSAStatus.State.SUCCESS); + }); } public PatchResourceAndStatusNoSSACustomResource createTestCustomResource(String id) { PatchResourceAndStatusNoSSACustomResource resource = new PatchResourceAndStatusNoSSACustomResource(); - resource.setMetadata(new ObjectMetaBuilder().withName("doubleupdateresource-" + id).build()); + resource.setMetadata( + new ObjectMetaBuilder().withName("doubleupdateresource-" + id).build()); resource.setSpec(new PatchResourceAndStatusNoSSASpec()); resource.getSpec().setValue(id); return resource; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAStatus.java index bad4568700..1f1bb5db9b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourceandstatusnossa/PatchResourceAndStatusNoSSAStatus.java @@ -14,6 +14,7 @@ public PatchResourceAndStatusNoSSAStatus setState(State state) { } public enum State { - SUCCESS, ERROR + SUCCESS, + ERROR } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAIT.java index b8746dda3f..f395706092 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAIT.java @@ -8,5 +8,4 @@ public class PatchResourceAndStatusWithSSAIT extends PatchWithSSAITBase { protected Reconciler reconciler() { return new PatchResourceAndStatusWithSSAReconciler(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAReconciler.java index 2d599a9039..58d41f6624 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceAndStatusWithSSAReconciler.java @@ -6,7 +6,7 @@ @ControllerConfiguration public class PatchResourceAndStatusWithSSAReconciler implements Reconciler, - Cleaner { + Cleaner { public static final String ADDED_VALUE = "Added Value"; @@ -30,7 +30,8 @@ public UpdateControl reconcile( } @Override - public DeleteControl cleanup(PatchResourceWithSSACustomResource resource, + public DeleteControl cleanup( + PatchResourceWithSSACustomResource resource, Context context) { return DeleteControl.defaultDelete(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSACustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSACustomResource.java index 0c789127ac..8203f0a85e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSACustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSACustomResource.java @@ -11,6 +11,4 @@ @ShortNames("prs") public class PatchResourceWithSSACustomResource extends CustomResource - implements Namespaced { - -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAIT.java index 6ceaea2867..d512665d06 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAIT.java @@ -1,14 +1,11 @@ package io.javaoperatorsdk.operator.baseapi.patchresourcewithssa; - import io.javaoperatorsdk.operator.api.reconciler.Reconciler; - public class PatchResourceWithSSAIT extends PatchWithSSAITBase { @Override protected Reconciler reconciler() { return new PatchResourceWithSSAReconciler(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAReconciler.java index f5f53ee6c5..29e9871495 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchResourceWithSSAReconciler.java @@ -6,7 +6,7 @@ @ControllerConfiguration public class PatchResourceWithSSAReconciler implements Reconciler, - Cleaner { + Cleaner { public static final String ADDED_VALUE = "Added Value"; @@ -34,7 +34,8 @@ public UpdateControl reconcile( } @Override - public DeleteControl cleanup(PatchResourceWithSSACustomResource resource, + public DeleteControl cleanup( + PatchResourceWithSSACustomResource resource, Context context) { return DeleteControl.defaultDelete(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchWithSSAITBase.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchWithSSAITBase.java index 50b005fef7..c84865ab87 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchWithSSAITBase.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/patchresourcewithssa/PatchWithSSAITBase.java @@ -17,9 +17,7 @@ public abstract class PatchWithSSAITBase { @RegisterExtension LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(reconciler()) - .build(); + LocallyRunOperatorExtension.builder().withReconciler(reconciler()).build(); @Test void reconcilerPatchesResourceWithSSA() { @@ -36,9 +34,10 @@ void reconcilerPatchesResourceWithSSA() { assertThat(actualResource.getStatus().isSuccessfullyReconciled()).isTrue(); // one for resource, one for subresource assertThat(actualResource.getMetadata().getManagedFields().stream() - .filter(mf -> mf.getManager() - .equals(reconciler().getClass().getSimpleName().toLowerCase())) - .toList()).hasSize(2); + .filter(mf -> + mf.getManager().equals(reconciler().getClass().getSimpleName().toLowerCase())) + .toList()) + .hasSize(2); }); } @@ -46,9 +45,7 @@ void reconcilerPatchesResourceWithSSA() { PatchResourceWithSSACustomResource testResource() { var res = new PatchResourceWithSSACustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); res.setSpec(new PatchResourceWithSSASpec()); res.getSpec().setInitValue(INIT_VALUE); return res; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourceEventSourceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourceEventSourceCustomResource.java index 74817da86d..3efae6a309 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourceEventSourceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourceEventSourceCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("pres") -public class PerResourceEventSourceCustomResource - extends CustomResource - implements Namespaced { -} +public class PerResourceEventSourceCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceIT.java index 299109bdd1..0673868943 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceIT.java @@ -15,10 +15,9 @@ class PerResourcePollingEventSourceIT { public static final String NAME_2 = "name2"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new PerResourcePollingEventSourceTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new PerResourcePollingEventSourceTestReconciler()) + .build(); /** * This is kinda some test to verify that the implementation of PerResourcePollingEventSource @@ -41,10 +40,7 @@ void fetchedAndReconciledMultipleTimes() { private PerResourceEventSourceCustomResource resource(String name) { var res = new PerResourceEventSourceCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(name).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java index 8d1cbcc37f..b34c6ef863 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/perresourceeventsource/PerResourcePollingEventSourceTestReconciler.java @@ -27,7 +27,8 @@ public class PerResourcePollingEventSourceTestReconciler @Override public UpdateControl reconcile( PerResourceEventSourceCustomResource resource, - Context context) throws Exception { + Context context) + throws Exception { numberOfExecutions.putIfAbsent(resource.getMetadata().getName(), 0); numberOfExecutions.compute(resource.getMetadata().getName(), (s, v) -> v + 1); return UpdateControl.noUpdate(); @@ -37,14 +38,18 @@ public UpdateControl reconcile( public List> prepareEventSources( EventSourceContext context) { PerResourcePollingEventSource eventSource = - new PerResourcePollingEventSource<>(String.class, context, + new PerResourcePollingEventSource<>( + String.class, + context, new PerResourcePollingConfigurationBuilder<>( - (PerResourceEventSourceCustomResource resource) -> { - numberOfFetchExecutions.putIfAbsent(resource.getMetadata().getName(), 0); - numberOfFetchExecutions.compute(resource.getMetadata().getName(), - (s, v) -> v + 1); - return Set.of(UUID.randomUUID().toString()); - }, Duration.ofMillis(POLL_PERIOD)).build()); + (PerResourceEventSourceCustomResource resource) -> { + numberOfFetchExecutions.putIfAbsent(resource.getMetadata().getName(), 0); + numberOfFetchExecutions.compute( + resource.getMetadata().getName(), (s, v) -> v + 1); + return Set.of(UUID.randomUUID().toString()); + }, + Duration.ofMillis(POLL_PERIOD)) + .build()); return List.of(eventSource); } @@ -56,5 +61,4 @@ public int getNumberOfExecutions(String name) { public int getNumberOfFetchExecution(String name) { return numberOfFetchExecutions.get(name); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/AbstractPrimaryIndexerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/AbstractPrimaryIndexerTestReconciler.java index ac2e7e1534..9294a597dd 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/AbstractPrimaryIndexerTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/AbstractPrimaryIndexerTestReconciler.java @@ -12,8 +12,8 @@ import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; @ControllerConfiguration -public class AbstractPrimaryIndexerTestReconciler implements - Reconciler { +public class AbstractPrimaryIndexerTestReconciler + implements Reconciler { public static final String CONFIG_MAP_NAME = "common-config-map"; @@ -36,5 +36,4 @@ public UpdateControl reconcile( public Map getNumberOfExecutions() { return numberOfExecutions; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerIT.java index cb810dcd35..7eaae37443 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerIT.java @@ -22,7 +22,8 @@ public class PrimaryIndexerIT { LocallyRunOperatorExtension operator = buildOperator(); protected LocallyRunOperatorExtension buildOperator() { - return LocallyRunOperatorExtension.builder().withReconciler(new PrimaryIndexerTestReconciler()) + return LocallyRunOperatorExtension.builder() + .withReconciler(new PrimaryIndexerTestReconciler()) .build(); } @@ -32,23 +33,17 @@ void changesToSecondaryResourcesCorrectlyTriggerReconciler() { operator.create(createTestResource(RESOURCE_NAME1)); operator.create(createTestResource(RESOURCE_NAME2)); - await() - .pollDelay(Duration.ofMillis(500)) - .untilAsserted( - () -> { - assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME1).get()).isEqualTo(1); - assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME2).get()).isEqualTo(1); - }); + await().pollDelay(Duration.ofMillis(500)).untilAsserted(() -> { + assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME1).get()).isEqualTo(1); + assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME2).get()).isEqualTo(1); + }); operator.create(configMap()); - await() - .pollDelay(Duration.ofMillis(500)) - .untilAsserted( - () -> { - assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME1).get()).isEqualTo(2); - assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME2).get()).isEqualTo(2); - }); + await().pollDelay(Duration.ofMillis(500)).untilAsserted(() -> { + assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME1).get()).isEqualTo(2); + assertThat(reconciler.getNumberOfExecutions().get(RESOURCE_NAME2).get()).isEqualTo(2); + }); } private ConfigMap configMap() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResource.java index f670a4be64..2b338c3263 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResource.java @@ -12,7 +12,6 @@ @Kind("PrimaryIndexerTestCustomResource") @ShortNames("pi") public class PrimaryIndexerTestCustomResource - extends - CustomResource - implements Namespaced { -} + extends CustomResource< + PrimaryIndexerTestCustomResourceSpec, PrimaryIndexerTestCustomResourceStatus> + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResourceStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResourceStatus.java index ebcfe347e5..313e2b6a68 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResourceStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestCustomResourceStatus.java @@ -1,7 +1,3 @@ package io.javaoperatorsdk.operator.baseapi.primaryindexer; -public class PrimaryIndexerTestCustomResourceStatus { - - - -} +public class PrimaryIndexerTestCustomResourceStatus {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestReconciler.java index d03cc0fcb0..bfe86c5434 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primaryindexer/PrimaryIndexerTestReconciler.java @@ -12,8 +12,7 @@ import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; @ControllerConfiguration -public class PrimaryIndexerTestReconciler - extends AbstractPrimaryIndexerTestReconciler { +public class PrimaryIndexerTestReconciler extends AbstractPrimaryIndexerTestReconciler { @Override public List> prepareEventSources( @@ -21,19 +20,16 @@ public List> prepareEventSource context.getPrimaryCache().addIndexer(CONFIG_MAP_RELATION_INDEXER, indexer); - var informerConfiguration = - InformerEventSourceConfiguration - .from(ConfigMap.class, PrimaryIndexerTestCustomResource.class) - .withSecondaryToPrimaryMapper( - (ConfigMap secondaryResource) -> context - .getPrimaryCache() - .byIndex( - CONFIG_MAP_RELATION_INDEXER, - secondaryResource.getMetadata().getName()) - .stream() - .map(ResourceID::fromResource) - .collect(Collectors.toSet())) - .build(); + var informerConfiguration = InformerEventSourceConfiguration.from( + ConfigMap.class, PrimaryIndexerTestCustomResource.class) + .withSecondaryToPrimaryMapper((ConfigMap secondaryResource) -> context + .getPrimaryCache() + .byIndex( + CONFIG_MAP_RELATION_INDEXER, secondaryResource.getMetadata().getName()) + .stream() + .map(ResourceID::fromResource) + .collect(Collectors.toSet())) + .build(); return List.of(new InformerEventSource<>(informerConfiguration, context)); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Cluster.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Cluster.java index 18190ae1fa..d0be7738a6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Cluster.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Cluster.java @@ -9,7 +9,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("clu") -public class Cluster - extends CustomResource - implements Namespaced { -} +public class Cluster extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Job.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Job.java index 3215fd8538..611898bd52 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Job.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/Job.java @@ -9,7 +9,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("cjo") -public class Job - extends CustomResource - implements Namespaced { -} +public class Job extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/JobReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/JobReconciler.java index fdca997f7d..7f68c2071b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/JobReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/JobReconciler.java @@ -18,8 +18,7 @@ * intended to be a reusable code as it is, rather serves for deeper understanding of the problem. */ @ControllerConfiguration() -public class JobReconciler - implements Reconciler { +public class JobReconciler implements Reconciler { private static final String JOB_CLUSTER_INDEX = "job-cluster-index"; @@ -38,20 +37,20 @@ public JobReconciler(boolean addPrimaryToSecondaryMapper) { } @Override - public UpdateControl reconcile( - Job resource, Context context) { + public UpdateControl reconcile(Job resource, Context context) { if (!getResourceDirectlyFromCache) { // this is only possible when there is primary to secondary mapper - context.getSecondaryResource(Cluster.class) + context + .getSecondaryResource(Cluster.class) .orElseThrow(() -> new IllegalStateException("Secondary resource should be present")); } else { // reading the resource from cache as alternative, works without primary to secondary mapper - var informerEventSource = (InformerEventSource) context.eventSourceRetriever() - .getEventSourceFor(Cluster.class); + var informerEventSource = (InformerEventSource) + context.eventSourceRetriever().getEventSourceFor(Cluster.class); informerEventSource - .get(new ResourceID(resource.getSpec().getClusterName(), - resource.getMetadata().getNamespace())) + .get(new ResourceID( + resource.getSpec().getClusterName(), resource.getMetadata().getNamespace())) .orElseThrow( () -> new IllegalStateException("Secondary resource cannot be read from cache")); } @@ -61,15 +60,24 @@ public UpdateControl reconcile( @Override public List> prepareEventSources(EventSourceContext context) { - context.getPrimaryCache().addIndexer(JOB_CLUSTER_INDEX, (job -> List - .of(indexKey(job.getSpec().getClusterName(), job.getMetadata().getNamespace())))); + context + .getPrimaryCache() + .addIndexer( + JOB_CLUSTER_INDEX, + (job -> List.of( + indexKey(job.getSpec().getClusterName(), job.getMetadata().getNamespace())))); InformerEventSourceConfiguration.Builder informerConfiguration = InformerEventSourceConfiguration.from(Cluster.class, Job.class) - .withSecondaryToPrimaryMapper(cluster -> context.getPrimaryCache() - .byIndex(JOB_CLUSTER_INDEX, indexKey(cluster.getMetadata().getName(), - cluster.getMetadata().getNamespace())) - .stream().map(ResourceID::fromResource).collect(Collectors.toSet())) + .withSecondaryToPrimaryMapper(cluster -> context + .getPrimaryCache() + .byIndex( + JOB_CLUSTER_INDEX, + indexKey( + cluster.getMetadata().getName(), cluster.getMetadata().getNamespace())) + .stream() + .map(ResourceID::fromResource) + .collect(Collectors.toSet())) .withNamespacesInheritedFromController(); if (addPrimaryToSecondaryMapper) { @@ -90,8 +98,8 @@ public int getNumberOfExecutions() { } @Override - public ErrorStatusUpdateControl updateErrorStatus(Job resource, Context context, - Exception e) { + public ErrorStatusUpdateControl updateErrorStatus( + Job resource, Context context, Exception e) { errorOccurred = true; return ErrorStatusUpdateControl.noStatusUpdate(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryIT.java index cfcb2854bb..9367364344 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryIT.java @@ -17,11 +17,10 @@ class PrimaryToSecondaryIT { public static final int MIN_DELAY = 150; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withAdditionalCustomResourceDefinition(Cluster.class) - .withReconciler(new JobReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withAdditionalCustomResourceDefinition(Cluster.class) + .withReconciler(new JobReconciler()) + .build(); @Test void readsSecondaryInManyToOneCases() throws InterruptedException { @@ -29,16 +28,14 @@ void readsSecondaryInManyToOneCases() throws InterruptedException { Thread.sleep(MIN_DELAY); operator.create(job()); - await().pollDelay(Duration.ofMillis(300)).untilAsserted( - () -> assertThat(operator.getReconcilerOfType(JobReconciler.class).getNumberOfExecutions()) - .isEqualTo(1)); + await().pollDelay(Duration.ofMillis(300)).untilAsserted(() -> assertThat( + operator.getReconcilerOfType(JobReconciler.class).getNumberOfExecutions()) + .isEqualTo(1)); } public static Job job() { var job = new Job(); - job.setMetadata(new ObjectMetaBuilder() - .withName("job1") - .build()); + job.setMetadata(new ObjectMetaBuilder().withName("job1").build()); job.setSpec(new JobSpec()); job.getSpec().setClusterName(CLUSTER_NAME); return job; @@ -46,10 +43,7 @@ public static Job job() { public static Cluster cluster() { Cluster cluster = new Cluster(); - cluster.setMetadata(new ObjectMetaBuilder() - .withName(CLUSTER_NAME) - .build()); + cluster.setMetadata(new ObjectMetaBuilder().withName(CLUSTER_NAME).build()); return cluster; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryMissingIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryMissingIT.java index 4e1908f282..2a8457f3bb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryMissingIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/primarytosecondary/PrimaryToSecondaryMissingIT.java @@ -17,11 +17,10 @@ class PrimaryToSecondaryMissingIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withAdditionalCustomResourceDefinition(Cluster.class) - .withReconciler(new JobReconciler(false)) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withAdditionalCustomResourceDefinition(Cluster.class) + .withReconciler(new JobReconciler(false)) + .build(); @Test void missingPrimaryToSecondaryCausesIssueAccessingSecondary() throws InterruptedException { @@ -49,5 +48,4 @@ void accessingDirectlyTheCacheWorksWithoutPToSMapper() throws InterruptedExcepti assertThat(reconciler.getNumberOfExecutions()).isPositive(); }); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResource.java index 79732a199b..1ecd97f05e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResource.java @@ -9,8 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("rlc") -public class RateLimitCustomResource - extends CustomResource - implements Namespaced { - -} +public class RateLimitCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResourceStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResourceStatus.java index a33142805b..e7b24ae8e0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResourceStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitCustomResourceStatus.java @@ -1,5 +1,3 @@ package io.javaoperatorsdk.operator.baseapi.ratelimit; -public class RateLimitCustomResourceStatus { - -} +public class RateLimitCustomResourceStatus {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitIT.java index 1f09b75b59..c9e0002e09 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitIT.java @@ -17,13 +17,12 @@ class RateLimitIT { - private final static Logger log = LoggerFactory.getLogger(RateLimitIT.class); + private static final Logger log = LoggerFactory.getLogger(RateLimitIT.class); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new RateLimitReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new RateLimitReconciler()) + .build(); @Test void rateLimitsExecution() { @@ -34,26 +33,23 @@ void rateLimitsExecution() { resource.getSpec().setNumber(i); operator.replace(resource); }); - await().pollInterval(Duration.ofMillis(100)) + await() + .pollInterval(Duration.ofMillis(100)) .pollDelay(Duration.ofMillis(REFRESH_PERIOD / 2)) .untilAsserted(() -> assertThat( - operator.getReconcilerOfType(RateLimitReconciler.class).getNumberOfExecutions()) + operator.getReconcilerOfType(RateLimitReconciler.class).getNumberOfExecutions()) .isEqualTo(1)); - await().pollDelay(Duration.ofMillis(REFRESH_PERIOD)) - .untilAsserted(() -> assertThat( + await().pollDelay(Duration.ofMillis(REFRESH_PERIOD)).untilAsserted(() -> assertThat( operator.getReconcilerOfType(RateLimitReconciler.class).getNumberOfExecutions()) - .isEqualTo(2)); + .isEqualTo(2)); } public RateLimitCustomResource createResource() { RateLimitCustomResource res = new RateLimitCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName("test") - .build()); + res.setMetadata(new ObjectMetaBuilder().withName("test").build()); res.setSpec(new RateLimitCustomResourceSpec()); res.getSpec().setNumber(0); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitReconciler.java index 75a70f94d1..d16fcb837b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/ratelimit/RateLimitReconciler.java @@ -9,12 +9,12 @@ import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; import io.javaoperatorsdk.operator.processing.event.rate.RateLimited; -@RateLimited(maxReconciliations = 1, +@RateLimited( + maxReconciliations = 1, within = RateLimitReconciler.REFRESH_PERIOD, unit = TimeUnit.MILLISECONDS) @ControllerConfiguration -public class RateLimitReconciler - implements Reconciler { +public class RateLimitReconciler implements Reconciler { public static final int REFRESH_PERIOD = 3000; @@ -22,8 +22,7 @@ public class RateLimitReconciler @Override public UpdateControl reconcile( - RateLimitCustomResource resource, - Context context) { + RateLimitCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); return UpdateControl.noUpdate(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryIT.java index e1610dc000..74d7a82dec 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryIT.java @@ -20,14 +20,14 @@ class RetryIT { public static final int NUMBER_FAILED_EXECUTIONS = 3; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler( - new RetryTestCustomReconciler(NUMBER_FAILED_EXECUTIONS), - new GenericRetry().setInitialInterval(RETRY_INTERVAL).withLinearRetry() - .setMaxAttempts(MAX_RETRY_ATTEMPTS)) - .build(); - + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler( + new RetryTestCustomReconciler(NUMBER_FAILED_EXECUTIONS), + new GenericRetry() + .setInitialInterval(RETRY_INTERVAL) + .withLinearRetry() + .setMaxAttempts(MAX_RETRY_ATTEMPTS)) + .build(); @Test void retryFailedExecution() { @@ -36,21 +36,15 @@ void retryFailedExecution() { operator.create(resource); await("cr status updated") - .pollDelay( - RETRY_INTERVAL * (NUMBER_FAILED_EXECUTIONS + 2), - TimeUnit.MILLISECONDS) - .pollInterval( - RETRY_INTERVAL, - TimeUnit.MILLISECONDS) + .pollDelay(RETRY_INTERVAL * (NUMBER_FAILED_EXECUTIONS + 2), TimeUnit.MILLISECONDS) + .pollInterval(RETRY_INTERVAL, TimeUnit.MILLISECONDS) .atMost(5, TimeUnit.SECONDS) .untilAsserted(() -> { - assertThat( - TestUtils.getNumberOfExecutions(operator)) + assertThat(TestUtils.getNumberOfExecutions(operator)) .isEqualTo(NUMBER_FAILED_EXECUTIONS + 1); RetryTestCustomResource finalResource = - operator.get(RetryTestCustomResource.class, - resource.getMetadata().getName()); + operator.get(RetryTestCustomResource.class, resource.getMetadata().getName()); assertThat(finalResource.getStatus().getState()) .isEqualTo(RetryTestCustomResourceStatus.State.SUCCESS); }); @@ -58,10 +52,7 @@ void retryFailedExecution() { public static RetryTestCustomResource createTestCustomResource(String id) { RetryTestCustomResource resource = new RetryTestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName("retrysource-" + id) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName("retrysource-" + id).build()); resource.setKind("retrysample"); resource.setSpec(new RetryTestCustomResourceSpec()); resource.getSpec().setValue(id); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryMaxAttemptIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryMaxAttemptIT.java index bedfd5cff5..6b53491529 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryMaxAttemptIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryMaxAttemptIT.java @@ -18,13 +18,14 @@ class RetryMaxAttemptIT { RetryTestCustomReconciler reconciler = new RetryTestCustomReconciler(ALL_EXECUTION_TO_FAIL); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(reconciler, - new GenericRetry().setInitialInterval(RETRY_INTERVAL).withLinearRetry() - .setMaxAttempts(MAX_RETRY_ATTEMPTS)) - .build(); - + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler( + reconciler, + new GenericRetry() + .setInitialInterval(RETRY_INTERVAL) + .withLinearRetry() + .setMaxAttempts(MAX_RETRY_ATTEMPTS)) + .build(); @Test void retryFailedExecution() throws InterruptedException { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomReconciler.java index b9fee4769a..af156736f4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomReconciler.java @@ -15,20 +15,18 @@ public class RetryTestCustomReconciler implements Reconciler, TestExecutionInfoProvider { - private static final Logger log = - LoggerFactory.getLogger(RetryTestCustomReconciler.class); + private static final Logger log = LoggerFactory.getLogger(RetryTestCustomReconciler.class); private final AtomicInteger numberOfExecutions = new AtomicInteger(0); private final AtomicInteger numberOfExecutionFails; - public RetryTestCustomReconciler(int numberOfExecutionFails) { this.numberOfExecutionFails = new AtomicInteger(numberOfExecutionFails); } @Override - public UpdateControl reconcile(RetryTestCustomResource resource, - Context context) { + public UpdateControl reconcile( + RetryTestCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); log.info("Value: " + resource.getSpec().getValue()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResource.java index 0b3e1244b6..492d8b77bb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResource.java @@ -13,5 +13,4 @@ @ShortNames("rs") public class RetryTestCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResourceStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResourceStatus.java index b2d8f3ba56..363195c34f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResourceStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/retry/RetryTestCustomResourceStatus.java @@ -14,6 +14,7 @@ public RetryTestCustomResourceStatus setState(State state) { } public enum State { - SUCCESS, ERROR + SUCCESS, + ERROR } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java index 727930d8e6..b6d94951d8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/ReconcilerExecutorIT.java @@ -16,8 +16,9 @@ class ReconcilerExecutorIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new TestReconciler(true)).build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new TestReconciler(true)) + .build(); @Test void configMapGetsCreatedForTestCustomResource() { @@ -63,21 +64,18 @@ void cleanupExecuted() { awaitStatusUpdated(); operator.delete(resource); - await().atMost(Duration.ofSeconds(1)) - .until(() -> ((TestReconciler) operator.getFirstReconciler()) - .getNumberOfCleanupExecutions() == 1); + await() + .atMost(Duration.ofSeconds(1)) + .until(() -> + ((TestReconciler) operator.getFirstReconciler()).getNumberOfCleanupExecutions() == 1); } void awaitResourcesCreatedOrUpdated() { - await("config map created") - .atMost(5, TimeUnit.SECONDS) - .untilAsserted( - () -> { - ConfigMap configMap = - operator.get(ConfigMap.class, "test-config-map"); - assertThat(configMap).isNotNull(); - assertThat(configMap.getData().get("test-key")).isEqualTo("test-value"); - }); + await("config map created").atMost(5, TimeUnit.SECONDS).untilAsserted(() -> { + ConfigMap configMap = operator.get(ConfigMap.class, "test-config-map"); + assertThat(configMap).isNotNull(); + assertThat(configMap.getData().get("test-key")).isEqualTo("test-value"); + }); } void awaitStatusUpdated() { @@ -85,16 +83,12 @@ void awaitStatusUpdated() { } void awaitStatusUpdated(int timeout) { - await("cr status updated") - .atMost(timeout, TimeUnit.SECONDS) - .untilAsserted( - () -> { - TestCustomResource cr = - operator.get(TestCustomResource.class, - TestUtils.TEST_CUSTOM_RESOURCE_NAME); - assertThat(cr).isNotNull(); - assertThat(cr.getStatus()).isNotNull(); - assertThat(cr.getStatus().getConfigMapStatus()).isEqualTo("ConfigMap Ready"); - }); + await("cr status updated").atMost(timeout, TimeUnit.SECONDS).untilAsserted(() -> { + TestCustomResource cr = + operator.get(TestCustomResource.class, TestUtils.TEST_CUSTOM_RESOURCE_NAME); + assertThat(cr).isNotNull(); + assertThat(cr.getStatus()).isNotNull(); + assertThat(cr.getStatus().getConfigMapStatus()).isEqualTo("ConfigMap Ready"); + }); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResource.java index 5728746573..2e2e53b948 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestCustomResource.java @@ -13,5 +13,4 @@ @ShortNames("cs") public class TestCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestReconciler.java index 50cfd334bf..37ce46b20d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/simple/TestReconciler.java @@ -16,8 +16,9 @@ @ControllerConfiguration(generationAwareEventProcessing = false) public class TestReconciler - implements Reconciler, Cleaner, - TestExecutionInfoProvider { + implements Reconciler, + Cleaner, + TestExecutionInfoProvider { private static final Logger log = LoggerFactory.getLogger(TestReconciler.class); @@ -28,7 +29,6 @@ public class TestReconciler private final AtomicInteger numberOfCleanupExecutions = new AtomicInteger(0); private volatile boolean updateStatus; - public TestReconciler(boolean updateStatus) { this.updateStatus = updateStatus; } @@ -38,11 +38,11 @@ public void setUpdateStatus(boolean updateStatus) { } @Override - public DeleteControl cleanup( - TestCustomResource resource, Context context) { + public DeleteControl cleanup(TestCustomResource resource, Context context) { numberOfCleanupExecutions.incrementAndGet(); - var statusDetail = context.getClient() + var statusDetail = context + .getClient() .configMaps() .inNamespace(resource.getMetadata().getNamespace()) .withName(resource.getSpec().getConfigMapName()) @@ -70,12 +70,11 @@ public UpdateControl reconcile( throw new IllegalStateException("Finalizer is not present."); } final var kubernetesClient = context.getClient(); - ConfigMap existingConfigMap = - kubernetesClient - .configMaps() - .inNamespace(resource.getMetadata().getNamespace()) - .withName(resource.getSpec().getConfigMapName()) - .get(); + ConfigMap existingConfigMap = kubernetesClient + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) + .withName(resource.getSpec().getConfigMapName()) + .get(); if (existingConfigMap != null) { existingConfigMap.setData(configMapData(resource)); @@ -88,19 +87,18 @@ public UpdateControl reconcile( } else { Map labels = new HashMap<>(); labels.put("managedBy", TestReconciler.class.getSimpleName()); - ConfigMap newConfigMap = - new ConfigMapBuilder() - .withMetadata( - new ObjectMetaBuilder() - .withName(resource.getSpec().getConfigMapName()) - .withNamespace(resource.getMetadata().getNamespace()) - .withLabels(labels) - .build()) - .withData(configMapData(resource)) - .build(); + ConfigMap newConfigMap = new ConfigMapBuilder() + .withMetadata(new ObjectMetaBuilder() + .withName(resource.getSpec().getConfigMapName()) + .withNamespace(resource.getMetadata().getNamespace()) + .withLabels(labels) + .build()) + .withData(configMapData(resource)) + .build(); kubernetesClient .configMaps() - .inNamespace(resource.getMetadata().getNamespace()).resource(newConfigMap) + .inNamespace(resource.getMetadata().getNamespace()) + .resource(newConfigMap) .createOrReplace(); } if (updateStatus) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingCustomResource.java index 61d4c7f1ac..7e7dc00c9c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingCustomResource.java @@ -10,8 +10,6 @@ @Version("v1") @ShortNames("spl") public class StatusPatchLockingCustomResource - extends - CustomResource - implements Namespaced { - -} + extends CustomResource< + StatusPatchLockingCustomResourceSpec, StatusPatchLockingCustomResourceStatus> + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingReconciler.java index 46f0e63331..79d69ff50b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchLockingReconciler.java @@ -8,8 +8,7 @@ import io.javaoperatorsdk.operator.api.reconciler.UpdateControl; @ControllerConfiguration -public class StatusPatchLockingReconciler - implements Reconciler { +public class StatusPatchLockingReconciler implements Reconciler { public static final String MESSAGE = "message"; public static final long WAIT_TIME = 500L; @@ -33,5 +32,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchNotLockingForNonSSAIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchNotLockingForNonSSAIT.java index 2363a86392..c86901c730 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchNotLockingForNonSSAIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchNotLockingForNonSSAIT.java @@ -19,10 +19,10 @@ class StatusPatchNotLockingForNonSSAIT { public static final String TEST_RESOURCE_NAME = "test"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(StatusPatchLockingReconciler.class) - .withConfigurationService(o -> o.withUseSSAToPatchPrimaryResource(false)) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(StatusPatchLockingReconciler.class) + .withConfigurationService(o -> o.withUseSSAToPatchPrimaryResource(false)) + .build(); @Test void noOptimisticLockingDoneOnStatusUpdate() throws InterruptedException { @@ -32,15 +32,13 @@ void noOptimisticLockingDoneOnStatusUpdate() throws InterruptedException { operator.replace(resource); await().pollDelay(Duration.ofMillis(WAIT_TIME)).untilAsserted(() -> { - assertThat( - operator.getReconcilerOfType(StatusPatchLockingReconciler.class).getNumberOfExecutions()) - .isEqualTo(1); - var actual = operator.get(StatusPatchLockingCustomResource.class, - TEST_RESOURCE_NAME); - assertThat(actual - .getStatus().getValue()).isEqualTo(1); - assertThat(actual.getMetadata().getGeneration()) + assertThat(operator + .getReconcilerOfType(StatusPatchLockingReconciler.class) + .getNumberOfExecutions()) .isEqualTo(1); + var actual = operator.get(StatusPatchLockingCustomResource.class, TEST_RESOURCE_NAME); + assertThat(actual.getStatus().getValue()).isEqualTo(1); + assertThat(actual.getMetadata().getGeneration()).isEqualTo(1); }); } @@ -50,8 +48,7 @@ void valuesAreDeletedIfSetToNull() { var resource = operator.create(createResource()); await().untilAsserted(() -> { - var actual = operator.get(StatusPatchLockingCustomResource.class, - TEST_RESOURCE_NAME); + var actual = operator.get(StatusPatchLockingCustomResource.class, TEST_RESOURCE_NAME); assertThat(actual.getStatus()).isNotNull(); assertThat(actual.getStatus().getMessage()).isEqualTo(MESSAGE); }); @@ -62,8 +59,7 @@ void valuesAreDeletedIfSetToNull() { operator.replace(resource); await().timeout(Duration.ofMinutes(3)).untilAsserted(() -> { - var actual = operator.get(StatusPatchLockingCustomResource.class, - TEST_RESOURCE_NAME); + var actual = operator.get(StatusPatchLockingCustomResource.class, TEST_RESOURCE_NAME); assertThat(actual.getStatus()).isNotNull(); assertThat(actual.getStatus().getMessage()).isNull(); }); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchSSAMigrationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchSSAMigrationIT.java index 0a5c947c21..ef0585e332 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchSSAMigrationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statuspatchnonlocking/StatusPatchSSAMigrationIT.java @@ -26,9 +26,9 @@ public class StatusPatchSSAMigrationIT { @BeforeEach void beforeEach(TestInfo testInfo) { - LocallyRunOperatorExtension.applyCrd(StatusPatchLockingCustomResource.class, - client); - testInfo.getTestMethod() + LocallyRunOperatorExtension.applyCrd(StatusPatchLockingCustomResource.class, client); + testInfo + .getTestMethod() .ifPresent(method -> testNamespace = KubernetesResourceUtil.sanitizeName(method.getName())); client.namespaces().resource(testNamespace(testNamespace)).create(); } @@ -43,7 +43,6 @@ void afterEach() { client.close(); } - @Test void testMigratingToSSA() { var operator = startOperator(false); @@ -108,9 +107,11 @@ void workaroundMigratingFromToSSA() { var actualResource = client.resource(testResource()).get(); actualResource.getSpec().setMessageInStatus(false); // removing the managed field entry for former method works - actualResource.getMetadata().setManagedFields(actualResource.getMetadata().getManagedFields() - .stream().filter(r -> !r.getOperation().equals("Update") && r.getSubresource() != null) - .toList()); + actualResource + .getMetadata() + .setManagedFields(actualResource.getMetadata().getManagedFields().stream() + .filter(r -> !r.getOperation().equals("Update") && r.getSubresource() != null) + .toList()); client.resource(actualResource).update(); await().untilAsserted(() -> { @@ -124,12 +125,10 @@ void workaroundMigratingFromToSSA() { operator.stop(); } - private Operator startOperator(boolean patchStatusWithSSA) { - var operator = new Operator(o -> o.withCloseClientOnStop(false) - .withUseSSAToPatchPrimaryResource(patchStatusWithSSA)); - operator.register(new StatusPatchLockingReconciler(), - o -> o.settingNamespaces(testNamespace)); + var operator = new Operator( + o -> o.withCloseClientOnStop(false).withUseSSAToPatchPrimaryResource(patchStatusWithSSA)); + operator.register(new StatusPatchLockingReconciler(), o -> o.settingNamespaces(testNamespace)); operator.start(); return operator; @@ -146,8 +145,8 @@ StatusPatchLockingCustomResource testResource() { } private Namespace testNamespace(String name) { - return new NamespaceBuilder().withMetadata(new ObjectMetaBuilder() - .withName(name) - .build()).build(); + return new NamespaceBuilder() + .withMetadata(new ObjectMetaBuilder().withName(name).build()) + .build(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingCustomResource.java index fb638ef5a0..8f97242215 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingCustomResource.java @@ -12,7 +12,4 @@ @Kind("StatusUpdateLockingCustomResource") @ShortNames("sul") public class StatusUpdateLockingCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingIT.java index 881b0b01fc..014e630c99 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingIT.java @@ -18,11 +18,10 @@ class StatusUpdateLockingIT { public static final String TEST_RESOURCE_NAME = "test"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withConfigurationService(o -> o.withUseSSAToPatchPrimaryResource(false)) - .withReconciler(StatusUpdateLockingReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withConfigurationService(o -> o.withUseSSAToPatchPrimaryResource(false)) + .withReconciler(StatusUpdateLockingReconciler.class) + .build(); @Test void noOptimisticLockingDoneOnStatusPatch() throws InterruptedException { @@ -31,14 +30,19 @@ void noOptimisticLockingDoneOnStatusPatch() throws InterruptedException { resource.getMetadata().setAnnotations(Map.of("key", "value")); operator.replace(resource); - await().pollDelay(Duration.ofMillis(WAIT_TIME)).timeout(Duration.ofSeconds(460)) + await() + .pollDelay(Duration.ofMillis(WAIT_TIME)) + .timeout(Duration.ofSeconds(460)) .untilAsserted(() -> { - assertThat( - operator.getReconcilerOfType(StatusUpdateLockingReconciler.class) + assertThat(operator + .getReconcilerOfType(StatusUpdateLockingReconciler.class) .getNumberOfExecutions()) .isEqualTo(1); - assertThat(operator.get(StatusUpdateLockingCustomResource.class, TEST_RESOURCE_NAME) - .getStatus().getValue()).isEqualTo(1); + assertThat(operator + .get(StatusUpdateLockingCustomResource.class, TEST_RESOURCE_NAME) + .getStatus() + .getValue()) + .isEqualTo(1); }); } @@ -47,5 +51,4 @@ StatusUpdateLockingCustomResource createResource() { res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingReconciler.java index 31dc727dde..d6332634fa 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/statusupdatelocking/StatusUpdateLockingReconciler.java @@ -26,5 +26,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomReconciler.java index 51ae9e9330..9c7cfe6609 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomReconciler.java @@ -19,11 +19,9 @@ public class SubResourceTestCustomReconciler public static final int RECONCILER_MIN_EXEC_TIME = 300; - private static final Logger log = - LoggerFactory.getLogger(SubResourceTestCustomReconciler.class); + private static final Logger log = LoggerFactory.getLogger(SubResourceTestCustomReconciler.class); private final AtomicInteger numberOfExecutions = new AtomicInteger(0); - @Override public UpdateControl reconcile( SubResourceTestCustomResource resource, Context context) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResource.java index 976af2c97f..0bd59fc7fe 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResource.java @@ -15,5 +15,4 @@ @ShortNames("ss") public class SubResourceTestCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResourceStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResourceStatus.java index 46080b784e..d427e432cd 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResourceStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceTestCustomResourceStatus.java @@ -14,6 +14,7 @@ public SubResourceTestCustomResourceStatus setState(State state) { } public enum State { - SUCCESS, ERROR + SUCCESS, + ERROR } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceUpdateIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceUpdateIT.java index 8a73cadf3f..71b81373dd 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceUpdateIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/subresource/SubResourceUpdateIT.java @@ -20,9 +20,9 @@ class SubResourceUpdateIT { public static final int EVENT_RECEIVE_WAIT = 200; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(SubResourceTestCustomReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(SubResourceTestCustomReconciler.class) + .build(); @Test void updatesSubResourceStatus() { @@ -33,8 +33,7 @@ void updatesSubResourceStatus() { // wait for sure, there are no more events waitXms(WAIT_AFTER_EXECUTION); // there is no event on status update processed - assertThat(TestUtils.getNumberOfExecutions(operator)) - .isEqualTo(2); + assertThat(TestUtils.getNumberOfExecutions(operator)).isEqualTo(2); } @Test @@ -48,8 +47,7 @@ void updatesSubResourceStatusNoFinalizer() { // wait for sure, there are no more events waitXms(WAIT_AFTER_EXECUTION); // there is no event on status update processed - assertThat(TestUtils.getNumberOfExecutions(operator)) - .isEqualTo(2); + assertThat(TestUtils.getNumberOfExecutions(operator)).isEqualTo(2); } /** Note that we check on controller impl if there is finalizer on execution. */ @@ -63,8 +61,7 @@ void ifNoFinalizerPresentFirstAddsTheFinalizerThenExecutesControllerAgain() { // wait for sure, there are no more events waitXms(WAIT_AFTER_EXECUTION); // there is no event on status update processed - assertThat(TestUtils.getNumberOfExecutions(operator)) - .isEqualTo(2); + assertThat(TestUtils.getNumberOfExecutions(operator)).isEqualTo(2); } /** @@ -91,25 +88,17 @@ void updateCustomResourceAfterSubResourceChange() { } void awaitStatusUpdated(String name) { - await("cr status updated") - .atMost(5, TimeUnit.SECONDS) - .untilAsserted( - () -> { - SubResourceTestCustomResource cr = - operator.get(SubResourceTestCustomResource.class, name); - assertThat(cr).isNotNull(); - assertThat(cr.getStatus()).isNotNull(); - assertThat(cr.getStatus().getState()) - .isEqualTo(SUCCESS); - }); + await("cr status updated").atMost(5, TimeUnit.SECONDS).untilAsserted(() -> { + SubResourceTestCustomResource cr = operator.get(SubResourceTestCustomResource.class, name); + assertThat(cr).isNotNull(); + assertThat(cr.getStatus()).isNotNull(); + assertThat(cr.getStatus().getState()).isEqualTo(SUCCESS); + }); } public SubResourceTestCustomResource createTestCustomResource(String id) { SubResourceTestCustomResource resource = new SubResourceTestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName("subresource-" + id) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName("subresource-" + id).build()); resource.setKind("SubresourceSample"); resource.setSpec(new SubResourceTestCustomResourceSpec()); resource.getSpec().setValue(id); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartCustomResource.java index 7b0d757f82..74846f9a3f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartCustomResource.java @@ -10,7 +10,4 @@ @Version("v1") @ShortNames("udp") public class UnmodifiableDependentPartCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartIT.java index a80905c23a..80b80a127b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartIT.java @@ -19,10 +19,9 @@ public class UnmodifiableDependentPartIT { public static final String UPDATED_DATA = "updatedData"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(UnmodifiableDependentPartReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(UnmodifiableDependentPartReconciler.class) + .build(); @Test void partConfigMapDataUnmodifiable() { @@ -46,15 +45,11 @@ void partConfigMapDataUnmodifiable() { }); } - UnmodifiableDependentPartCustomResource testResource() { var res = new UnmodifiableDependentPartCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new UnmodifiableDependentPartSpec()); res.getSpec().setData(INITIAL_DATA); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartReconciler.java index 9c7f6fb9c1..6defde1d32 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiableDependentPartReconciler.java @@ -24,5 +24,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiablePartConfigMapDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiablePartConfigMapDependent.java index d913c0cecd..f828ae8a29 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiablePartConfigMapDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/unmodifiabledependentpart/UnmodifiablePartConfigMapDependent.java @@ -19,7 +19,8 @@ public UnmodifiablePartConfigMapDependent() { } @Override - protected ConfigMap desired(UnmodifiableDependentPartCustomResource primary, + protected ConfigMap desired( + UnmodifiableDependentPartCustomResource primary, Context context) { var actual = context.getSecondaryResource(ConfigMap.class); ConfigMap res = new ConfigMapBuilder() @@ -28,10 +29,13 @@ protected ConfigMap desired(UnmodifiableDependentPartCustomResource primary, .withNamespace(primary.getMetadata().getNamespace()) .build()) .build(); - res.setData(Map.of(ACTUAL_DATA_KEY, primary.getSpec().getData(), + res.setData(Map.of( + ACTUAL_DATA_KEY, + primary.getSpec().getData(), // setting the old data if available UNMODIFIABLE_INITIAL_DATA_KEY, - actual.map(cm -> cm.getData().get(UNMODIFIABLE_INITIAL_DATA_KEY)) + actual + .map(cm -> cm.getData().get(UNMODIFIABLE_INITIAL_DATA_KEY)) .orElse(primary.getSpec().getData()))); return res; } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomResource.java index de877ceb90..b3f260b5f1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomResource.java @@ -10,8 +10,5 @@ @Version("v1") @ShortNames("usc") public class UpdateStatusInCleanupAndRescheduleCustomResource - extends - CustomResource - implements Namespaced { - -} + extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomStatus.java index dcd9d7dd6c..b053235f11 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleCustomStatus.java @@ -12,5 +12,4 @@ public UpdateStatusInCleanupAndRescheduleCustomStatus setCleanupAttempt(Integer this.cleanupAttempt = cleanupAttempt; return this; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleIT.java index 81dc6dd448..82f4ce24e4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleIT.java @@ -12,12 +12,11 @@ public class UpdateStatusInCleanupAndRescheduleIT { public static final String TEST_RESOURCE = "test1"; - @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(UpdateStatusInCleanupAndRescheduleReconciler.class) - .build(); + @RegisterExtension + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(UpdateStatusInCleanupAndRescheduleReconciler.class) + .build(); @Test void testRescheduleAfterPatch() { @@ -37,17 +36,15 @@ void testRescheduleAfterPatch() { assertThat(resource).isNull(); }); - assertThat(extension.getReconcilerOfType(UpdateStatusInCleanupAndRescheduleReconciler.class) - .getRescheduleDelayWorked()) + assertThat(extension + .getReconcilerOfType(UpdateStatusInCleanupAndRescheduleReconciler.class) + .getRescheduleDelayWorked()) .isTrue(); } UpdateStatusInCleanupAndRescheduleCustomResource testResource() { var resource = new UpdateStatusInCleanupAndRescheduleCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE).build()); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleReconciler.java index ed38df7172..29b60bdf57 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/baseapi/updatestatusincleanupandreschedule/UpdateStatusInCleanupAndRescheduleReconciler.java @@ -13,7 +13,7 @@ @ControllerConfiguration public class UpdateStatusInCleanupAndRescheduleReconciler implements Reconciler, - Cleaner { + Cleaner { public static final Integer DELAY = 150; @@ -30,7 +30,8 @@ public UpdateControl reconcile } @Override - public DeleteControl cleanup(UpdateStatusInCleanupAndRescheduleCustomResource resource, + public DeleteControl cleanup( + UpdateStatusInCleanupAndRescheduleCustomResource resource, Context context) { var status = resource.getStatus(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/BaseConfigurationServiceTest.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/BaseConfigurationServiceTest.java index d239122314..8891b8c253 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/BaseConfigurationServiceTest.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/BaseConfigurationServiceTest.java @@ -54,19 +54,21 @@ class BaseConfigurationServiceTest { // subclass to expose configFor method to this test class - private final static class TestConfigurationService extends BaseConfigurationService { + private static final class TestConfigurationService extends BaseConfigurationService { @Override - protected

    io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( - Reconciler

    reconciler) { + protected

    + io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( + Reconciler

    reconciler) { return super.configFor(reconciler); } } private final TestConfigurationService configurationService = new TestConfigurationService(); - private

    io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( - Reconciler

    reconciler) { + private

    + io.javaoperatorsdk.operator.api.config.ControllerConfiguration

    configFor( + Reconciler

    reconciler) { // ensure that a new configuration is created each time return configurationService.configFor(reconciler); } @@ -74,8 +76,11 @@ private

    io.javaoperatorsdk.operator.api.config.Controlle @SuppressWarnings({"rawtypes", "unchecked"}) private static KubernetesDependentResourceConfig extractDependentKubernetesResourceConfig( io.javaoperatorsdk.operator.api.config.ControllerConfiguration configuration, int index) { - final var spec = - configuration.getWorkflowSpec().orElseThrow().getDependentResourceSpecs().get(index); + final var spec = configuration + .getWorkflowSpec() + .orElseThrow() + .getDependentResourceSpecs() + .get(index); return (KubernetesDependentResourceConfig) configuration.getConfigurationFor(spec); } @@ -137,14 +142,18 @@ void missingAnnotationCreatesDefaultConfig() { @SuppressWarnings("rawtypes") private DependentResourceSpec findByName( List dependentResourceSpecList, String name) { - return dependentResourceSpecList.stream().filter(d -> d.getName().equals(name)).findFirst() + return dependentResourceSpecList.stream() + .filter(d -> d.getName().equals(name)) + .findFirst() .orElseThrow(); } @SuppressWarnings("rawtypes") private Optional findByNameOptional( List dependentResourceSpecList, String name) { - return dependentResourceSpecList.stream().filter(d -> d.getName().equals(name)).findFirst(); + return dependentResourceSpecList.stream() + .filter(d -> d.getName().equals(name)) + .findFirst(); } @Test @@ -166,7 +175,8 @@ && findByNameOptional(dependents, DependentResource.defaultNameFor(ReadOnlyDepen @Test void maxIntervalCanBeConfigured() { var config = configFor(new MaxIntervalReconciler()); - assertEquals(50, config.maxReconciliationInterval().map(Duration::getSeconds).orElseThrow()); + assertEquals( + 50, config.maxReconciliationInterval().map(Duration::getSeconds).orElseThrow()); } @Test @@ -200,8 +210,7 @@ void configuringRateLimitAndGradualRetryViaSuperClassShouldWork() { final var retry = config.getRetry(); final var testRetry = assertInstanceOf(GenericRetry.class, retry); assertEquals( - BaseClassWithGradualRetryAndRateLimited.RETRY_MAX_ATTEMPTS, - testRetry.getMaxAttempts()); + BaseClassWithGradualRetryAndRateLimited.RETRY_MAX_ATTEMPTS, testRetry.getMaxAttempts()); final var rateLimiter = assertInstanceOf(LinearRateLimiter.class, config.getRateLimiter()); assertEquals( @@ -217,10 +226,11 @@ void checkingRetryingGraduallyWorks() { var config = configFor(new CheckRetryingGraduallyConfiguration()); final var retry = config.getRetry(); final var genericRetry = assertInstanceOf(GenericRetry.class, retry); - assertEquals(CheckRetryingGraduallyConfiguration.INITIAL_INTERVAL, - genericRetry.getInitialInterval()); + assertEquals( + CheckRetryingGraduallyConfiguration.INITIAL_INTERVAL, genericRetry.getInitialInterval()); assertEquals(CheckRetryingGraduallyConfiguration.MAX_ATTEMPTS, genericRetry.getMaxAttempts()); - assertEquals(CheckRetryingGraduallyConfiguration.INTERVAL_MULTIPLIER, + assertEquals( + CheckRetryingGraduallyConfiguration.INTERVAL_MULTIPLIER, genericRetry.getIntervalMultiplier()); assertEquals(CheckRetryingGraduallyConfiguration.MAX_INTERVAL, genericRetry.getMaxInterval()); } @@ -247,8 +257,8 @@ void excludedResourceClassesShouldNotUseSSAByDefault() { final var kubernetesDependentResourceConfig = extractDependentKubernetesResourceConfig(config, 1); assertNotNull(kubernetesDependentResourceConfig); - assertFalse(configurationService.shouldUseSSA(ReadOnlyDependent.class, ConfigMap.class, - kubernetesDependentResourceConfig)); + assertFalse(configurationService.shouldUseSSA( + ReadOnlyDependent.class, ConfigMap.class, kubernetesDependentResourceConfig)); } @Test @@ -261,8 +271,10 @@ void excludedResourceClassesShouldUseSSAIfAnnotatedToDoSo() { extractDependentKubernetesResourceConfig(config, 0); assertNotNull(kubernetesDependentResourceConfig); assertTrue(kubernetesDependentResourceConfig.useSSA()); - assertTrue(configurationService.shouldUseSSA(SelectorReconciler.WithAnnotation.class, - ConfigMap.class, kubernetesDependentResourceConfig)); + assertTrue(configurationService.shouldUseSSA( + SelectorReconciler.WithAnnotation.class, + ConfigMap.class, + kubernetesDependentResourceConfig)); } @Test @@ -273,39 +285,46 @@ void dependentsShouldUseSSAByDefaultIfNotExcluded() { var kubernetesDependentResourceConfig = extractDependentKubernetesResourceConfig(config, 0); assertNotNull(kubernetesDependentResourceConfig); assertTrue(configurationService.shouldUseSSA( - DefaultSSAForDependentsReconciler.DefaultDependent.class, ConfigMapReader.class, + DefaultSSAForDependentsReconciler.DefaultDependent.class, + ConfigMapReader.class, kubernetesDependentResourceConfig)); kubernetesDependentResourceConfig = extractDependentKubernetesResourceConfig(config, 1); assertNotNull(kubernetesDependentResourceConfig); assertFalse(kubernetesDependentResourceConfig.useSSA()); - assertFalse(configurationService - .shouldUseSSA(DefaultSSAForDependentsReconciler.NonSSADependent.class, Service.class, - kubernetesDependentResourceConfig)); + assertFalse(configurationService.shouldUseSSA( + DefaultSSAForDependentsReconciler.NonSSADependent.class, + Service.class, + kubernetesDependentResourceConfig)); } @Test void shouldUseSSAShouldAlsoWorkWithManualConfiguration() { var reconciler = new DependentSSAReconciler(true); - assertEquals(reconciler.isUseSSA(), + assertEquals( + reconciler.isUseSSA(), configurationService.shouldUseSSA(reconciler.getSsaConfigMapDependent())); reconciler = new DependentSSAReconciler(false); - assertEquals(reconciler.isUseSSA(), + assertEquals( + reconciler.isUseSSA(), configurationService.shouldUseSSA(reconciler.getSsaConfigMapDependent())); } @SuppressWarnings("unchecked") private static int getValue( io.javaoperatorsdk.operator.api.config.ControllerConfiguration configuration, int index) { - final var spec = - configuration.getWorkflowSpec().orElseThrow().getDependentResourceSpecs().get(index); + final var spec = configuration + .getWorkflowSpec() + .orElseThrow() + .getDependentResourceSpecs() + .get(index); return ((CustomConfig) configuration.getConfigurationFor(spec)).value(); } @ControllerConfiguration( - maxReconciliationInterval = @MaxReconciliationInterval(interval = 50, - timeUnit = TimeUnit.SECONDS)) + maxReconciliationInterval = + @MaxReconciliationInterval(interval = 50, timeUnit = TimeUnit.SECONDS)) private static class MaxIntervalReconciler implements Reconciler { @Override @@ -315,15 +334,14 @@ public UpdateControl reconcile(ConfigMap resource, Context } @Workflow(dependents = @Dependent(type = ReadOnlyDependent.class)) - @ControllerConfiguration( - informer = @Informer(namespaces = OneDepReconciler.CONFIGURED_NS)) + @ControllerConfiguration(informer = @Informer(namespaces = OneDepReconciler.CONFIGURED_NS)) private static class OneDepReconciler implements Reconciler { private static final String CONFIGURED_NS = "foo"; @Override - public UpdateControl reconcile(ConfigMapReader resource, - Context context) { + public UpdateControl reconcile( + ConfigMapReader resource, Context context) { return null; } } @@ -335,38 +353,40 @@ private static class NamedDepReconciler implements Reconciler { private static final String NAME = "foo"; @Override - public UpdateControl reconcile(ConfigMapReader resource, - Context context) { + public UpdateControl reconcile( + ConfigMapReader resource, Context context) { return null; } } - @Workflow(dependents = { - @Dependent(type = ReadOnlyDependent.class), - @Dependent(type = ReadOnlyDependent.class) - }) + @Workflow( + dependents = { + @Dependent(type = ReadOnlyDependent.class), + @Dependent(type = ReadOnlyDependent.class) + }) @ControllerConfiguration private static class DuplicatedDepReconciler implements Reconciler { @Override - public UpdateControl reconcile(ConfigMapReader resource, - Context context) { + public UpdateControl reconcile( + ConfigMapReader resource, Context context) { return null; } } - @Workflow(dependents = { - @Dependent(type = ReadOnlyDependent.class, name = NamedDuplicatedDepReconciler.NAME), - @Dependent(type = ReadOnlyDependent.class) - }) + @Workflow( + dependents = { + @Dependent(type = ReadOnlyDependent.class, name = NamedDuplicatedDepReconciler.NAME), + @Dependent(type = ReadOnlyDependent.class) + }) @ControllerConfiguration private static class NamedDuplicatedDepReconciler implements Reconciler { private static final String NAME = "duplicated"; @Override - public UpdateControl reconcile(ConfigMapReader resource, - Context context) { + public UpdateControl reconcile( + ConfigMapReader resource, Context context) { return null; } } @@ -375,22 +395,23 @@ public UpdateControl reconcile(ConfigMapReader resource, private static class NoDepReconciler implements Reconciler { @Override - public UpdateControl reconcile(ConfigMapReader resource, - Context context) { + public UpdateControl reconcile( + ConfigMapReader resource, Context context) { return null; } } - @Workflow(dependents = { - @Dependent(type = SelectorReconciler.WithAnnotation.class), - @Dependent(type = ReadOnlyDependent.class) - }) + @Workflow( + dependents = { + @Dependent(type = SelectorReconciler.WithAnnotation.class), + @Dependent(type = ReadOnlyDependent.class) + }) @ControllerConfiguration public static class SelectorReconciler implements Reconciler { @Override - public UpdateControl reconcile(ConfigMapReader resource, - Context context) { + public UpdateControl reconcile( + ConfigMapReader resource, Context context) { return null; } @@ -414,8 +435,8 @@ public UpdateControl reconcile(ConfigMap resource, Context @Workflow( dependents = { - @Dependent(type = DefaultSSAForDependentsReconciler.DefaultDependent.class), - @Dependent(type = DefaultSSAForDependentsReconciler.NonSSADependent.class) + @Dependent(type = DefaultSSAForDependentsReconciler.DefaultDependent.class), + @Dependent(type = DefaultSSAForDependentsReconciler.NonSSADependent.class) }) private static class DefaultSSAForDependentsReconciler implements Reconciler { @@ -499,8 +520,7 @@ public UpdateControl reconcile(ConfigMap resource, Context @ControllerConfiguration private static class GradualRetryAndRateLimitedOnSuperClass - extends BaseClassWithGradualRetryAndRateLimited - implements Reconciler { + extends BaseClassWithGradualRetryAndRateLimited implements Reconciler { @Override public UpdateControl reconcile(ConfigMap resource, Context context) { @@ -519,9 +539,7 @@ private static class BaseClassWithGradualRetryAndRateLimited { public static final int RETRY_MAX_ATTEMPTS = 3; } - private static class ControllerConfigurationOnSuperClass extends BaseClass { - - } + private static class ControllerConfigurationOnSuperClass extends BaseClass {} @ControllerConfiguration private static class BaseClass implements Reconciler { @@ -532,10 +550,11 @@ public UpdateControl reconcile(ConfigMap resource, Context } } - @Workflow(dependents = { - @Dependent(type = CustomAnnotatedDep.class), - @Dependent(type = ChildCustomAnnotatedDep.class) - }) + @Workflow( + dependents = { + @Dependent(type = CustomAnnotatedDep.class), + @Dependent(type = ChildCustomAnnotatedDep.class) + }) @ControllerConfiguration() private static class CustomAnnotationReconciler implements Reconciler { @@ -546,10 +565,13 @@ public UpdateControl reconcile(ConfigMap resource, Context } @CustomAnnotation(value = CustomAnnotatedDep.PROVIDED_VALUE) - @Configured(by = CustomAnnotation.class, with = CustomConfig.class, + @Configured( + by = CustomAnnotation.class, + with = CustomConfig.class, converter = CustomConfigConverter.class) - private static class CustomAnnotatedDep implements DependentResource, - ConfiguredDependentResource { + private static class CustomAnnotatedDep + implements DependentResource, + ConfiguredDependentResource { public static final int PROVIDED_VALUE = 42; private CustomConfig config; @@ -575,9 +597,7 @@ public Optional configuration() { } } - private static class ChildCustomAnnotatedDep extends CustomAnnotatedDep { - - } + private static class ChildCustomAnnotatedDep extends CustomAnnotatedDep {} @Retention(RetentionPolicy.RUNTIME) private @interface CustomAnnotation { @@ -593,7 +613,8 @@ private static class CustomConfigConverter static final int CONVERTER_PROVIDED_DEFAULT = 7; @Override - public CustomConfig configFrom(CustomAnnotation configAnnotation, + public CustomConfig configFrom( + CustomAnnotation configAnnotation, DependentResourceSpec spec, io.javaoperatorsdk.operator.api.config.ControllerConfiguration parentConfiguration) { if (configAnnotation == null) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessorTest.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessorTest.java index a7365c19b9..8800b6e4d4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessorTest.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/ControllerConfigurationAnnotationProcessorTest.java @@ -11,36 +11,32 @@ class ControllerConfigurationAnnotationProcessorTest { @Test public void generateCorrectDoneableClassIfInterfaceIsSecond() { - Compilation compilation = - Compiler.javac() - .withProcessors(new ControllerConfigurationAnnotationProcessor()) - .compile( - JavaFileObjects.forResource( - "compile-fixtures/ReconcilerImplemented2Interfaces.java")); + Compilation compilation = Compiler.javac() + .withProcessors(new ControllerConfigurationAnnotationProcessor()) + .compile( + JavaFileObjects.forResource("compile-fixtures/ReconcilerImplemented2Interfaces.java")); CompilationSubject.assertThat(compilation).succeeded(); } @Test public void generateCorrectDoneableClassIfThereIsAbstractBaseController() { - Compilation compilation = - Compiler.javac() - .withProcessors(new ControllerConfigurationAnnotationProcessor()) - .compile( - JavaFileObjects.forResource("compile-fixtures/AbstractReconciler.java"), - JavaFileObjects.forResource( - "compile-fixtures/ReconcilerImplementedIntermediateAbstractClass.java")); + Compilation compilation = Compiler.javac() + .withProcessors(new ControllerConfigurationAnnotationProcessor()) + .compile( + JavaFileObjects.forResource("compile-fixtures/AbstractReconciler.java"), + JavaFileObjects.forResource( + "compile-fixtures/ReconcilerImplementedIntermediateAbstractClass.java")); CompilationSubject.assertThat(compilation).succeeded(); } @Test public void generateDoneableClassWithMultilevelHierarchy() { - Compilation compilation = - Compiler.javac() - .withProcessors(new ControllerConfigurationAnnotationProcessor()) - .compile( - JavaFileObjects.forResource("compile-fixtures/AdditionalReconcilerInterface.java"), - JavaFileObjects.forResource("compile-fixtures/MultilevelAbstractReconciler.java"), - JavaFileObjects.forResource("compile-fixtures/MultilevelReconciler.java")); + Compilation compilation = Compiler.javac() + .withProcessors(new ControllerConfigurationAnnotationProcessor()) + .compile( + JavaFileObjects.forResource("compile-fixtures/AdditionalReconcilerInterface.java"), + JavaFileObjects.forResource("compile-fixtures/MultilevelAbstractReconciler.java"), + JavaFileObjects.forResource("compile-fixtures/MultilevelReconciler.java")); CompilationSubject.assertThat(compilation).succeeded(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/DefaultConfigurationServiceTest.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/DefaultConfigurationServiceTest.java index 88fd33e946..a0451a041e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/DefaultConfigurationServiceTest.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/DefaultConfigurationServiceTest.java @@ -22,8 +22,8 @@ class DefaultConfigurationServiceTest { void returnsValuesFromControllerAnnotationFinalizer() { final var reconciler = new TestCustomReconciler(); final var configuration = configurationService.getConfigurationFor(reconciler); - assertEquals(CustomResource.getCRDName(TestCustomResource.class), - configuration.getResourceTypeName()); + assertEquals( + CustomResource.getCRDName(TestCustomResource.class), configuration.getResourceTypeName()); assertEquals( ReconcilerUtils.getDefaultFinalizerName(TestCustomResource.class), configuration.getFinalizerName()); @@ -41,10 +41,9 @@ void returnCustomerFinalizerNameIfSet() { @Test void supportsInnerClassCustomResources() { final var reconciler = new TestCustomFinalizerReconciler(); - assertDoesNotThrow( - () -> { - configurationService.getConfigurationFor(reconciler).getAssociatedReconcilerClassName(); - }); + assertDoesNotThrow(() -> { + configurationService.getConfigurationFor(reconciler).getAssociatedReconcilerClassName(); + }); } @ControllerConfiguration(finalizerName = CUSTOM_FINALIZER_NAME) @@ -59,8 +58,7 @@ public UpdateControl reconcil @Group("test.crd") @Version("v1") - public static class InnerCustomResource extends CustomResource { - } + public static class InnerCustomResource extends CustomResource {} } @ControllerConfiguration(name = NotAutomaticallyCreated.NAME) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/TestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/TestCustomResource.java index 0f94ae92e4..14956f470d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/TestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/config/runtime/TestCustomResource.java @@ -7,5 +7,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") -class TestCustomResource extends CustomResource implements Namespaced { -} +class TestCustomResource extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentDeleterIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentDeleterIT.java index be7365951e..f04ea93d51 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentDeleterIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentDeleterIT.java @@ -8,9 +8,9 @@ public class BulkDependentDeleterIT extends BulkDependentTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new ManagedDeleterBulkReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new ManagedDeleterBulkReconciler()) + .build(); @Override public LocallyRunOperatorExtension extension() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestBase.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestBase.java index 0441e31205..c672d4da74 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestBase.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestBase.java @@ -47,29 +47,32 @@ public void updatesData() { private void assertNumberOfConfigMaps(int n) { // this test was failing with a lower timeout on GitHub, probably the garbage collection was // slower there. - await().atMost(Duration.ofSeconds(30)) - .untilAsserted(() -> { - var cms = - extension().getKubernetesClient().configMaps().inNamespace(extension().getNamespace()) - .withLabel(LABEL_KEY, LABEL_VALUE) - .list().getItems(); - assertThat(cms).withFailMessage("Number of items is still: " + cms.size()) - .hasSize(n); - }); + await().atMost(Duration.ofSeconds(30)).untilAsserted(() -> { + var cms = extension() + .getKubernetesClient() + .configMaps() + .inNamespace(extension().getNamespace()) + .withLabel(LABEL_KEY, LABEL_VALUE) + .list() + .getItems(); + assertThat(cms).withFailMessage("Number of items is still: " + cms.size()).hasSize(n); + }); } private void assertAdditionalDataOnConfigMaps(String expectedValue) { - await().atMost(Duration.ofSeconds(30)) - .untilAsserted(() -> { - var cms = - extension().getKubernetesClient().configMaps().inNamespace(extension().getNamespace()) - .withLabel(LABEL_KEY, LABEL_VALUE) - .list().getItems(); - cms.forEach(cm -> { - assertThat(cm.getData().get(ConfigMapDeleterBulkDependentResource.ADDITIONAL_DATA_KEY)) - .isEqualTo(expectedValue); - }); - }); + await().atMost(Duration.ofSeconds(30)).untilAsserted(() -> { + var cms = extension() + .getKubernetesClient() + .configMaps() + .inNamespace(extension().getNamespace()) + .withLabel(LABEL_KEY, LABEL_VALUE) + .list() + .getItems(); + cms.forEach(cm -> { + assertThat(cm.getData().get(ConfigMapDeleterBulkDependentResource.ADDITIONAL_DATA_KEY)) + .isEqualTo(expectedValue); + }); + }); } public static BulkDependentTestCustomResource testResource() { @@ -88,8 +91,8 @@ private void updateSpecWithNewAdditionalData(String data) { extension().replace(resource); } - public static void updateSpecWithNewAdditionalData(LocallyRunOperatorExtension extension, - String data) { + public static void updateSpecWithNewAdditionalData( + LocallyRunOperatorExtension extension, String data) { var resource = testResource(); resource.getSpec().setAdditionalData(data); extension.replace(resource); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestCustomResource.java index f7451e06d6..f9d527ccd0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/BulkDependentTestCustomResource.java @@ -10,6 +10,4 @@ @Version("v1") @ShortNames("sbd") public class BulkDependentTestCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/CRUDConfigMapBulkDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/CRUDConfigMapBulkDependentResource.java index 236118c2c7..07652e90dc 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/CRUDConfigMapBulkDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/CRUDConfigMapBulkDependentResource.java @@ -3,5 +3,4 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.GarbageCollected; public class CRUDConfigMapBulkDependentResource extends ConfigMapDeleterBulkDependentResource - implements GarbageCollected { -} + implements GarbageCollected {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/ConfigMapDeleterBulkDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/ConfigMapDeleterBulkDependentResource.java index cba3db3835..7112f12f0e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/ConfigMapDeleterBulkDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/ConfigMapDeleterBulkDependentResource.java @@ -15,8 +15,7 @@ * Not using CRUDKubernetesDependentResource so the delete functionality can be tested. */ public class ConfigMapDeleterBulkDependentResource - extends - KubernetesDependentResource + extends KubernetesDependentResource implements CRUDBulkDependentResource { public static final String LABEL_KEY = "bulk"; @@ -29,8 +28,8 @@ public ConfigMapDeleterBulkDependentResource() { } @Override - public Map desiredResources(BulkDependentTestCustomResource primary, - Context context) { + public Map desiredResources( + BulkDependentTestCustomResource primary, Context context) { var number = primary.getSpec().getNumberOfResources(); Map res = new HashMap<>(); for (int i = 0; i < number; i++) { @@ -53,9 +52,10 @@ public ConfigMap desired(BulkDependentTestCustomResource primary, String key) { } @Override - public Map getSecondaryResources(BulkDependentTestCustomResource primary, - Context context) { - return context.getSecondaryResourcesAsStream(ConfigMap.class) + public Map getSecondaryResources( + BulkDependentTestCustomResource primary, Context context) { + return context + .getSecondaryResourcesAsStream(ConfigMap.class) .filter(cm -> getName(cm).startsWith(primary.getMetadata().getName())) .collect(Collectors.toMap( cm -> getName(cm).substring(getName(cm).lastIndexOf(INDEX_DELIMITER) + 1), diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/BulkDependentWithConditionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/BulkDependentWithConditionIT.java index d4b857bf0c..0b7e45c617 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/BulkDependentWithConditionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/BulkDependentWithConditionIT.java @@ -16,10 +16,9 @@ class BulkDependentWithConditionIT { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new ManagedBulkDependentWithReadyConditionReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new ManagedBulkDependentWithReadyConditionReconciler()) + .build(); @Test void handlesBulkDependentWithPrecondition() { @@ -27,19 +26,19 @@ void handlesBulkDependentWithPrecondition() { extension.create(resource); await().untilAsserted(() -> { - var res = extension.get(BulkDependentTestCustomResource.class, - testResource().getMetadata().getName()); + var res = extension.get( + BulkDependentTestCustomResource.class, testResource().getMetadata().getName()); assertThat(res.getStatus()).isNotNull(); assertThat(res.getStatus().getReady()).isTrue(); - var cms = extension.getKubernetesClient().configMaps().inNamespace(extension.getNamespace()) + var cms = extension + .getKubernetesClient() + .configMaps() + .inNamespace(extension.getNamespace()) .withLabel(LABEL_KEY, LABEL_VALUE) - .list().getItems(); + .list() + .getItems(); assertThat(cms).hasSize(INITIAL_NUMBER_OF_CONFIG_MAPS); - }); } - - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/ManagedBulkDependentWithReadyConditionReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/ManagedBulkDependentWithReadyConditionReconciler.java index 1dc48386cb..d63318c8ac 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/ManagedBulkDependentWithReadyConditionReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/ManagedBulkDependentWithReadyConditionReconciler.java @@ -8,8 +8,11 @@ import io.javaoperatorsdk.operator.dependent.bulkdependent.BulkDependentTestStatus; import io.javaoperatorsdk.operator.dependent.bulkdependent.CRUDConfigMapBulkDependentResource; -@Workflow(dependents = @Dependent(readyPostcondition = SampleBulkCondition.class, - type = CRUDConfigMapBulkDependentResource.class)) +@Workflow( + dependents = + @Dependent( + readyPostcondition = SampleBulkCondition.class, + type = CRUDConfigMapBulkDependentResource.class)) @ControllerConfiguration() public class ManagedBulkDependentWithReadyConditionReconciler implements Reconciler { @@ -18,15 +21,16 @@ public class ManagedBulkDependentWithReadyConditionReconciler @Override public UpdateControl reconcile( - BulkDependentTestCustomResource resource, - Context context) throws Exception { + BulkDependentTestCustomResource resource, Context context) + throws Exception { numberOfExecutions.incrementAndGet(); - var ready = context.managedWorkflowAndDependentResourceContext().getWorkflowReconcileResult() + var ready = context + .managedWorkflowAndDependentResourceContext() + .getWorkflowReconcileResult() .orElseThrow() .allDependentResourcesReady(); - resource.setStatus(new BulkDependentTestStatus()); resource.getStatus().setReady(ready); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/SampleBulkCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/SampleBulkCondition.java index c6e64b7413..d2072aacb7 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/SampleBulkCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/condition/SampleBulkCondition.java @@ -7,8 +7,7 @@ import io.javaoperatorsdk.operator.dependent.bulkdependent.CRUDConfigMapBulkDependentResource; import io.javaoperatorsdk.operator.processing.dependent.workflow.Condition; -public class SampleBulkCondition - implements Condition { +public class SampleBulkCondition implements Condition { // We use ConfigMaps here just to show how to check some properties of resources managed by a // BulkDependentResource. In real life example this would be rather based on some status of those diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/BulkExternalDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/BulkExternalDependentIT.java index d25f92d2be..9d51e7aef6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/BulkExternalDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/BulkExternalDependentIT.java @@ -12,9 +12,9 @@ class BulkExternalDependentIT { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new ExternalBulkResourceReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new ExternalBulkResourceReconciler()) + .build(); ExternalServiceMock externalServiceMock = ExternalServiceMock.getInstance(); @@ -33,7 +33,6 @@ void managesExternalBulkResources() { assertResourceNumberAndData(0, INITIAL_ADDITIONAL_DATA); } - @Test void handlesResourceUpdates() { extension.create(testResource()); @@ -50,5 +49,4 @@ private void assertResourceNumberAndData(int n, String data) { assertThat(resources).allMatch(r -> r.getData().equals(data)); }); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalBulkDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalBulkDependentResource.java index 5112b09be1..5f82dfae6c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalBulkDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalBulkDependentResource.java @@ -18,9 +18,9 @@ public class ExternalBulkDependentResource extends PollingDependentResource implements BulkDependentResource, - Creator, - Deleter, - BulkUpdater { + Creator, + Deleter, + BulkUpdater { public static final String EXTERNAL_RESOURCE_NAME_DELIMITER = "#"; @@ -43,21 +43,28 @@ public Map> fetchResources() { } @Override - public ExternalResource create(ExternalResource desired, BulkDependentTestCustomResource primary, + public ExternalResource create( + ExternalResource desired, + BulkDependentTestCustomResource primary, Context context) { return externalServiceMock.create(desired); } @Override - public ExternalResource update(ExternalResource actual, ExternalResource desired, - BulkDependentTestCustomResource primary, Context context) { + public ExternalResource update( + ExternalResource actual, + ExternalResource desired, + BulkDependentTestCustomResource primary, + Context context) { return externalServiceMock.update(desired); } private static String toExternalResourceId(BulkDependentTestCustomResource primary, String i) { - return primary.getMetadata().getName() + EXTERNAL_RESOURCE_NAME_DELIMITER + - primary.getMetadata().getNamespace() + - EXTERNAL_RESOURCE_NAME_DELIMITER + i; + return primary.getMetadata().getName() + + EXTERNAL_RESOURCE_NAME_DELIMITER + + primary.getMetadata().getNamespace() + + EXTERNAL_RESOURCE_NAME_DELIMITER + + i; } private ResourceID toResourceID(ExternalResource externalResource) { @@ -66,34 +73,38 @@ private ResourceID toResourceID(ExternalResource externalResource) { } @Override - public Map desiredResources(BulkDependentTestCustomResource primary, - Context context) { + public Map desiredResources( + BulkDependentTestCustomResource primary, Context context) { var number = primary.getSpec().getNumberOfResources(); Map res = new HashMap<>(); for (int i = 0; i < number; i++) { var key = Integer.toString(i); - res.put(key, new ExternalResource(toExternalResourceId(primary, key), - primary.getSpec().getAdditionalData())); + res.put( + key, + new ExternalResource( + toExternalResourceId(primary, key), primary.getSpec().getAdditionalData())); } return res; } @Override public Map getSecondaryResources( - BulkDependentTestCustomResource primary, - Context context) { - return context.getSecondaryResourcesAsStream(resourceType()) + BulkDependentTestCustomResource primary, Context context) { + return context + .getSecondaryResourcesAsStream(resourceType()) .filter(r -> r.getId() - .startsWith(primary.getMetadata().getName() + EXTERNAL_RESOURCE_NAME_DELIMITER + - primary.getMetadata().getNamespace() + - EXTERNAL_RESOURCE_NAME_DELIMITER)) + .startsWith(primary.getMetadata().getName() + + EXTERNAL_RESOURCE_NAME_DELIMITER + + primary.getMetadata().getNamespace() + + EXTERNAL_RESOURCE_NAME_DELIMITER)) .collect(Collectors.toMap( r -> r.getId().substring(r.getId().lastIndexOf(EXTERNAL_RESOURCE_NAME_DELIMITER) + 1), r -> r)); } @Override - public void deleteTargetResource(BulkDependentTestCustomResource primary, + public void deleteTargetResource( + BulkDependentTestCustomResource primary, ExternalResource resource, String key, Context context) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalResource.java index dfe8468fff..41c5fa5095 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/external/ExternalResource.java @@ -22,10 +22,8 @@ public String getData() { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; ExternalResource that = (ExternalResource) o; return Objects.equals(id, that.id) && Objects.equals(data, that.data); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentIT.java index 9f3d763f1b..93a8b39ed2 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentIT.java @@ -8,10 +8,9 @@ public class ManagedBulkDependentIT extends BulkDependentTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new ManagedBulkDependentReconciler()) - .build(); - + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new ManagedBulkDependentReconciler()) + .build(); @Override public LocallyRunOperatorExtension extension() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentReconciler.java index be323949aa..b0361a8edf 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedBulkDependentReconciler.java @@ -9,15 +9,14 @@ @Workflow(dependents = @Dependent(type = CRUDConfigMapBulkDependentResource.class)) @ControllerConfiguration -public class ManagedBulkDependentReconciler - implements Reconciler { +public class ManagedBulkDependentReconciler implements Reconciler { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @Override public UpdateControl reconcile( - BulkDependentTestCustomResource resource, - Context context) throws Exception { + BulkDependentTestCustomResource resource, Context context) + throws Exception { numberOfExecutions.addAndGet(1); return UpdateControl.noUpdate(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedDeleterBulkReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedDeleterBulkReconciler.java index 7de2b3898f..48fb5dcfce 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedDeleterBulkReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/managed/ManagedDeleterBulkReconciler.java @@ -10,8 +10,7 @@ public class ManagedDeleterBulkReconciler implements Reconciler { @Override public UpdateControl reconcile( - BulkDependentTestCustomResource resource, - Context context) + BulkDependentTestCustomResource resource, Context context) throws Exception { return UpdateControl.noUpdate(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentIT.java index c84ad38de0..5eff7fe1c7 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentIT.java @@ -20,10 +20,9 @@ public class ReadOnlyBulkDependentIT { public static final String TEST = "test"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new ReadOnlyBulkReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new ReadOnlyBulkReconciler()) + .build(); @Test void readOnlyBulkDependent() { @@ -59,13 +58,10 @@ private ConfigMap createConfigMap(int i, BulkDependentTestCustomResource primary BulkDependentTestCustomResource testCustomResource() { BulkDependentTestCustomResource customResource = new BulkDependentTestCustomResource(); - customResource.setMetadata(new ObjectMetaBuilder() - .withName(TEST) - .build()); + customResource.setMetadata(new ObjectMetaBuilder().withName(TEST).build()); customResource.setSpec(new BulkDependentTestSpec()); customResource.getSpec().setNumberOfResources(EXPECTED_NUMBER_OF_RESOURCES); return customResource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentResource.java index e655d96d6e..c979cb19a2 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkDependentResource.java @@ -15,13 +15,11 @@ import io.javaoperatorsdk.operator.processing.event.source.SecondaryToPrimaryMapper; import io.javaoperatorsdk.operator.processing.event.source.informer.Mappers; - @KubernetesDependent public class ReadOnlyBulkDependentResource - extends - KubernetesDependentResource + extends KubernetesDependentResource implements BulkDependentResource, - SecondaryToPrimaryMapper { + SecondaryToPrimaryMapper { public static final String INDEX_DELIMITER = "-"; @@ -30,9 +28,10 @@ public ReadOnlyBulkDependentResource() { } @Override - public Map getSecondaryResources(BulkDependentTestCustomResource primary, - Context context) { - return context.getSecondaryResourcesAsStream(ConfigMap.class) + public Map getSecondaryResources( + BulkDependentTestCustomResource primary, Context context) { + return context + .getSecondaryResourcesAsStream(ConfigMap.class) .filter(cm -> getName(cm).startsWith(primary.getMetadata().getName())) .collect(Collectors.toMap( cm -> getName(cm).substring(getName(cm).lastIndexOf(INDEX_DELIMITER) + 1), @@ -48,5 +47,4 @@ public Set toPrimaryResourceIDs(ConfigMap resource) { return Mappers.fromOwnerReferences(BulkDependentTestCustomResource.class, false) .toPrimaryResourceIDs(resource); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReadyPostCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReadyPostCondition.java index 9be51eb1f6..0deba986a1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReadyPostCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReadyPostCondition.java @@ -12,12 +12,13 @@ public class ReadOnlyBulkReadyPostCondition @Override public boolean isMet( DependentResource dependentResource, - BulkDependentTestCustomResource primary, Context context) { + BulkDependentTestCustomResource primary, + Context context) { var minResourceNumber = primary.getSpec().getNumberOfResources(); @SuppressWarnings("unchecked") - var secondaryResources = - ((BulkDependentResource) dependentResource) - .getSecondaryResources(primary, context); + var secondaryResources = ((BulkDependentResource) + dependentResource) + .getSecondaryResources(primary, context); return minResourceNumber <= secondaryResources.size(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReconciler.java index bec0823914..bd52640f03 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/readonly/ReadOnlyBulkReconciler.java @@ -6,19 +6,22 @@ import io.javaoperatorsdk.operator.dependent.bulkdependent.BulkDependentTestCustomResource; import io.javaoperatorsdk.operator.dependent.bulkdependent.BulkDependentTestStatus; -@Workflow(dependents = @Dependent(type = ReadOnlyBulkDependentResource.class, - readyPostcondition = ReadOnlyBulkReadyPostCondition.class)) +@Workflow( + dependents = + @Dependent( + type = ReadOnlyBulkDependentResource.class, + readyPostcondition = ReadOnlyBulkReadyPostCondition.class)) @ControllerConfiguration public class ReadOnlyBulkReconciler implements Reconciler { @Override public UpdateControl reconcile( BulkDependentTestCustomResource resource, Context context) { - var nonReadyDependents = - context.managedWorkflowAndDependentResourceContext().getWorkflowReconcileResult() - .orElseThrow() - .getNotReadyDependents(); - + var nonReadyDependents = context + .managedWorkflowAndDependentResourceContext() + .getWorkflowReconcileResult() + .orElseThrow() + .getNotReadyDependents(); BulkDependentTestCustomResource customResource = new BulkDependentTestCustomResource(); customResource.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentIT.java index 5e0ded6100..e1fddb32a4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentIT.java @@ -8,9 +8,9 @@ class StandaloneBulkDependentIT extends BulkDependentTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new StandaloneBulkDependentReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new StandaloneBulkDependentReconciler()) + .build(); @Override public LocallyRunOperatorExtension extension() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentReconciler.java index ab74c41906..6aa87737d4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/bulkdependent/standalone/StandaloneBulkDependentReconciler.java @@ -24,8 +24,7 @@ public StandaloneBulkDependentReconciler() { @Override public UpdateControl reconcile( - BulkDependentTestCustomResource resource, - Context context) { + BulkDependentTestCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); dependent.reconcile(resource, context); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentCustomResource.java index c5cd602ba5..279cf96d2e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentCustomResource.java @@ -11,7 +11,5 @@ @Version("v1") @Kind("CleanerForReconcilerCustomResource") @ShortNames("cfr") -public class CleanerForManagedDependentCustomResource - extends CustomResource - implements Namespaced { -} +public class CleanerForManagedDependentCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentResourcesOnlyIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentResourcesOnlyIT.java index 000fe2b28e..3b03d93fdc 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentResourcesOnlyIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentResourcesOnlyIT.java @@ -14,26 +14,27 @@ class CleanerForManagedDependentResourcesOnlyIT { public static final String TEST_RESOURCE_NAME = "cleaner-for-reconciler-test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new CleanerForManagedDependentTestReconciler()) - .build(); - + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new CleanerForManagedDependentTestReconciler()) + .build(); @Test void addsFinalizerAndCallsCleanupIfCleanerImplemented() { var testResource = createTestResource(); operator.create(testResource); - await().until( - () -> !operator.get(CleanerForManagedDependentCustomResource.class, TEST_RESOURCE_NAME) - .getMetadata().getFinalizers().isEmpty()); + await().until(() -> !operator + .get(CleanerForManagedDependentCustomResource.class, TEST_RESOURCE_NAME) + .getMetadata() + .getFinalizers() + .isEmpty()); operator.delete(testResource); - await().until( - () -> operator.get(CleanerForManagedDependentCustomResource.class, - TEST_RESOURCE_NAME) == null); + await() + .until( + () -> operator.get(CleanerForManagedDependentCustomResource.class, TEST_RESOURCE_NAME) + == null); CleanerForManagedDependentTestReconciler reconciler = (CleanerForManagedDependentTestReconciler) operator.getFirstReconciler(); @@ -48,5 +49,4 @@ private CleanerForManagedDependentCustomResource createTestResource() { cr.getMetadata().setName(TEST_RESOURCE_NAME); return cr; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentTestReconciler.java index bf9a45e29e..d3181d62f1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/CleanerForManagedDependentTestReconciler.java @@ -9,8 +9,7 @@ @Workflow(dependents = {@Dependent(type = ConfigMapDependentResource.class)}) @ControllerConfiguration public class CleanerForManagedDependentTestReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @@ -25,5 +24,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/ConfigMapDependentResource.java index fbb964f196..dfb3cf2ee2 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/cleanermanageddependent/ConfigMapDependentResource.java @@ -11,11 +11,11 @@ import io.javaoperatorsdk.operator.processing.dependent.Updater; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource; -public class ConfigMapDependentResource extends - KubernetesDependentResource +public class ConfigMapDependentResource + extends KubernetesDependentResource implements Creator, - Updater, - Deleter { + Updater, + Deleter { private static final AtomicInteger numberOfCleanupExecutions = new AtomicInteger(0); @@ -24,7 +24,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(CleanerForManagedDependentCustomResource primary, + protected ConfigMap desired( + CleanerForManagedDependentCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); @@ -38,7 +39,8 @@ protected ConfigMap desired(CleanerForManagedDependentCustomResource primary, } @Override - public void delete(CleanerForManagedDependentCustomResource primary, + public void delete( + CleanerForManagedDependentCustomResource primary, Context context) { super.delete(primary, context); numberOfCleanupExecutions.incrementAndGet(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/ConfigMapDependentResource.java index 7d7c62e6b4..ade34c5c54 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/ConfigMapDependentResource.java @@ -7,15 +7,17 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; -public class ConfigMapDependentResource extends - CRUDKubernetesDependentResource { +public class ConfigMapDependentResource + extends CRUDKubernetesDependentResource< + ConfigMap, CreateOnlyIfNotExistingDependentWithSSACustomResource> { public ConfigMapDependentResource() { super(ConfigMap.class); } @Override - protected ConfigMap desired(CreateOnlyIfNotExistingDependentWithSSACustomResource primary, + protected ConfigMap desired( + CreateOnlyIfNotExistingDependentWithSSACustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSACustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSACustomResource.java index 3e53f422bd..0b2e8b1ef6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSACustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSACustomResource.java @@ -8,6 +8,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") public class CreateOnlyIfNotExistingDependentWithSSACustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAIT.java index 82e41c4a1d..a81529669d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAIT.java @@ -20,17 +20,14 @@ class CreateOnlyIfNotExistingDependentWithSSAIT { public static final String KEY = "key"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new CreateOnlyIfNotExistingDependentWithSSAReconciler()) - .build(); - + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new CreateOnlyIfNotExistingDependentWithSSAReconciler()) + .build(); @Test void createsResourceOnlyIfNotExisting() { - var cm = new ConfigMapBuilder().withMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()) + var cm = new ConfigMapBuilder() + .withMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()) .withData(Map.of(KEY, "val")) .build(); @@ -45,11 +42,8 @@ void createsResourceOnlyIfNotExisting() { CreateOnlyIfNotExistingDependentWithSSACustomResource testResource() { var res = new CreateOnlyIfNotExistingDependentWithSSACustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAReconciler.java index 3699cd1a78..fbfc7e1a6d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/createonlyifnotexistsdependentwithssa/CreateOnlyIfNotExistingDependentWithSSAReconciler.java @@ -5,8 +5,7 @@ import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class)}) +@Workflow(dependents = {@Dependent(type = ConfigMapDependentResource.class)}) @ControllerConfiguration() public class CreateOnlyIfNotExistingDependentWithSSAReconciler implements Reconciler { @@ -24,7 +23,4 @@ public UpdateControl reco public int getNumberOfExecutions() { return numberOfExecutions.get(); } - - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperIT.java index 8f2f966a22..4466e86f0e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperIT.java @@ -19,10 +19,9 @@ class DependentAnnotationSecondaryMapperIT { public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(DependentAnnotationSecondaryMapperReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(DependentAnnotationSecondaryMapperReconciler.class) + .build(); @Test void mapsSecondaryByAnnotation() { @@ -31,7 +30,8 @@ void mapsSecondaryByAnnotation() { var reconciler = operator.getReconcilerOfType(DependentAnnotationSecondaryMapperReconciler.class); - await().pollDelay(Duration.ofMillis(150)) + await() + .pollDelay(Duration.ofMillis(150)) .untilAsserted(() -> assertThat(reconciler.getNumberOfExecutions()).isEqualTo(1)); var configMap = operator.get(ConfigMap.class, TEST_RESOURCE_NAME); @@ -46,17 +46,14 @@ void mapsSecondaryByAnnotation() { configMap.getData().put("additional_data", "data"); operator.replace(configMap); - await().pollDelay(Duration.ofMillis(150)) + await() + .pollDelay(Duration.ofMillis(150)) .untilAsserted(() -> assertThat(reconciler.getNumberOfExecutions()).isEqualTo(2)); } - DependentAnnotationSecondaryMapperResource testResource() { var res = new DependentAnnotationSecondaryMapperResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperReconciler.java index 7dc17b5695..5612577372 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperReconciler.java @@ -13,8 +13,10 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = @Dependent( - type = DependentAnnotationSecondaryMapperReconciler.ConfigMapDependentResource.class)) +@Workflow( + dependents = + @Dependent( + type = DependentAnnotationSecondaryMapperReconciler.ConfigMapDependentResource.class)) @ControllerConfiguration public class DependentAnnotationSecondaryMapperReconciler implements Reconciler, TestExecutionInfoProvider { @@ -33,18 +35,19 @@ public int getNumberOfExecutions() { return numberOfExecutions.get(); } - public static class ConfigMapDependentResource extends - KubernetesDependentResource + public static class ConfigMapDependentResource + extends KubernetesDependentResource implements Creator, - Updater, - Deleter { + Updater, + Deleter { public ConfigMapDependentResource() { super(ConfigMap.class); } @Override - protected ConfigMap desired(DependentAnnotationSecondaryMapperResource primary, + protected ConfigMap desired( + DependentAnnotationSecondaryMapperResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() @@ -55,5 +58,4 @@ protected ConfigMap desired(DependentAnnotationSecondaryMapperResource primary, return configMap; } } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperResource.java index f41f92d0ef..c9e8639573 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentannotationsecondarymapper/DependentAnnotationSecondaryMapperResource.java @@ -11,7 +11,5 @@ @Version("v1") @Kind("MaxIntervalTestCustomResource") @ShortNames("mit") -public class DependentAnnotationSecondaryMapperResource - extends CustomResource - implements Namespaced { -} +public class DependentAnnotationSecondaryMapperResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/CustomMappingConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/CustomMappingConfigMapDependentResource.java index ad8639f6cf..146fb11e0f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/CustomMappingConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/CustomMappingConfigMapDependentResource.java @@ -23,16 +23,19 @@ public class CustomMappingConfigMapDependentResource public static final String CUSTOM_TYPE_KEY = "customTypeKey"; public static final String KEY = "key"; - private static final SecondaryToPrimaryMapper mapper = - Mappers.fromAnnotation(CUSTOM_NAME_KEY, CUSTOM_NAMESPACE_KEY, CUSTOM_TYPE_KEY, - DependentCustomMappingCustomResource.class); + private static final SecondaryToPrimaryMapper mapper = Mappers.fromAnnotation( + CUSTOM_NAME_KEY, + CUSTOM_NAMESPACE_KEY, + CUSTOM_TYPE_KEY, + DependentCustomMappingCustomResource.class); public CustomMappingConfigMapDependentResource() { super(ConfigMap.class); } @Override - protected ConfigMap desired(DependentCustomMappingCustomResource primary, + protected ConfigMap desired( + DependentCustomMappingCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() @@ -44,17 +47,14 @@ protected ConfigMap desired(DependentCustomMappingCustomResource primary, } @Override - protected void addSecondaryToPrimaryMapperAnnotations(ConfigMap desired, - DependentCustomMappingCustomResource primary) { - addSecondaryToPrimaryMapperAnnotations(desired, primary, CUSTOM_NAME_KEY, CUSTOM_NAMESPACE_KEY, - CUSTOM_TYPE_KEY); + protected void addSecondaryToPrimaryMapperAnnotations( + ConfigMap desired, DependentCustomMappingCustomResource primary) { + addSecondaryToPrimaryMapperAnnotations( + desired, primary, CUSTOM_NAME_KEY, CUSTOM_NAMESPACE_KEY, CUSTOM_TYPE_KEY); } - @Override public Set toPrimaryResourceIDs(ConfigMap resource) { return mapper.toPrimaryResourceIDs(resource); } - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingAnnotationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingAnnotationIT.java index 3d754fc395..5b57299ee2 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingAnnotationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingAnnotationIT.java @@ -19,11 +19,9 @@ class DependentCustomMappingAnnotationIT { public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(DependentCustomMappingReconciler.class) - .build(); - + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(DependentCustomMappingReconciler.class) + .build(); @Test void testCustomMappingAnnotationForDependent() { @@ -49,12 +47,11 @@ private void assertConfigMapData(String val) { assertThat(resource.getMetadata().getAnnotations()) .containsKey(CUSTOM_NAME_KEY) .containsKey(CUSTOM_NAMESPACE_KEY); - assertThat(resource.getData()).containsEntry(CustomMappingConfigMapDependentResource.KEY, - val); + assertThat(resource.getData()) + .containsEntry(CustomMappingConfigMapDependentResource.KEY, val); }); } - DependentCustomMappingCustomResource testResource() { var dr = new DependentCustomMappingCustomResource(); dr.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); @@ -63,6 +60,4 @@ DependentCustomMappingCustomResource testResource() { return dr; } - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingCustomResource.java index 124a8d1108..ed07777ff3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingCustomResource.java @@ -8,7 +8,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") public class DependentCustomMappingCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingReconciler.java index e8b5d581b1..764e98d8d5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentcustommappingannotation/DependentCustomMappingReconciler.java @@ -11,10 +11,9 @@ public class DependentCustomMappingReconciler @Override public UpdateControl reconcile( DependentCustomMappingCustomResource resource, - Context context) throws Exception { + Context context) + throws Exception { return UpdateControl.noUpdate(); } - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/ConfigMapDependentResource.java index 6bbe6a814e..f4dc408825 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/ConfigMapDependentResource.java @@ -7,8 +7,9 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; -public class ConfigMapDependentResource extends - CRUDNoGCKubernetesDependentResource { +public class ConfigMapDependentResource + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, DependentDifferentNamespaceCustomResource> { public static final String KEY = "key"; @@ -19,7 +20,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(DependentDifferentNamespaceCustomResource primary, + protected ConfigMap desired( + DependentDifferentNamespaceCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceCustomResource.java index 020d147ba9..9545072809 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceCustomResource.java @@ -10,6 +10,4 @@ @Version("v1") @ShortNames("ddn") public class DependentDifferentNamespaceCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceIT.java index b9abf05cad..3aaafeafc9 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceIT.java @@ -18,10 +18,9 @@ class DependentDifferentNamespaceIT { public static final String CHANGED_VALUE = "changed_value"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(DependentDifferentNamespaceReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(DependentDifferentNamespaceReconciler.class) + .build(); @Test void managesCRUDOperationsForDependentInDifferentNamespace() { @@ -49,19 +48,19 @@ void managesCRUDOperationsForDependentInDifferentNamespace() { } private ConfigMap getDependentConfigMap() { - return extension.getKubernetesClient().configMaps() + return extension + .getKubernetesClient() + .configMaps() .inNamespace(ConfigMapDependentResource.NAMESPACE) - .withName(TEST_1).get(); + .withName(TEST_1) + .get(); } DependentDifferentNamespaceCustomResource testResource() { var res = new DependentDifferentNamespaceCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_1) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_1).build()); res.setSpec(new DependentDifferentNamespaceSpec()); res.getSpec().setValue(INITIAL_VALUE); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceReconciler.java index d4ae1c5e0a..3d2b71338c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentdifferentnamespace/DependentDifferentNamespaceReconciler.java @@ -6,13 +6,13 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class), -}) +@Workflow( + dependents = { + @Dependent(type = ConfigMapDependentResource.class), + }) @ControllerConfiguration public class DependentDifferentNamespaceReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @@ -27,5 +27,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterIT.java index 328a4a0544..ca22cb58d0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterIT.java @@ -20,9 +20,9 @@ class DependentFilterIT { public static final String RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(DependentFilterTestReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(DependentFilterTestReconciler.class) + .build(); @Test void filtersUpdateOnConfigMap() { @@ -30,8 +30,10 @@ void filtersUpdateOnConfigMap() { operator.create(resource); await().pollDelay(Duration.ofMillis(150)).untilAsserted(() -> { - assertThat(operator.getReconcilerOfType(DependentFilterTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(1); + assertThat(operator + .getReconcilerOfType(DependentFilterTestReconciler.class) + .getNumberOfExecutions()) + .isEqualTo(1); }); var configMap = operator.get(ConfigMap.class, RESOURCE_NAME); @@ -39,19 +41,18 @@ void filtersUpdateOnConfigMap() { operator.replace(configMap); await().pollDelay(Duration.ofMillis(150)).untilAsserted(() -> { - assertThat(operator.getReconcilerOfType(DependentFilterTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(1); + assertThat(operator + .getReconcilerOfType(DependentFilterTestReconciler.class) + .getNumberOfExecutions()) + .isEqualTo(1); }); } DependentFilterTestCustomResource createResource() { DependentFilterTestCustomResource resource = new DependentFilterTestCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); resource.setSpec(new DependentFilterTestResourceSpec()); resource.getSpec().setValue("value1"); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterTestCustomResource.java index 43822aafb8..bc4d92edbb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/DependentFilterTestCustomResource.java @@ -10,8 +10,7 @@ @Version("v1") @ShortNames("dft") public class DependentFilterTestCustomResource - extends CustomResource - implements Namespaced { + extends CustomResource implements Namespaced { public String getConfigMapName(int id) { return "configmap" + id; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/FilteredDependentConfigMap.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/FilteredDependentConfigMap.java index 7cbb60c583..47ab7cd4c6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/FilteredDependentConfigMap.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/FilteredDependentConfigMap.java @@ -20,7 +20,8 @@ public FilteredDependentConfigMap() { } @Override - protected ConfigMap desired(DependentFilterTestCustomResource primary, + protected ConfigMap desired( + DependentFilterTestCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/UpdateFilter.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/UpdateFilter.java index 2dd4c8bf99..999b3f00d3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/UpdateFilter.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentfilter/UpdateFilter.java @@ -6,8 +6,7 @@ import static io.javaoperatorsdk.operator.dependent.dependentfilter.DependentFilterTestReconciler.CM_VALUE_KEY; import static io.javaoperatorsdk.operator.dependent.dependentfilter.DependentFilterTestReconciler.CONFIG_MAP_FILTER_VALUE; -public class UpdateFilter - implements OnUpdateFilter { +public class UpdateFilter implements OnUpdateFilter { @Override public boolean accept(ConfigMap resource, ConfigMap oldResource) { return !resource.getData().get(CM_VALUE_KEY).equals(CONFIG_MAP_FILTER_VALUE); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/ConfigMapDependentResource.java index 3f0ce9a073..13879227e1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/ConfigMapDependentResource.java @@ -7,8 +7,9 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; -public class ConfigMapDependentResource extends - CRUDKubernetesDependentResource { +public class ConfigMapDependentResource + extends CRUDKubernetesDependentResource< + ConfigMap, DependentOperationEventFilterCustomResource> { public static final String KEY = "key1"; @@ -17,7 +18,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(DependentOperationEventFilterCustomResource primary, + protected ConfigMap desired( + DependentOperationEventFilterCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResource.java index 021c984ec3..67ab4c0937 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResource.java @@ -13,5 +13,4 @@ @ShortNames("oef") public class DependentOperationEventFilterCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResourceTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResourceTestReconciler.java index 3149d1c6d0..d787b736d1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResourceTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterCustomResourceTestReconciler.java @@ -7,14 +7,10 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class) -}) -@ControllerConfiguration( - informer = @Informer(namespaces = Constants.WATCH_CURRENT_NAMESPACE)) +@Workflow(dependents = {@Dependent(type = ConfigMapDependentResource.class)}) +@ControllerConfiguration(informer = @Informer(namespaces = Constants.WATCH_CURRENT_NAMESPACE)) public class DependentOperationEventFilterCustomResourceTestReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @@ -29,5 +25,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterIT.java index 12413cd4b4..1582bf394b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentoperationeventfiltering/DependentOperationEventFilterIT.java @@ -19,38 +19,39 @@ class DependentOperationEventFilterIT { public static final String SPEC_VAL_2 = "val2"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withNamespaceDeleteTimeout(2) - .withReconciler(new DependentOperationEventFilterCustomResourceTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withNamespaceDeleteTimeout(2) + .withReconciler(new DependentOperationEventFilterCustomResourceTestReconciler()) + .build(); @Test void reconcileNotTriggeredWithDependentResourceCreateOrUpdate() { - var resource = - operator.create(createTestResource()); + var resource = operator.create(createTestResource()); - await().pollDelay(Duration.ofSeconds(1)).atMost(Duration.ofSeconds(3)) - .until( - () -> ((DependentOperationEventFilterCustomResourceTestReconciler) operator - .getFirstReconciler()) - .getNumberOfExecutions() == 1); + await() + .pollDelay(Duration.ofSeconds(1)) + .atMost(Duration.ofSeconds(3)) + .until(() -> ((DependentOperationEventFilterCustomResourceTestReconciler) + operator.getFirstReconciler()) + .getNumberOfExecutions() + == 1); assertThat(operator.get(ConfigMap.class, TEST).getData()) .containsEntry(ConfigMapDependentResource.KEY, SPEC_VAL_1); resource.getSpec().setValue(SPEC_VAL_2); operator.replace(resource); - await().pollDelay(Duration.ofSeconds(1)).atMost(Duration.ofSeconds(3)) - .until( - () -> ((DependentOperationEventFilterCustomResourceTestReconciler) operator - .getFirstReconciler()) - .getNumberOfExecutions() == 2); + await() + .pollDelay(Duration.ofSeconds(1)) + .atMost(Duration.ofSeconds(3)) + .until(() -> ((DependentOperationEventFilterCustomResourceTestReconciler) + operator.getFirstReconciler()) + .getNumberOfExecutions() + == 2); assertThat(operator.get(ConfigMap.class, TEST).getData()) .containsEntry(ConfigMapDependentResource.KEY, SPEC_VAL_2); } - private DependentOperationEventFilterCustomResource createTestResource() { DependentOperationEventFilterCustomResource cr = new DependentOperationEventFilterCustomResource(); @@ -60,5 +61,4 @@ private DependentOperationEventFilterCustomResource createTestResource() { cr.getSpec().setValue(SPEC_VAL_1); return cr; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/ConfigMapDependentResource.java index 9f80a90f0d..4f48288dee 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/ConfigMapDependentResource.java @@ -16,7 +16,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(DependentReInitializationCustomResource primary, + protected ConfigMap desired( + DependentReInitializationCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationCustomResource.java index a3c4e9f20b..59991ddda2 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationCustomResource.java @@ -7,8 +7,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") -public class DependentReInitializationCustomResource - extends CustomResource - implements Namespaced { - -} +public class DependentReInitializationCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationIT.java index c215d82da2..270b89a6a5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationIT.java @@ -24,14 +24,11 @@ void dependentCanDeReInitialized() { startEndStopOperator(client, dependent); } - private static void startEndStopOperator(KubernetesClient client, - ConfigMapDependentResource dependent) { - Operator o1 = new Operator(o -> o - .withCloseClientOnStop(false) - .withKubernetesClient(client)); + private static void startEndStopOperator( + KubernetesClient client, ConfigMapDependentResource dependent) { + Operator o1 = new Operator(o -> o.withCloseClientOnStop(false).withKubernetesClient(client)); o1.register(new DependentReInitializationReconciler(dependent)); o1.start(); o1.stop(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationReconciler.java index 7f6072665f..8c435e5cc8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentreinitialization/DependentReInitializationReconciler.java @@ -18,7 +18,8 @@ public DependentReInitializationReconciler(ConfigMapDependentResource dependentR @Override public UpdateControl reconcile( DependentReInitializationCustomResource resource, - Context context) throws Exception { + Context context) + throws Exception { configMapDependentResource.reconcile(resource, context); return UpdateControl.noUpdate(); } @@ -26,9 +27,6 @@ public UpdateControl reconcile( @Override public List> prepareEventSources( EventSourceContext context) { - return EventSourceUtils.dependentEventSources(context, - configMapDependentResource); + return EventSourceUtils.dependentEventSources(context, configMapDependentResource); } - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java index 0530934dba..83c1c9af0e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefIT.java @@ -19,10 +19,9 @@ class DependentResourceCrossRefIT { public static final int EXECUTION_NUMBER = 50; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new DependentResourceCrossRefReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new DependentResourceCrossRefReconciler()) + .build(); @Test void dependentResourceCanReferenceEachOther() { @@ -30,19 +29,16 @@ void dependentResourceCanReferenceEachOther() { for (int i = 0; i < EXECUTION_NUMBER; i++) { operator.create(testResource(i)); } - await() - .pollDelay(Duration.ofMillis(150)) - .untilAsserted( - () -> { - assertThat(operator - .getReconcilerOfType(DependentResourceCrossRefReconciler.class) - .isErrorHappened()).isFalse(); - for (int i = 0; i < EXECUTION_NUMBER; i++) { - assertThat(operator.get(ConfigMap.class, TEST_RESOURCE_NAME + i)).isNotNull(); - assertThat(operator.get(Secret.class, TEST_RESOURCE_NAME + i)).isNotNull(); - } - }); - + await().pollDelay(Duration.ofMillis(150)).untilAsserted(() -> { + assertThat(operator + .getReconcilerOfType(DependentResourceCrossRefReconciler.class) + .isErrorHappened()) + .isFalse(); + for (int i = 0; i < EXECUTION_NUMBER; i++) { + assertThat(operator.get(ConfigMap.class, TEST_RESOURCE_NAME + i)).isNotNull(); + assertThat(operator.get(Secret.class, TEST_RESOURCE_NAME + i)).isNotNull(); + } + }); } DependentResourceCrossRefResource testResource(int n) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java index 4464c02906..e36911fc57 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefReconciler.java @@ -14,11 +14,15 @@ import static io.javaoperatorsdk.operator.dependent.dependentresourcecrossref.DependentResourceCrossRefReconciler.SECRET_NAME; -@Workflow(dependents = { - @Dependent(name = SECRET_NAME, - type = DependentResourceCrossRefReconciler.SecretDependentResource.class), - @Dependent(type = DependentResourceCrossRefReconciler.ConfigMapDependentResource.class, - dependsOn = SECRET_NAME)}) +@Workflow( + dependents = { + @Dependent( + name = SECRET_NAME, + type = DependentResourceCrossRefReconciler.SecretDependentResource.class), + @Dependent( + type = DependentResourceCrossRefReconciler.ConfigMapDependentResource.class, + dependsOn = SECRET_NAME) + }) @ControllerConfiguration public class DependentResourceCrossRefReconciler implements Reconciler { @@ -42,7 +46,8 @@ public int getNumberOfExecutions() { @Override public ErrorStatusUpdateControl updateErrorStatus( DependentResourceCrossRefResource resource, - Context context, Exception e) { + Context context, + Exception e) { errorHappened = true; return ErrorStatusUpdateControl.noStatusUpdate(); } @@ -51,15 +56,16 @@ public boolean isErrorHappened() { return errorHappened; } - public static class SecretDependentResource extends - CRUDKubernetesDependentResource { + public static class SecretDependentResource + extends CRUDKubernetesDependentResource { public SecretDependentResource() { super(Secret.class); } @Override - protected Secret desired(DependentResourceCrossRefResource primary, + protected Secret desired( + DependentResourceCrossRefResource primary, Context context) { Secret secret = new Secret(); secret.setMetadata(new ObjectMetaBuilder() @@ -71,15 +77,16 @@ protected Secret desired(DependentResourceCrossRefResource primary, } } - public static class ConfigMapDependentResource extends - CRUDKubernetesDependentResource { + public static class ConfigMapDependentResource + extends CRUDKubernetesDependentResource { public ConfigMapDependentResource() { super(ConfigMap.class); } @Override - protected ConfigMap desired(DependentResourceCrossRefResource primary, + protected ConfigMap desired( + DependentResourceCrossRefResource primary, Context context) { var secret = context.getSecondaryResource(Secret.class); if (secret.isEmpty()) { @@ -90,12 +97,9 @@ protected ConfigMap desired(DependentResourceCrossRefResource primary, .withName(primary.getMetadata().getName()) .withNamespace(primary.getMetadata().getNamespace()) .build()); - configMap - .setData(Map.of("secretKey", new ArrayList<>(secret.get().getData().keySet()).get(0))); + configMap.setData( + Map.of("secretKey", new ArrayList<>(secret.get().getData().keySet()).get(0))); return configMap; } } - - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefResource.java index fd89f7fa70..3e4abcc850 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentresourcecrossref/DependentResourceCrossRefResource.java @@ -7,7 +7,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") -public class DependentResourceCrossRefResource - extends CustomResource - implements Namespaced { -} +public class DependentResourceCrossRefResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSACustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSACustomResource.java index ed71a9db64..4c3d79917f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSACustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSACustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("dssa") -public class DependentSSACustomResource - extends CustomResource - implements Namespaced { -} +public class DependentSSACustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMatchingIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMatchingIT.java index ec02dd7f5c..acb6624a2f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMatchingIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMatchingIT.java @@ -27,13 +27,11 @@ public class DependentSSAMatchingIT { public static final String ADDITIONAL_KEY = "key2"; public static final String ADDITIONAL_VALUE = "Additional Value"; - @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new DependentSSAReconciler(), - o -> o.withFieldManager(CUSTOM_FIELD_MANAGER_NAME)) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler( + new DependentSSAReconciler(), o -> o.withFieldManager(CUSTOM_FIELD_MANAGER_NAME)) + .build(); @Test void testMatchingAndUpdate() { @@ -45,7 +43,8 @@ void testMatchingAndUpdate() { assertThat(cm).isNotNull(); assertThat(cm.getData()).containsEntry(SSAConfigMapDependent.DATA_KEY, INITIAL_VALUE); assertThat(cm.getMetadata().getManagedFields().stream() - .filter(fm -> fm.getManager().equals(CUSTOM_FIELD_MANAGER_NAME))).isNotEmpty(); + .filter(fm -> fm.getManager().equals(CUSTOM_FIELD_MANAGER_NAME))) + .isNotEmpty(); assertThat(SSAConfigMapDependent.NUMBER_OF_UPDATES.get()).isZero(); }); @@ -57,10 +56,14 @@ void testMatchingAndUpdate() { .withData(Map.of(ADDITIONAL_KEY, ADDITIONAL_VALUE)) .build(); - extension.getKubernetesClient().configMaps().resource(cmPatch).patch(new PatchContext.Builder() - .withFieldManager(OTHER_FIELD_MANAGER) - .withPatchType(PatchType.SERVER_SIDE_APPLY) - .build()); + extension + .getKubernetesClient() + .configMaps() + .resource(cmPatch) + .patch(new PatchContext.Builder() + .withFieldManager(OTHER_FIELD_MANAGER) + .withPatchType(PatchType.SERVER_SIDE_APPLY) + .build()); await().pollDelay(Duration.ofMillis(300)).untilAsserted(() -> { var cm = extension.get(ConfigMap.class, TEST_RESOURCE_NAME); @@ -84,12 +87,9 @@ void testMatchingAndUpdate() { public DependentSSACustomResource testResource() { DependentSSACustomResource resource = new DependentSSACustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); resource.setSpec(new DependentSSASpec()); resource.getSpec().setValue(INITIAL_VALUE); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMigrationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMigrationIT.java index bd3aedb5f9..0e0aacfbea 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMigrationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAMigrationIT.java @@ -34,17 +34,23 @@ void setup(TestInfo testInfo) { testInfo.getTestMethod().ifPresent(method -> { namespace = KubernetesResourceUtil.sanitizeName(method.getName()); cleanup(); - client.namespaces().resource(new NamespaceBuilder().withMetadata(new ObjectMetaBuilder() - .withName(namespace) - .build()).build()).create(); + client + .namespaces() + .resource(new NamespaceBuilder() + .withMetadata(new ObjectMetaBuilder().withName(namespace).build()) + .build()) + .create(); }); } @AfterEach void cleanup() { - client.namespaces().resource(new NamespaceBuilder().withMetadata(new ObjectMetaBuilder() - .withName(namespace) - .build()).build()).delete(); + client + .namespaces() + .resource(new NamespaceBuilder() + .withMetadata(new ObjectMetaBuilder().withName(namespace).build()) + .build()) + .delete(); } @Test @@ -65,8 +71,7 @@ void usingDefaultFieldManagerDoesNotCreatesANewOneWithApplyOperation() { var legacyOperator = createOperator(client, true, null); DependentSSACustomResource testResource = reconcileWithLegacyOperator(legacyOperator); - var operator = createOperator(client, false, - FABRIC8_CLIENT_DEFAULT_FIELD_MANAGER); + var operator = createOperator(client, false, FABRIC8_CLIENT_DEFAULT_FIELD_MANAGER); reconcileWithNewApproach(testResource, operator); var cm = getDependentConfigMap(); @@ -79,8 +84,8 @@ void usingDefaultFieldManagerDoesNotCreatesANewOneWithApplyOperation() { || fm.getManager().equals("Jetty")); } - private void reconcileAgainWithLegacy(Operator legacyOperator, - DependentSSACustomResource testResource) { + private void reconcileAgainWithLegacy( + Operator legacyOperator, DependentSSACustomResource testResource) { legacyOperator.start(); testResource.getSpec().setValue(INITIAL_VALUE); @@ -118,7 +123,11 @@ private DependentSSACustomResource reconcileWithNewApproach( } private ConfigMap getDependentConfigMap() { - return client.configMaps().inNamespace(namespace).withName(TEST_RESOURCE_NAME).get(); + return client + .configMaps() + .inNamespace(namespace) + .withName(TEST_RESOURCE_NAME) + .get(); } private DependentSSACustomResource reconcileWithLegacyOperator(Operator legacyOperator) { @@ -137,9 +146,8 @@ private DependentSSACustomResource reconcileWithLegacyOperator(Operator legacyOp return testResource; } - - private Operator createOperator(KubernetesClient client, boolean legacyDependentHandling, - String fieldManager) { + private Operator createOperator( + KubernetesClient client, boolean legacyDependentHandling, String fieldManager) { Operator operator = new Operator(o -> o.withKubernetesClient(client).withCloseClientOnStop(false)); var reconciler = new DependentSSAReconciler(!legacyDependentHandling); @@ -162,5 +170,4 @@ public DependentSSACustomResource testResource() { resource.getSpec().setValue(INITIAL_VALUE); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAReconciler.java index 8825f4007e..c8eed7d223 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/DependentSSAReconciler.java @@ -44,8 +44,7 @@ public SSAConfigMapDependent getSsaConfigMapDependent() { @Override public UpdateControl reconcile( - DependentSSACustomResource resource, - Context context) { + DependentSSACustomResource resource, Context context) { ssaConfigMapDependent.reconcile(resource, context); numberOfExecutions.addAndGet(1); @@ -59,7 +58,6 @@ public int getNumberOfExecutions() { @Override public List> prepareEventSources( EventSourceContext context) { - return EventSourceUtils.dependentEventSources(context, - ssaConfigMapDependent); + return EventSourceUtils.dependentEventSources(context, ssaConfigMapDependent); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/SSAConfigMapDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/SSAConfigMapDependent.java index a912bfcd03..d2f18d3144 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/SSAConfigMapDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/dependentssa/SSAConfigMapDependent.java @@ -9,8 +9,8 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; -public class SSAConfigMapDependent extends - CRUDKubernetesDependentResource { +public class SSAConfigMapDependent + extends CRUDKubernetesDependentResource { public static AtomicInteger NUMBER_OF_UPDATES = new AtomicInteger(0); @@ -21,8 +21,8 @@ public SSAConfigMapDependent() { } @Override - protected ConfigMap desired(DependentSSACustomResource primary, - Context context) { + protected ConfigMap desired( + DependentSSACustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() .withName(primary.getMetadata().getName()) @@ -33,7 +33,9 @@ protected ConfigMap desired(DependentSSACustomResource primary, } @Override - public ConfigMap update(ConfigMap actual, ConfigMap desired, + public ConfigMap update( + ConfigMap actual, + ConfigMap desired, DependentSSACustomResource primary, Context context) { NUMBER_OF_UPDATES.incrementAndGet(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateCustomResource.java index 353e86d2f9..21c3c0b4ea 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("ess") -public class ExternalStateCustomResource - extends CustomResource - implements Namespaced { -} +public class ExternalStateCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentIT.java index adfe1f31a1..89731f981a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentIT.java @@ -7,9 +7,9 @@ public class ExternalStateDependentIT extends ExternalStateTestBase { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(ExternalStateDependentReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(ExternalStateDependentReconciler.class) + .build(); @Override public LocallyRunOperatorExtension extension() { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentReconciler.java index 9140f40587..abd1253f86 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateDependentReconciler.java @@ -14,16 +14,14 @@ @Workflow(dependents = @Dependent(type = ExternalWithStateDependentResource.class)) @ControllerConfiguration public class ExternalStateDependentReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { public static final String ID_KEY = "id"; private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @Override public UpdateControl reconcile( - ExternalStateCustomResource resource, - Context context) { + ExternalStateCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); return UpdateControl.noUpdate(); @@ -42,5 +40,4 @@ public List> prepareEventSources( context); return List.of(configMapEventSource); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateIT.java index 066d777e80..6c86edb518 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateIT.java @@ -22,9 +22,9 @@ class ExternalStateIT { private final ExternalIDGenServiceMock externalService = ExternalIDGenServiceMock.getInstance(); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(ExternalStateReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(ExternalStateReconciler.class) + .build(); @Test public void reconcilesResourceWithPersistentState() { @@ -48,8 +48,8 @@ private void assertResourcesDeleted(ExternalStateCustomResource resource) { }); } - private void assertResourcesCreated(ExternalStateCustomResource resource, - String initialTestData) { + private void assertResourcesCreated( + ExternalStateCustomResource resource, String initialTestData) { await().untilAsserted(() -> { var cm = operator.get(ConfigMap.class, resource.getMetadata().getName()); var resources = externalService.listResources(); @@ -63,9 +63,7 @@ private void assertResourcesCreated(ExternalStateCustomResource resource, private ExternalStateCustomResource testResource() { var res = new ExternalStateCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new ExternalStateSpec()); res.getSpec().setData(INITIAL_TEST_DATA); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateReconciler.java index 5fb2932152..c50a9619f4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateReconciler.java @@ -31,8 +31,9 @@ @ControllerConfiguration public class ExternalStateReconciler - implements Reconciler, Cleaner, - TestExecutionInfoProvider { + implements Reconciler, + Cleaner, + TestExecutionInfoProvider { public static final String ID_KEY = "id"; private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @@ -40,7 +41,8 @@ public class ExternalStateReconciler private final ExternalIDGenServiceMock externalService = ExternalIDGenServiceMock.getInstance(); InformerEventSource configMapEventSource; - PerResourcePollingEventSource externalResourceEventSource; + PerResourcePollingEventSource + externalResourceEventSource; @Override public UpdateControl reconcile( @@ -48,30 +50,34 @@ public UpdateControl reconcile( numberOfExecutions.addAndGet(1); var externalResource = context.getSecondaryResource(ExternalResource.class); - externalResource.ifPresentOrElse(r -> { - if (!r.getData().equals(resource.getSpec().getData())) { - updateExternalResource(resource, r, context); - } - }, () -> { - if (externalResource.isEmpty()) { - createExternalResource(resource, context); - } - }); - + externalResource.ifPresentOrElse( + r -> { + if (!r.getData().equals(resource.getSpec().getData())) { + updateExternalResource(resource, r, context); + } + }, + () -> { + if (externalResource.isEmpty()) { + createExternalResource(resource, context); + } + }); return UpdateControl.noUpdate(); } - private void updateExternalResource(ExternalStateCustomResource resource, - ExternalResource externalResource, Context context) { - var newResource = new ExternalResource(externalResource.getId(), resource.getSpec().getData()); + private void updateExternalResource( + ExternalStateCustomResource resource, + ExternalResource externalResource, + Context context) { + var newResource = + new ExternalResource(externalResource.getId(), resource.getSpec().getData()); externalService.update(newResource); - externalResourceEventSource.handleRecentResourceUpdate(ResourceID.fromResource(resource), - newResource, externalResource); + externalResourceEventSource.handleRecentResourceUpdate( + ResourceID.fromResource(resource), newResource, externalResource); } - private void createExternalResource(ExternalStateCustomResource resource, - Context context) { + private void createExternalResource( + ExternalStateCustomResource resource, Context context) { var createdResource = externalService.create(new ExternalResource(resource.getSpec().getData())); var configMap = new ConfigMapBuilder() @@ -93,12 +99,16 @@ private void createExternalResource(ExternalStateCustomResource resource, } @Override - public DeleteControl cleanup(ExternalStateCustomResource resource, - Context context) { + public DeleteControl cleanup( + ExternalStateCustomResource resource, Context context) { var externalResource = context.getSecondaryResource(ExternalResource.class); externalResource.ifPresent(er -> externalService.delete(er.getId())); - context.getClient().configMaps().inNamespace(resource.getMetadata().getNamespace()) - .withName(resource.getMetadata().getName()).delete(); + context + .getClient() + .configMaps() + .inNamespace(resource.getMetadata().getNamespace()) + .withName(resource.getMetadata().getName()) + .delete(); return DeleteControl.defaultDelete(); } @@ -116,8 +126,9 @@ public List> prepareEventSources( context); configMapEventSource.setEventSourcePriority(EventSourceStartPriority.RESOURCE_STATE_LOADER); - final PerResourcePollingEventSource.ResourceFetcher fetcher = - (ExternalStateCustomResource primaryResource) -> { + final PerResourcePollingEventSource.ResourceFetcher< + ExternalResource, ExternalStateCustomResource> + fetcher = (ExternalStateCustomResource primaryResource) -> { var configMap = configMapEventSource.getSecondaryResource(primaryResource).orElse(null); if (configMap == null) { @@ -127,11 +138,11 @@ public List> prepareEventSources( var externalResource = externalService.read(id); return externalResource.map(Set::of).orElseGet(Collections::emptySet); }; - externalResourceEventSource = - new PerResourcePollingEventSource<>(ExternalResource.class, context, - new PerResourcePollingConfigurationBuilder<>(fetcher, Duration.ofMillis(300L)).build()); + externalResourceEventSource = new PerResourcePollingEventSource<>( + ExternalResource.class, + context, + new PerResourcePollingConfigurationBuilder<>(fetcher, Duration.ofMillis(300L)).build()); - return Arrays.asList(configMapEventSource, - externalResourceEventSource); + return Arrays.asList(configMapEventSource, externalResourceEventSource); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateTestBase.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateTestBase.java index c58c7cf670..664f1656ab 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateTestBase.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalStateTestBase.java @@ -42,8 +42,8 @@ private void assertResourcesDeleted(ExternalStateCustomResource resource) { }); } - private void assertResourcesCreated(ExternalStateCustomResource resource, - String initialTestData) { + private void assertResourcesCreated( + ExternalStateCustomResource resource, String initialTestData) { await().untilAsserted(() -> { var cm = extension().get(ConfigMap.class, resource.getMetadata().getName()); var resources = externalService.listResources(); @@ -57,9 +57,7 @@ private void assertResourcesCreated(ExternalStateCustomResource resource, private ExternalStateCustomResource testResource() { var res = new ExternalStateCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new ExternalStateSpec()); res.getSpec().setData(INITIAL_TEST_DATA); @@ -67,5 +65,4 @@ private ExternalStateCustomResource testResource() { } abstract LocallyRunOperatorExtension extension(); - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalWithStateDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalWithStateDependentResource.java index 47d6a25144..15ce4e1300 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalWithStateDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/ExternalWithStateDependentResource.java @@ -17,11 +17,11 @@ import io.javaoperatorsdk.operator.support.ExternalIDGenServiceMock; import io.javaoperatorsdk.operator.support.ExternalResource; -public class ExternalWithStateDependentResource extends - PerResourcePollingDependentResource - implements - DependentResourceWithExplicitState, - Updater { +public class ExternalWithStateDependentResource + extends PerResourcePollingDependentResource + implements DependentResourceWithExplicitState< + ExternalResource, ExternalStateCustomResource, ConfigMap>, + Updater { ExternalIDGenServiceMock externalService = ExternalIDGenServiceMock.getInstance(); @@ -31,20 +31,23 @@ public ExternalWithStateDependentResource() { @Override @SuppressWarnings("unchecked") - public Set fetchResources( - ExternalStateCustomResource primaryResource) { - return getResourceID(primaryResource).map(id -> { - var externalResource = externalService.read(id); - return externalResource.map(Set::of).orElseGet(Collections::emptySet); - }).orElseGet(Collections::emptySet); + public Set fetchResources(ExternalStateCustomResource primaryResource) { + return getResourceID(primaryResource) + .map(id -> { + var externalResource = externalService.read(id); + return externalResource.map(Set::of).orElseGet(Collections::emptySet); + }) + .orElseGet(Collections::emptySet); } @Override protected Optional selectTargetSecondaryResource( Set secondaryResources, - ExternalStateCustomResource primary, Context context) { + ExternalStateCustomResource primary, + Context context) { var id = getResourceID(primary); - return id.flatMap(k -> secondaryResources.stream().filter(e -> e.getId().equals(k)).findAny()); + return id.flatMap( + k -> secondaryResources.stream().filter(e -> e.getId().equals(k)).findAny()); } private Optional getResourceID(ExternalStateCustomResource primaryResource) { @@ -54,8 +57,8 @@ private Optional getResourceID(ExternalStateCustomResource primaryResour } @Override - protected ExternalResource desired(ExternalStateCustomResource primary, - Context context) { + protected ExternalResource desired( + ExternalStateCustomResource primary, Context context) { return new ExternalResource(primary.getSpec().getData()); } @@ -65,8 +68,7 @@ public Class stateResourceClass() { } @Override - public ConfigMap stateResource(ExternalStateCustomResource primary, - ExternalResource resource) { + public ConfigMap stateResource(ExternalStateCustomResource primary, ExternalResource resource) { ConfigMap configMap = new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() .withName(primary.getMetadata().getName()) @@ -79,28 +81,34 @@ public ConfigMap stateResource(ExternalStateCustomResource primary, } @Override - public ExternalResource create(ExternalResource desired, + public ExternalResource create( + ExternalResource desired, ExternalStateCustomResource primary, Context context) { return externalService.create(desired); } @Override - public ExternalResource update(ExternalResource actual, - ExternalResource desired, ExternalStateCustomResource primary, + public ExternalResource update( + ExternalResource actual, + ExternalResource desired, + ExternalStateCustomResource primary, Context context) { return externalService.update(new ExternalResource(actual.getId(), desired.getData())); } @Override - public Matcher.Result match(ExternalResource resource, + public Matcher.Result match( + ExternalResource resource, ExternalStateCustomResource primary, Context context) { - return Matcher.Result.nonComputed(resource.getData().equals(primary.getSpec().getData())); + return Matcher.Result.nonComputed( + resource.getData().equals(primary.getSpec().getData())); } @Override - protected void handleDelete(ExternalStateCustomResource primary, + protected void handleDelete( + ExternalStateCustomResource primary, ExternalResource secondary, Context context) { externalService.delete(secondary.getId()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/BulkDependentResourceExternalWithState.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/BulkDependentResourceExternalWithState.java index df3171fbec..ca2e05a2a8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/BulkDependentResourceExternalWithState.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/BulkDependentResourceExternalWithState.java @@ -17,12 +17,13 @@ import io.javaoperatorsdk.operator.support.ExternalIDGenServiceMock; import io.javaoperatorsdk.operator.support.ExternalResource; -public class BulkDependentResourceExternalWithState extends - PerResourcePollingDependentResource - implements - BulkDependentResource, - CRUDBulkDependentResource, - DependentResourceWithExplicitState { +public class BulkDependentResourceExternalWithState + extends PerResourcePollingDependentResource< + ExternalResource, ExternalStateBulkDependentCustomResource> + implements BulkDependentResource, + CRUDBulkDependentResource, + DependentResourceWithExplicitState< + ExternalResource, ExternalStateBulkDependentCustomResource, ConfigMap> { public static final String DELIMITER = "-"; ExternalIDGenServiceMock externalService = ExternalIDGenServiceMock.getInstance(); @@ -53,8 +54,8 @@ public Class stateResourceClass() { } @Override - public ConfigMap stateResource(ExternalStateBulkDependentCustomResource primary, - ExternalResource resource) { + public ConfigMap stateResource( + ExternalStateBulkDependentCustomResource primary, ExternalResource resource) { ConfigMap configMap = new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() .withName(configMapName(primary, resource)) @@ -67,28 +68,33 @@ public ConfigMap stateResource(ExternalStateBulkDependentCustomResource primary, } @Override - public ExternalResource create(ExternalResource desired, + public ExternalResource create( + ExternalResource desired, ExternalStateBulkDependentCustomResource primary, Context context) { return externalService.create(desired); } @Override - public ExternalResource update(ExternalResource actual, - ExternalResource desired, ExternalStateBulkDependentCustomResource primary, + public ExternalResource update( + ExternalResource actual, + ExternalResource desired, + ExternalStateBulkDependentCustomResource primary, Context context) { return externalService.update(new ExternalResource(actual.getId(), desired.getData())); } @Override - protected void handleDelete(ExternalStateBulkDependentCustomResource primary, + protected void handleDelete( + ExternalStateBulkDependentCustomResource primary, ExternalResource secondary, Context context) { externalService.delete(secondary.getId()); } @Override - public Matcher.Result match(ExternalResource actualResource, + public Matcher.Result match( + ExternalResource actualResource, ExternalResource desired, ExternalStateBulkDependentCustomResource primary, Context context) { @@ -102,8 +108,8 @@ public Map desiredResources( int number = primary.getSpec().getNumber(); Map res = new HashMap<>(); for (int i = 0; i < number; i++) { - res.put(Integer.toString(i), - new ExternalResource(primary.getSpec().getData() + DELIMITER + i)); + res.put( + Integer.toString(i), new ExternalResource(primary.getSpec().getData() + DELIMITER + i)); } return res; } @@ -117,19 +123,22 @@ public Map getSecondaryResources( } @Override - public void handleDeleteTargetResource(ExternalStateBulkDependentCustomResource primary, - ExternalResource resource, String key, + public void handleDeleteTargetResource( + ExternalStateBulkDependentCustomResource primary, + ExternalResource resource, + String key, Context context) { externalService.delete(resource.getId()); } private String externalResourceIndex(ExternalResource externalResource) { - return externalResource.getData() + return externalResource + .getData() .substring(externalResource.getData().lastIndexOf(DELIMITER) + 1); } - private String configMapName(ExternalStateBulkDependentCustomResource primary, - ExternalResource resource) { + private String configMapName( + ExternalStateBulkDependentCustomResource primary, ExternalResource resource) { return primary.getMetadata().getName() + DELIMITER + externalResourceIndex(resource); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentCustomResource.java index 4e8c07dcc7..7f75f20de9 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentCustomResource.java @@ -10,6 +10,4 @@ @Version("v1") @ShortNames("esb") public class ExternalStateBulkDependentCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java index 2e0f672c79..44e33f3791 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkDependentReconciler.java @@ -14,8 +14,7 @@ @Workflow(dependents = @Dependent(type = BulkDependentResourceExternalWithState.class)) @ControllerConfiguration public class ExternalStateBulkDependentReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @@ -36,11 +35,10 @@ public int getNumberOfExecutions() { public List> prepareEventSources( EventSourceContext context) { var configMapEventSource = new InformerEventSource<>( - InformerEventSourceConfiguration - .from(ConfigMap.class, ExternalStateBulkDependentCustomResource.class) + InformerEventSourceConfiguration.from( + ConfigMap.class, ExternalStateBulkDependentCustomResource.class) .build(), context); return List.of(configMapEventSource); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkIT.java index 3677537b01..4c00e536bf 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/externalstate/externalstatebulkdependent/ExternalStateBulkIT.java @@ -25,10 +25,9 @@ class ExternalStateBulkIT { private final ExternalIDGenServiceMock externalService = ExternalIDGenServiceMock.getInstance(); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(ExternalStateBulkDependentReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(ExternalStateBulkDependentReconciler.class) + .build(); @Test void reconcilesResourceWithPersistentState() { @@ -53,41 +52,48 @@ void reconcilesResourceWithPersistentState() { private void assertResourcesDeleted(ExternalStateBulkDependentCustomResource resource) { await().untilAsserted(() -> { - var configMaps = - operator.getKubernetesClient().configMaps().inNamespace(operator.getNamespace()) - .list().getItems().stream().filter( - cm -> cm.getMetadata().getName().startsWith(resource.getMetadata().getName())); + var configMaps = operator + .getKubernetesClient() + .configMaps() + .inNamespace(operator.getNamespace()) + .list() + .getItems() + .stream() + .filter( + cm -> cm.getMetadata().getName().startsWith(resource.getMetadata().getName())); var resources = externalService.listResources(); assertThat(configMaps).isEmpty(); assertThat(resources).isEmpty(); }); } - private void assertResources(ExternalStateBulkDependentCustomResource resource, - String initialTestData, int size) { + private void assertResources( + ExternalStateBulkDependentCustomResource resource, String initialTestData, int size) { await().pollInterval(Duration.ofMillis(700)).untilAsserted(() -> { var resources = externalService.listResources(); assertThat(resources).hasSize(size); assertThat(resources).allMatch(r -> r.getData().startsWith(initialTestData)); - var configMaps = - operator.getKubernetesClient().configMaps().inNamespace(operator.getNamespace()) - .list().getItems().stream().filter( - cm -> cm.getMetadata().getName().startsWith(resource.getMetadata().getName())); + var configMaps = operator + .getKubernetesClient() + .configMaps() + .inNamespace(operator.getNamespace()) + .list() + .getItems() + .stream() + .filter( + cm -> cm.getMetadata().getName().startsWith(resource.getMetadata().getName())); assertThat(configMaps).hasSize(size); }); } private ExternalStateBulkDependentCustomResource testResource() { var res = new ExternalStateBulkDependentCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new ExternalStateBulkSpec()); res.getSpec().setNumber(INITIAL_BULK_SIZE); res.getSpec().setData(INITIAL_TEST_DATA); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/GenericKubernetesDependentTestBase.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/GenericKubernetesDependentTestBase.java index c26fcb42b4..70d1d29e0c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/GenericKubernetesDependentTestBase.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/GenericKubernetesDependentTestBase.java @@ -13,7 +13,8 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; -public abstract class GenericKubernetesDependentTestBase> { +public abstract class GenericKubernetesDependentTestBase< + R extends CustomResource> { public static final String INITIAL_DATA = "Initial data"; public static final String CHANGED_DATA = "Changed data"; @@ -48,5 +49,4 @@ void testReconciliation() { public abstract LocallyRunOperatorExtension extension(); public abstract R testResource(String name, String data); - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/ConfigMapGenericKubernetesDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/ConfigMapGenericKubernetesDependent.java index 54c91f66f1..12884714bf 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/ConfigMapGenericKubernetesDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/ConfigMapGenericKubernetesDependent.java @@ -14,12 +14,11 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; @KubernetesDependent -public class ConfigMapGenericKubernetesDependent extends - GenericKubernetesDependentResource - implements - Creator, - Updater, - GarbageCollected { +public class ConfigMapGenericKubernetesDependent + extends GenericKubernetesDependentResource + implements Creator, + Updater, + GarbageCollected { public static final String VERSION = "v1"; public static final String KIND = "ConfigMap"; @@ -35,10 +34,12 @@ protected GenericKubernetesResource desired( Context context) { try (InputStream is = this.getClass().getResourceAsStream("/configmap.yaml")) { - var res = context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item(); + var res = + context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item(); res.getMetadata().setName(primary.getMetadata().getName()); res.getMetadata().setNamespace(primary.getMetadata().getNamespace()); - Map data = (Map) res.getAdditionalProperties().get("data"); + Map data = + (Map) res.getAdditionalProperties().get("data"); data.put(KEY, primary.getSpec().getValue()); return res; } catch (IOException e) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedCustomResource.java index 24c1bbcb08..78e66ca74e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedCustomResource.java @@ -11,6 +11,4 @@ @Version("v1") @ShortNames("gkdm") public class GenericKubernetesDependentManagedCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedIT.java index 9bcccb9c46..c844d98a6d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedIT.java @@ -11,10 +11,9 @@ public class GenericKubernetesDependentManagedIT extends GenericKubernetesDependentTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new GenericKubernetesDependentManagedReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new GenericKubernetesDependentManagedReconciler()) + .build(); @Override public LocallyRunOperatorExtension extension() { @@ -24,12 +23,9 @@ public LocallyRunOperatorExtension extension() { @Override public GenericKubernetesDependentManagedCustomResource testResource(String name, String data) { var resource = new GenericKubernetesDependentManagedCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(name).build()); resource.setSpec(new GenericKubernetesDependentSpec()); resource.getSpec().setValue(INITIAL_DATA); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedReconciler.java index d122f8909e..60c709ad08 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentresourcemanaged/GenericKubernetesDependentManagedReconciler.java @@ -19,5 +19,4 @@ public UpdateControl reconcile( return UpdateControl.noUpdate(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/ConfigMapGenericKubernetesDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/ConfigMapGenericKubernetesDependent.java index 79324641f3..57a647537c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/ConfigMapGenericKubernetesDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/ConfigMapGenericKubernetesDependent.java @@ -12,12 +12,12 @@ import io.javaoperatorsdk.operator.processing.dependent.Updater; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.GenericKubernetesDependentResource; -public class ConfigMapGenericKubernetesDependent extends - GenericKubernetesDependentResource - implements - Creator, - Updater, - GarbageCollected { +public class ConfigMapGenericKubernetesDependent + extends GenericKubernetesDependentResource + implements Creator< + GenericKubernetesResource, GenericKubernetesDependentStandaloneCustomResource>, + Updater, + GarbageCollected { public static final String VERSION = "v1"; public static final String KIND = "ConfigMap"; @@ -33,10 +33,12 @@ protected GenericKubernetesResource desired( Context context) { try (InputStream is = this.getClass().getResourceAsStream("/configmap.yaml")) { - var res = context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item(); + var res = + context.getClient().genericKubernetesResources(VERSION, KIND).load(is).item(); res.getMetadata().setName(primary.getMetadata().getName()); res.getMetadata().setNamespace(primary.getMetadata().getNamespace()); - Map data = (Map) res.getAdditionalProperties().get("data"); + Map data = + (Map) res.getAdditionalProperties().get("data"); data.put(KEY, primary.getSpec().getValue()); return res; } catch (IOException e) { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneCustomResource.java index eaf56831c5..10776fdce1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneCustomResource.java @@ -11,6 +11,4 @@ @Version("v1") @ShortNames("gkd") public class GenericKubernetesDependentStandaloneCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneIT.java index 07c264c6c2..63d8929e61 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneIT.java @@ -11,10 +11,9 @@ public class GenericKubernetesDependentStandaloneIT extends GenericKubernetesDependentTestBase { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new GenericKubernetesDependentStandaloneReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new GenericKubernetesDependentStandaloneReconciler()) + .build(); @Override public LocallyRunOperatorExtension extension() { @@ -24,9 +23,7 @@ public LocallyRunOperatorExtension extension() { @Override public GenericKubernetesDependentStandaloneCustomResource testResource(String name, String data) { var resource = new GenericKubernetesDependentStandaloneCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(name).build()); resource.setSpec(new GenericKubernetesDependentSpec()); resource.getSpec().setValue(INITIAL_DATA); return resource; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java index 0e90d8e9d9..9e29965d39 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/generickubernetesresource/generickubernetesdependentstandalone/GenericKubernetesDependentStandaloneReconciler.java @@ -29,8 +29,9 @@ public UpdateControl reconci } @Override - public List> prepareEventSources( - EventSourceContext context) { + public List> + prepareEventSources( + EventSourceContext context) { return List.of(dependent.eventSource(context).orElseThrow()); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/ConfigMapDependentResource.java index 37e109e8de..129ca1f6b4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/ConfigMapDependentResource.java @@ -21,7 +21,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(InformerRelatedBehaviorTestCustomResource primary, + protected ConfigMap desired( + InformerRelatedBehaviorTestCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() @@ -31,6 +32,5 @@ protected ConfigMap desired(InformerRelatedBehaviorTestCustomResource primary, .build()) .withData(Map.of(DATA_KEY, primary.getMetadata().getName())) .build(); - } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorITS.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorITS.java index 21079c0504..6c2dcf308e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorITS.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorITS.java @@ -44,7 +44,9 @@ * The test ends with "ITS" (Special) since it needs to run separately from other ITs *

    */ -@EnableKubeAPIServer(apiServerFlags = {"--min-request-timeout", "1"}, updateKubeConfigFile = true) +@EnableKubeAPIServer( + apiServerFlags = {"--min-request-timeout", "1"}, + updateKubeConfigFile = true) class InformerRelatedBehaviorITS { public static final String TEST_RESOURCE_NAME = "test1"; @@ -59,8 +61,8 @@ class InformerRelatedBehaviorITS { @BeforeEach void beforeEach(TestInfo testInfo) { - LocallyRunOperatorExtension.applyCrd(InformerRelatedBehaviorTestCustomResource.class, - adminClient); + LocallyRunOperatorExtension.applyCrd( + InformerRelatedBehaviorTestCustomResource.class, adminClient); testInfo.getTestMethod().ifPresent(method -> { actualNamespace = KubernetesResourceUtil.sanitizeName(method.getName()); additionalNamespace = actualNamespace + ADDITIONAL_NAMESPACE_SUFFIX; @@ -103,7 +105,6 @@ void startsUpWhenNoPermissionToCustomResource() { assertThat(operator.getRuntimeInfo().allEventSourcesAreHealthy()).isTrue(); } - @Test void startsUpWhenNoPermissionToSecondaryResource() { adminClient.resource(testCustomResource()).createOrReplace(); @@ -133,14 +134,16 @@ void startsUpIfNoPermissionToOneOfTwoNamespaces() { private void assertInformerNotWatchingForAdditionalNamespace(Operator operator) { assertThat(operator.getRuntimeInfo().allEventSourcesAreHealthy()).isFalse(); - var unhealthyEventSources = - operator.getRuntimeInfo().unhealthyInformerWrappingEventSourceHealthIndicator() - .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); + var unhealthyEventSources = operator + .getRuntimeInfo() + .unhealthyInformerWrappingEventSourceHealthIndicator() + .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); InformerHealthIndicator controllerHealthIndicator = (InformerHealthIndicator) unhealthyEventSources .get(ControllerEventSource.NAME) - .informerHealthIndicators().get(additionalNamespace); + .informerHealthIndicators() + .get(additionalNamespace); assertThat(controllerHealthIndicator).isNotNull(); assertThat(controllerHealthIndicator.getTargetNamespace()).isEqualTo(additionalNamespace); assertThat(controllerHealthIndicator.isWatching()).isFalse(); @@ -148,13 +151,13 @@ private void assertInformerNotWatchingForAdditionalNamespace(Operator operator) InformerHealthIndicator configMapHealthIndicator = (InformerHealthIndicator) unhealthyEventSources .get(InformerRelatedBehaviorTestReconciler.CONFIG_MAP_DEPENDENT_RESOURCE) - .informerHealthIndicators().get(additionalNamespace); + .informerHealthIndicators() + .get(additionalNamespace); assertThat(configMapHealthIndicator).isNotNull(); assertThat(configMapHealthIndicator.getTargetNamespace()).isEqualTo(additionalNamespace); assertThat(configMapHealthIndicator.isWatching()).isFalse(); } - // this will be investigated separately under the issue below, it's not crucial functional wise, // it is rather "something working why it should", not other way around; but it's not a // showstopper @@ -175,7 +178,6 @@ void resilientForLoosingPermissionForCustomResource() { assertReconciled(); } - @Test void resilientForLoosingPermissionForSecondaryResource() { setFullResourcesAccess(); @@ -186,8 +188,11 @@ void resilientForLoosingPermissionForSecondaryResource() { adminClient.resource(testCustomResource()).createOrReplace(); await().pollDelay(Duration.ofMillis(300)).untilAsserted(() -> { - var cm = - adminClient.configMaps().inNamespace(actualNamespace).withName(TEST_RESOURCE_NAME).get(); + var cm = adminClient + .configMaps() + .inNamespace(actualNamespace) + .withName(TEST_RESOURCE_NAME) + .get(); assertThat(cm).isNull(); }); @@ -253,8 +258,11 @@ private ConfigMap dependentConfigMap() { private void assertReconciled() { await().untilAsserted(() -> { assertThat(reconciler.getNumberOfExecutions()).isGreaterThan(0); - var cm = - adminClient.configMaps().inNamespace(actualNamespace).withName(TEST_RESOURCE_NAME).get(); + var cm = adminClient + .configMaps() + .inNamespace(actualNamespace) + .withName(TEST_RESOURCE_NAME) + .get(); assertThat(cm).isNotNull(); }); } @@ -262,35 +270,37 @@ private void assertReconciled() { @SuppressWarnings("unchecked") private void assertRuntimeInfoNoCRPermission(Operator operator) { assertThat(operator.getRuntimeInfo().allEventSourcesAreHealthy()).isFalse(); - var unhealthyEventSources = - operator.getRuntimeInfo().unhealthyEventSources() - .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); + var unhealthyEventSources = operator + .getRuntimeInfo() + .unhealthyEventSources() + .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); assertThat(unhealthyEventSources).isNotEmpty(); - assertThat(unhealthyEventSources.get(ControllerEventSource.NAME)) - .isNotNull(); - var informerHealthIndicators = operator.getRuntimeInfo() + assertThat(unhealthyEventSources.get(ControllerEventSource.NAME)).isNotNull(); + var informerHealthIndicators = operator + .getRuntimeInfo() .unhealthyInformerWrappingEventSourceHealthIndicator() .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); assertThat(informerHealthIndicators).isNotEmpty(); - assertThat(informerHealthIndicators.get(ControllerEventSource.NAME) - .informerHealthIndicators()) + assertThat(informerHealthIndicators.get(ControllerEventSource.NAME).informerHealthIndicators()) .hasSize(1); } @SuppressWarnings("unchecked") private void assertRuntimeInfoForSecondaryPermission(Operator operator) { assertThat(operator.getRuntimeInfo().allEventSourcesAreHealthy()).isFalse(); - var unhealthyEventSources = - operator.getRuntimeInfo().unhealthyEventSources() - .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); + var unhealthyEventSources = operator + .getRuntimeInfo() + .unhealthyEventSources() + .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); assertThat(unhealthyEventSources).isNotEmpty(); assertThat(unhealthyEventSources.get(CONFIG_MAP_DEPENDENT_RESOURCE)).isNotNull(); - var informerHealthIndicators = operator.getRuntimeInfo() + var informerHealthIndicators = operator + .getRuntimeInfo() .unhealthyInformerWrappingEventSourceHealthIndicator() .get(INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER); assertThat(informerHealthIndicators).isNotEmpty(); assertThat( - informerHealthIndicators.get(CONFIG_MAP_DEPENDENT_RESOURCE).informerHealthIndicators()) + informerHealthIndicators.get(CONFIG_MAP_DEPENDENT_RESOURCE).informerHealthIndicators()) .hasSize(1); } @@ -308,21 +318,20 @@ Operator startOperator(boolean stopOnInformerErrorDuringStartup) { return startOperator(stopOnInformerErrorDuringStartup, true); } - Operator startOperator(boolean stopOnInformerErrorDuringStartup, boolean addStopHandler, - String... namespaces) { + Operator startOperator( + boolean stopOnInformerErrorDuringStartup, boolean addStopHandler, String... namespaces) { reconciler = new InformerRelatedBehaviorTestReconciler(); - Operator operator = new Operator( - co -> { - co.withKubernetesClient(clientUsingServiceAccount()); - co.withStopOnInformerErrorDuringStartup(stopOnInformerErrorDuringStartup); - co.withCacheSyncTimeout(Duration.ofMillis(3000)); - co.withReconciliationTerminationTimeout(Duration.ofSeconds(1)); - if (addStopHandler) { - co.withInformerStoppedHandler((informer, ex) -> replacementStopHandlerCalled = true); - } - }); + Operator operator = new Operator(co -> { + co.withKubernetesClient(clientUsingServiceAccount()); + co.withStopOnInformerErrorDuringStartup(stopOnInformerErrorDuringStartup); + co.withCacheSyncTimeout(Duration.ofMillis(3000)); + co.withReconciliationTerminationTimeout(Duration.ofSeconds(1)); + if (addStopHandler) { + co.withInformerStoppedHandler((informer, ex) -> replacementStopHandlerCalled = true); + } + }); operator.register(reconciler, o -> { if (namespaces.length > 0) { o.settingNamespaces(namespaces); @@ -348,24 +357,22 @@ private void setFullResourcesAccess() { } private void addRoleBindingsToTestNamespaces() { - var role = ReconcilerUtils - .loadYaml(Role.class, this.getClass(), "rback-test-only-main-ns-access.yaml"); + var role = ReconcilerUtils.loadYaml( + Role.class, this.getClass(), "rback-test-only-main-ns-access.yaml"); adminClient.resource(role).inNamespace(actualNamespace).createOrReplace(); - var roleBinding = ReconcilerUtils - .loadYaml(RoleBinding.class, this.getClass(), - "rback-test-only-main-ns-access-binding.yaml"); + var roleBinding = ReconcilerUtils.loadYaml( + RoleBinding.class, this.getClass(), "rback-test-only-main-ns-access-binding.yaml"); adminClient.resource(roleBinding).inNamespace(actualNamespace).createOrReplace(); } private void applyClusterRoleBinding() { - var clusterRoleBinding = ReconcilerUtils - .loadYaml(ClusterRoleBinding.class, this.getClass(), "rback-test-role-binding.yaml"); + var clusterRoleBinding = ReconcilerUtils.loadYaml( + ClusterRoleBinding.class, this.getClass(), "rback-test-role-binding.yaml"); adminClient.resource(clusterRoleBinding).createOrReplace(); } private void applyClusterRole(String filename) { - var clusterRole = ReconcilerUtils - .loadYaml(ClusterRole.class, this.getClass(), filename); + var clusterRole = ReconcilerUtils.loadYaml(ClusterRole.class, this.getClass(), filename); adminClient.resource(clusterRole).createOrReplace(); } @@ -375,15 +382,13 @@ private Namespace namespace() { private Namespace namespace(String name) { Namespace n = new Namespace(); - n.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + n.setMetadata(new ObjectMetaBuilder().withName(name).build()); return n; } private void removeClusterRoleBinding() { - var clusterRoleBinding = ReconcilerUtils - .loadYaml(ClusterRoleBinding.class, this.getClass(), "rback-test-role-binding.yaml"); + var clusterRoleBinding = ReconcilerUtils.loadYaml( + ClusterRoleBinding.class, this.getClass(), "rback-test-role-binding.yaml"); adminClient.resource(clusterRoleBinding).delete(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestCustomResource.java index 9269dc5d6e..8f4c603d81 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("rbt") -public class InformerRelatedBehaviorTestCustomResource - extends CustomResource - implements Namespaced { -} +public class InformerRelatedBehaviorTestCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestReconciler.java index 2fb7724f49..61c07fb88d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/informerrelatedbehavior/InformerRelatedBehaviorTestReconciler.java @@ -10,9 +10,11 @@ import io.javaoperatorsdk.operator.processing.event.ResourceID; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = @Dependent( - name = InformerRelatedBehaviorTestReconciler.CONFIG_MAP_DEPENDENT_RESOURCE, - type = ConfigMapDependentResource.class)) +@Workflow( + dependents = + @Dependent( + name = InformerRelatedBehaviorTestReconciler.CONFIG_MAP_DEPENDENT_RESOURCE, + type = ConfigMapDependentResource.class)) @ControllerConfiguration( name = InformerRelatedBehaviorTestReconciler.INFORMER_RELATED_BEHAVIOR_TEST_RECONCILER) public class InformerRelatedBehaviorTestReconciler @@ -39,5 +41,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestCustomResource.java index 33f9899689..dbe944c6fa 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestCustomResource.java @@ -10,7 +10,5 @@ @Version("v1") @ShortNames("dgc") public class DependentGarbageCollectionTestCustomResource - extends - CustomResource - implements Namespaced { -} + extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java index e786c1c2c1..85ca0eb748 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/DependentGarbageCollectionTestReconciler.java @@ -50,7 +50,8 @@ public UpdateControl reconcile( @Override public ErrorStatusUpdateControl updateErrorStatus( DependentGarbageCollectionTestCustomResource resource, - Context context, Exception e) { + Context context, + Exception e) { // this can happen when a namespace is terminated in test if (e instanceof KubernetesClientException) { return ErrorStatusUpdateControl.noStatusUpdate(); @@ -63,18 +64,19 @@ public boolean isErrorOccurred() { return errorOccurred; } - private static class ConfigMapDependentResource extends - KubernetesDependentResource + private static class ConfigMapDependentResource + extends KubernetesDependentResource implements Creator, - Updater, - GarbageCollected { + Updater, + GarbageCollected { public ConfigMapDependentResource() { super(ConfigMap.class); } @Override - protected ConfigMap desired(DependentGarbageCollectionTestCustomResource primary, + protected ConfigMap desired( + DependentGarbageCollectionTestCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/KubernetesDependentGarbageCollectionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/KubernetesDependentGarbageCollectionIT.java index afc89471a6..4a55798b5c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/KubernetesDependentGarbageCollectionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/kubernetesdependentgarbagecollection/KubernetesDependentGarbageCollectionIT.java @@ -16,18 +16,16 @@ class KubernetesDependentGarbageCollectionIT { public static final String TEST_RESOURCE_NAME = "test1"; - @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new DependentGarbageCollectionTestReconciler()) - .build(); + @RegisterExtension + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new DependentGarbageCollectionTestReconciler()) + .build(); @Test void resourceSecondaryResourceIsGarbageCollected() { var resource = customResource(); - var createdResources = - operator.create(resource); + var createdResources = operator.create(resource); await().untilAsserted(() -> { ConfigMap configMap = operator.get(ConfigMap.class, TEST_RESOURCE_NAME); @@ -41,7 +39,8 @@ void resourceSecondaryResourceIsGarbageCollected() { operator.delete(createdResources); - await().atMost(Duration.ofSeconds(IntegrationTestConstants.GARBAGE_COLLECTION_TIMEOUT_SECONDS)) + await() + .atMost(Duration.ofSeconds(IntegrationTestConstants.GARBAGE_COLLECTION_TIMEOUT_SECONDS)) .untilAsserted(() -> { ConfigMap cm = operator.get(ConfigMap.class, TEST_RESOURCE_NAME); assertThat(cm).isNull(); @@ -51,8 +50,7 @@ void resourceSecondaryResourceIsGarbageCollected() { @Test void deletesSecondaryResource() { var resource = customResource(); - var createdResources = - operator.create(resource); + var createdResources = operator.create(resource); await().untilAsserted(() -> { ConfigMap configMap = operator.get(ConfigMap.class, TEST_RESOURCE_NAME); @@ -71,12 +69,9 @@ void deletesSecondaryResource() { DependentGarbageCollectionTestCustomResource customResource() { DependentGarbageCollectionTestCustomResource resource = new DependentGarbageCollectionTestCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); resource.setSpec(new DependentGarbageCollectionTestCustomResourceSpec()); resource.getSpec().setCreateConfigMap(true); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceConfigMap.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceConfigMap.java index d0bc50ddd8..7f895370f5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceConfigMap.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceConfigMap.java @@ -19,7 +19,8 @@ public MultipleDependentResourceConfigMap(String value) { } @Override - protected ConfigMap desired(MultipleDependentResourceCustomResource primary, + protected ConfigMap desired( + MultipleDependentResourceCustomResource primary, Context context) { return new ConfigMapBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceCustomResource.java index 7b8fb15466..b9b052e2b8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceCustomResource.java @@ -10,6 +10,4 @@ @Version("v1") @ShortNames("mdr") public class MultipleDependentResourceCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceIT.java index f8b9259b6a..8f863daed9 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceIT.java @@ -22,10 +22,9 @@ public class MultipleDependentResourceIT { public static final String INITIAL_VALUE = "initial value"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new MultipleDependentResourceReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new MultipleDependentResourceReconciler()) + .build(); @Test void handlesCRUDOperations() { @@ -65,9 +64,7 @@ void handlesCRUDOperations() { MultipleDependentResourceCustomResource testResource() { var res = new MultipleDependentResourceCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName("test1") - .build()); + res.setMetadata(new ObjectMetaBuilder().withName("test1").build()); res.setSpec(new MultipleDependentResourceSpec()); res.getSpec().setValue(INITIAL_VALUE); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceReconciler.java index aeac786cda..f4088f36f1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresource/MultipleDependentResourceReconciler.java @@ -36,9 +36,11 @@ public UpdateControl reconcile( public List> prepareEventSources( EventSourceContext context) { InformerEventSource eventSource = - new InformerEventSource<>(InformerEventSourceConfiguration - .from(ConfigMap.class, MultipleDependentResourceCustomResource.class) - .build(), context); + new InformerEventSource<>( + InformerEventSourceConfiguration.from( + ConfigMap.class, MultipleDependentResourceCustomResource.class) + .build(), + context); firstDependentResourceConfigMap.setEventSource(eventSource); secondDependentResourceConfigMap.setEventSource(eventSource); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceConfigMap.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceConfigMap.java index defef91b75..2708e19657 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceConfigMap.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceConfigMap.java @@ -9,8 +9,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; public class MultipleDependentResourceConfigMap - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + ConfigMap, MultipleDependentResourceCustomResourceNoDiscriminator> { public static final String DATA_KEY = "key"; private final int value; @@ -21,7 +21,8 @@ public MultipleDependentResourceConfigMap(int value) { } @Override - protected ConfigMap desired(MultipleDependentResourceCustomResourceNoDiscriminator primary, + protected ConfigMap desired( + MultipleDependentResourceCustomResourceNoDiscriminator primary, Context context) { Map data = new HashMap<>(); data.put(DATA_KEY, String.valueOf(value)); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceCustomResourceNoDiscriminator.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceCustomResourceNoDiscriminator.java index bd91aae234..b8af874b23 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceCustomResourceNoDiscriminator.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceCustomResourceNoDiscriminator.java @@ -10,8 +10,7 @@ @Version("v1") @ShortNames("mdwd") public class MultipleDependentResourceCustomResourceNoDiscriminator - extends CustomResource - implements Namespaced { + extends CustomResource implements Namespaced { public String getConfigMapName(int id) { return "configmap" + id; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithDiscriminatorReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithDiscriminatorReconciler.java index c96033d9bc..630a3f3d44 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithDiscriminatorReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithDiscriminatorReconciler.java @@ -13,7 +13,7 @@ @ControllerConfiguration public class MultipleDependentResourceWithDiscriminatorReconciler implements Reconciler, - TestExecutionInfoProvider { + TestExecutionInfoProvider { public static final int FIRST_CONFIG_MAP_ID = 1; public static final int SECOND_CONFIG_MAP_ID = 2; @@ -37,18 +37,20 @@ public UpdateControl rec return UpdateControl.noUpdate(); } - public int getNumberOfExecutions() { return numberOfExecutions.get(); } @Override - public List> prepareEventSources( - EventSourceContext context) { - InformerEventSource eventSource = - new InformerEventSource<>(InformerEventSourceConfiguration.from(ConfigMap.class, - MultipleDependentResourceCustomResourceNoDiscriminator.class) - .build(), context); + public List> + prepareEventSources( + EventSourceContext context) { + InformerEventSource + eventSource = new InformerEventSource<>( + InformerEventSourceConfiguration.from( + ConfigMap.class, MultipleDependentResourceCustomResourceNoDiscriminator.class) + .build(), + context); firstDependentResourceConfigMap.setEventSource(eventSource); secondDependentResourceConfigMap.setEventSource(eventSource); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithNoDiscriminatorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithNoDiscriminatorIT.java index b653a8b606..3cd95388f8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithNoDiscriminatorIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentresourcewithsametype/MultipleDependentResourceWithNoDiscriminatorIT.java @@ -16,12 +16,12 @@ class MultipleDependentResourceWithNoDiscriminatorIT { public static final String TEST_RESOURCE_NAME = "multipledependentresource-testresource"; + @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(MultipleDependentResourceWithDiscriminatorReconciler.class) - .waitForNamespaceDeletion(true) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(MultipleDependentResourceWithDiscriminatorReconciler.class) + .waitForNamespaceDeletion(true) + .build(); @Test void twoConfigMapsHaveBeenCreated() { @@ -32,11 +32,11 @@ void twoConfigMapsHaveBeenCreated() { var reconciler = operator.getReconcilerOfType(MultipleDependentResourceWithDiscriminatorReconciler.class); - await().pollDelay(Duration.ofMillis(300)) - .until(() -> reconciler.getNumberOfExecutions() <= 1); + await().pollDelay(Duration.ofMillis(300)).until(() -> reconciler.getNumberOfExecutions() <= 1); - IntStream.of(MultipleDependentResourceWithDiscriminatorReconciler.FIRST_CONFIG_MAP_ID, - MultipleDependentResourceWithDiscriminatorReconciler.SECOND_CONFIG_MAP_ID) + IntStream.of( + MultipleDependentResourceWithDiscriminatorReconciler.FIRST_CONFIG_MAP_ID, + MultipleDependentResourceWithDiscriminatorReconciler.SECOND_CONFIG_MAP_ID) .forEach(configMapId -> { ConfigMap configMap = operator.get(ConfigMap.class, customResource.getConfigMapName(configMapId)); @@ -51,12 +51,10 @@ void twoConfigMapsHaveBeenCreated() { public MultipleDependentResourceCustomResourceNoDiscriminator createTestCustomResource() { MultipleDependentResourceCustomResourceNoDiscriminator resource = new MultipleDependentResourceCustomResourceNoDiscriminator(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .withNamespace(operator.getNamespace()) - .build()); + resource.setMetadata(new ObjectMetaBuilder() + .withName(TEST_RESOURCE_NAME) + .withNamespace(operator.getNamespace()) + .build()); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleDependentSameTypeMultiInformerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleDependentSameTypeMultiInformerIT.java index 6f244f554c..d26722d629 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleDependentSameTypeMultiInformerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleDependentSameTypeMultiInformerIT.java @@ -22,10 +22,9 @@ class MultipleDependentSameTypeMultiInformerIT { public static final int SECONDS = 30; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new MultipleManagedDependentResourceMultiInformerReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new MultipleManagedDependentResourceMultiInformerReconciler()) + .build(); @Test void handlesCrudOperations() { @@ -41,11 +40,15 @@ void handlesCrudOperations() { assertConfigMapsDeleted(); } - private void assertConfigMapsPresent(String expectedData) { await().untilAsserted(() -> { - var maps = operator.getKubernetesClient().configMaps() - .inNamespace(operator.getNamespace()).list().getItems().stream() + var maps = operator + .getKubernetesClient() + .configMaps() + .inNamespace(operator.getNamespace()) + .list() + .getItems() + .stream() .filter(cm -> cm.getMetadata().getName().startsWith(TEST_RESOURCE_NAME)) .collect(Collectors.toList()); assertThat(maps).hasSize(2); @@ -55,8 +58,13 @@ private void assertConfigMapsPresent(String expectedData) { private void assertConfigMapsDeleted() { await().atMost(Duration.ofSeconds(GARBAGE_COLLECTION_TIMEOUT_SECONDS)).untilAsserted(() -> { - var maps = operator.getKubernetesClient().configMaps() - .inNamespace(operator.getNamespace()).list().getItems().stream() + var maps = operator + .getKubernetesClient() + .configMaps() + .inNamespace(operator.getNamespace()) + .list() + .getItems() + .stream() .filter(cm -> cm.getMetadata().getName().startsWith(TEST_RESOURCE_NAME)) .collect(Collectors.toList()); assertThat(maps).hasSize(0); @@ -65,9 +73,7 @@ private void assertConfigMapsDeleted() { private MultipleManagedDependentResourceMultiInformerCustomResource testResource() { var res = new MultipleManagedDependentResourceMultiInformerCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new MultipleManagedDependentResourceMultiInformerSpec()); res.getSpec().setValue(DEFAULT_SPEC_VALUE); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java index 47c65f1a95..9b6e1c5560 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap1.java @@ -12,8 +12,8 @@ @KubernetesDependent public class MultipleManagedDependentResourceMultiInformerConfigMap1 - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + ConfigMap, MultipleManagedDependentResourceMultiInformerCustomResource> { public static final String NAME_SUFFIX = "-1"; @@ -22,10 +22,12 @@ public MultipleManagedDependentResourceMultiInformerConfigMap1() { } @Override - protected ConfigMap desired(MultipleManagedDependentResourceMultiInformerCustomResource primary, + protected ConfigMap desired( + MultipleManagedDependentResourceMultiInformerCustomResource primary, Context context) { Map data = new HashMap<>(); - data.put(MultipleManagedDependentResourceReconciler.DATA_KEY, primary.getSpec().getValue()); + data.put( + MultipleManagedDependentResourceReconciler.DATA_KEY, primary.getSpec().getValue()); return new ConfigMapBuilder() .withNewMetadata() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java index 320768de24..dbc0934ada 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerConfigMap2.java @@ -13,8 +13,8 @@ @KubernetesDependent public class MultipleManagedDependentResourceMultiInformerConfigMap2 - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + ConfigMap, MultipleManagedDependentResourceMultiInformerCustomResource> { public static final String NAME_SUFFIX = "-2"; @@ -23,7 +23,8 @@ public MultipleManagedDependentResourceMultiInformerConfigMap2() { } @Override - protected ConfigMap desired(MultipleManagedDependentResourceMultiInformerCustomResource primary, + protected ConfigMap desired( + MultipleManagedDependentResourceMultiInformerCustomResource primary, Context context) { Map data = new HashMap<>(); data.put(DATA_KEY, primary.getSpec().getValue()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerCustomResource.java index 060a8f6b62..ad15168294 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerCustomResource.java @@ -11,6 +11,4 @@ @ShortNames("mmi") public class MultipleManagedDependentResourceMultiInformerCustomResource extends CustomResource - implements Namespaced { - -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerReconciler.java index f0fe034c97..59c53b8594 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledependentsametypemultiinformer/MultipleManagedDependentResourceMultiInformerReconciler.java @@ -6,16 +6,19 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = { - @Dependent(name = MultipleManagedDependentResourceMultiInformerReconciler.CONFIG_MAP_1_DR, - type = MultipleManagedDependentResourceMultiInformerConfigMap1.class), - @Dependent(name = MultipleManagedDependentResourceMultiInformerReconciler.CONFIG_MAP_2_DR, - type = MultipleManagedDependentResourceMultiInformerConfigMap2.class) -}) +@Workflow( + dependents = { + @Dependent( + name = MultipleManagedDependentResourceMultiInformerReconciler.CONFIG_MAP_1_DR, + type = MultipleManagedDependentResourceMultiInformerConfigMap1.class), + @Dependent( + name = MultipleManagedDependentResourceMultiInformerReconciler.CONFIG_MAP_2_DR, + type = MultipleManagedDependentResourceMultiInformerConfigMap2.class) + }) @ControllerConfiguration public class MultipleManagedDependentResourceMultiInformerReconciler implements Reconciler, - TestExecutionInfoProvider { + TestExecutionInfoProvider { public static final String DATA_KEY = "key"; public static final String CONFIG_MAP_1_DR = "ConfigMap1"; @@ -34,7 +37,6 @@ public UpdateControl { + extends CRUDKubernetesDependentResource< + ConfigMap, MultipleManagedDependentNoDiscriminatorCustomResource> { public static final String NAME_SUFFIX = "-1"; @@ -30,15 +30,17 @@ public MultipleManagedDependentNoDiscriminatorConfigMap1() { protected ResourceID targetSecondaryResourceID( MultipleManagedDependentNoDiscriminatorCustomResource primary, Context context) { - return new ResourceID(primary.getMetadata().getName() + NAME_SUFFIX, - primary.getMetadata().getNamespace()); + return new ResourceID( + primary.getMetadata().getName() + NAME_SUFFIX, primary.getMetadata().getNamespace()); } @Override - protected ConfigMap desired(MultipleManagedDependentNoDiscriminatorCustomResource primary, + protected ConfigMap desired( + MultipleManagedDependentNoDiscriminatorCustomResource primary, Context context) { Map data = new HashMap<>(); - data.put(MultipleManagedDependentSameTypeNoDiscriminatorReconciler.DATA_KEY, + data.put( + MultipleManagedDependentSameTypeNoDiscriminatorReconciler.DATA_KEY, primary.getSpec().getValue()); return new ConfigMapBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorConfigMap2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorConfigMap2.java index 373a70bcda..8836badb1f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorConfigMap2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorConfigMap2.java @@ -13,8 +13,8 @@ @KubernetesDependent public class MultipleManagedDependentNoDiscriminatorConfigMap2 - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + ConfigMap, MultipleManagedDependentNoDiscriminatorCustomResource> { public static final String NAME_SUFFIX = "-2"; @@ -23,7 +23,8 @@ public MultipleManagedDependentNoDiscriminatorConfigMap2() { } @Override - protected ConfigMap desired(MultipleManagedDependentNoDiscriminatorCustomResource primary, + protected ConfigMap desired( + MultipleManagedDependentNoDiscriminatorCustomResource primary, Context context) { Map data = new HashMap<>(); data.put(DATA_KEY, primary.getSpec().getValue()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorCustomResource.java index 7681cf7792..5af2ffec44 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorCustomResource.java @@ -11,6 +11,4 @@ @ShortNames("mnd") public class MultipleManagedDependentNoDiscriminatorCustomResource extends CustomResource - implements Namespaced { - -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorIT.java index cc6b79066a..23279cf5d6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentNoDiscriminatorIT.java @@ -20,19 +20,20 @@ public class MultipleManagedDependentNoDiscriminatorIT { public static final String CHANGED_VALUE = "changed_value"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new MultipleManagedDependentSameTypeNoDiscriminatorReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new MultipleManagedDependentSameTypeNoDiscriminatorReconciler()) + .build(); @Test void handlesCRUDOperations() { var res = extension.create(testResource()); await().untilAsserted(() -> { - var cm1 = extension.get(ConfigMap.class, + var cm1 = extension.get( + ConfigMap.class, RESOURCE_NAME + MultipleManagedDependentNoDiscriminatorConfigMap1.NAME_SUFFIX); - var cm2 = extension.get(ConfigMap.class, + var cm2 = extension.get( + ConfigMap.class, RESOURCE_NAME + MultipleManagedDependentNoDiscriminatorConfigMap2.NAME_SUFFIX); assertThat(cm1).isNotNull(); @@ -45,9 +46,11 @@ void handlesCRUDOperations() { res = extension.replace(res); await().untilAsserted(() -> { - var cm1 = extension.get(ConfigMap.class, + var cm1 = extension.get( + ConfigMap.class, RESOURCE_NAME + MultipleManagedDependentNoDiscriminatorConfigMap1.NAME_SUFFIX); - var cm2 = extension.get(ConfigMap.class, + var cm2 = extension.get( + ConfigMap.class, RESOURCE_NAME + MultipleManagedDependentNoDiscriminatorConfigMap2.NAME_SUFFIX); assertThat(cm1.getData()).containsEntry(DATA_KEY, CHANGED_VALUE); @@ -57,9 +60,11 @@ void handlesCRUDOperations() { extension.delete(res); await().timeout(Duration.ofSeconds(60)).untilAsserted(() -> { - var cm1 = extension.get(ConfigMap.class, + var cm1 = extension.get( + ConfigMap.class, RESOURCE_NAME + MultipleManagedDependentNoDiscriminatorConfigMap1.NAME_SUFFIX); - var cm2 = extension.get(ConfigMap.class, + var cm2 = extension.get( + ConfigMap.class, RESOURCE_NAME + MultipleManagedDependentNoDiscriminatorConfigMap2.NAME_SUFFIX); assertThat(cm1).isNull(); @@ -69,12 +74,9 @@ void handlesCRUDOperations() { MultipleManagedDependentNoDiscriminatorCustomResource testResource() { var res = new MultipleManagedDependentNoDiscriminatorCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); res.setSpec(new MultipleManagedDependentNoDiscriminatorSpec()); res.getSpec().setValue(INITIAL_VALUE); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentSameTypeNoDiscriminatorReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentSameTypeNoDiscriminatorReconciler.java index 09c0b5cc23..488ab8a771 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentSameTypeNoDiscriminatorReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipledrsametypenodiscriminator/MultipleManagedDependentSameTypeNoDiscriminatorReconciler.java @@ -13,16 +13,19 @@ import static io.javaoperatorsdk.operator.dependent.multiplemanageddependentsametype.MultipleManagedDependentResourceReconciler.CONFIG_MAP_EVENT_SOURCE; -@Workflow(dependents = { - @Dependent(type = MultipleManagedDependentNoDiscriminatorConfigMap1.class, - useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE), - @Dependent(type = MultipleManagedDependentNoDiscriminatorConfigMap2.class, - useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE) -}) +@Workflow( + dependents = { + @Dependent( + type = MultipleManagedDependentNoDiscriminatorConfigMap1.class, + useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE), + @Dependent( + type = MultipleManagedDependentNoDiscriminatorConfigMap2.class, + useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE) + }) @ControllerConfiguration public class MultipleManagedDependentSameTypeNoDiscriminatorReconciler implements Reconciler, - TestExecutionInfoProvider { + TestExecutionInfoProvider { public static final String CONFIG_MAP_EVENT_SOURCE = "ConfigMapEventSource"; public static final String DATA_KEY = "key"; @@ -40,18 +43,18 @@ public UpdateControl reco return UpdateControl.noUpdate(); } - public int getNumberOfExecutions() { return numberOfExecutions.get(); } @Override - public List> prepareEventSources( - EventSourceContext context) { + public List> + prepareEventSources( + EventSourceContext context) { InformerEventSource ies = new InformerEventSource<>( - InformerEventSourceConfiguration.from(ConfigMap.class, - MultipleManagedDependentNoDiscriminatorCustomResource.class) + InformerEventSourceConfiguration.from( + ConfigMap.class, MultipleManagedDependentNoDiscriminatorCustomResource.class) .withName(CONFIG_MAP_EVENT_SOURCE) .build(), context); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java index 4d69ef25e3..895ddd7486 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap1.java @@ -11,8 +11,8 @@ @KubernetesDependent public class MultipleManagedDependentResourceConfigMap1 - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + ConfigMap, MultipleManagedDependentResourceCustomResource> { public static final String NAME_SUFFIX = "-1"; @@ -21,10 +21,12 @@ public MultipleManagedDependentResourceConfigMap1() { } @Override - protected ConfigMap desired(MultipleManagedDependentResourceCustomResource primary, + protected ConfigMap desired( + MultipleManagedDependentResourceCustomResource primary, Context context) { Map data = new HashMap<>(); - data.put(MultipleManagedDependentResourceReconciler.DATA_KEY, primary.getSpec().getValue()); + data.put( + MultipleManagedDependentResourceReconciler.DATA_KEY, primary.getSpec().getValue()); return new ConfigMapBuilder() .withNewMetadata() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java index 11231470e7..656046245d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceConfigMap2.java @@ -11,8 +11,8 @@ @KubernetesDependent public class MultipleManagedDependentResourceConfigMap2 - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + ConfigMap, MultipleManagedDependentResourceCustomResource> { public static final String NAME_SUFFIX = "-2"; @@ -21,10 +21,12 @@ public MultipleManagedDependentResourceConfigMap2() { } @Override - protected ConfigMap desired(MultipleManagedDependentResourceCustomResource primary, + protected ConfigMap desired( + MultipleManagedDependentResourceCustomResource primary, Context context) { Map data = new HashMap<>(); - data.put(MultipleManagedDependentResourceReconciler.DATA_KEY, primary.getSpec().getValue()); + data.put( + MultipleManagedDependentResourceReconciler.DATA_KEY, primary.getSpec().getValue()); return new ConfigMapBuilder() .withNewMetadata() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceCustomResource.java index 2c131978b6..9daf1af59d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceCustomResource.java @@ -10,7 +10,4 @@ @Version("v1") @ShortNames("mmd") public class MultipleManagedDependentResourceCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java index f25587b2ee..b2b90825b6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentResourceReconciler.java @@ -13,16 +13,19 @@ import static io.javaoperatorsdk.operator.dependent.multiplemanageddependentsametype.MultipleManagedDependentResourceReconciler.CONFIG_MAP_EVENT_SOURCE; -@Workflow(dependents = { - @Dependent(type = MultipleManagedDependentResourceConfigMap1.class, - useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE), - @Dependent(type = MultipleManagedDependentResourceConfigMap2.class, - useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE) -}) +@Workflow( + dependents = { + @Dependent( + type = MultipleManagedDependentResourceConfigMap1.class, + useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE), + @Dependent( + type = MultipleManagedDependentResourceConfigMap2.class, + useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE) + }) @ControllerConfiguration public class MultipleManagedDependentResourceReconciler implements Reconciler, - TestExecutionInfoProvider { + TestExecutionInfoProvider { public static final String CONFIG_MAP_EVENT_SOURCE = "ConfigMapEventSource"; public static final String DATA_KEY = "key"; @@ -40,7 +43,6 @@ public UpdateControl reconcile( return UpdateControl.noUpdate(); } - public int getNumberOfExecutions() { return numberOfExecutions.get(); } @@ -50,8 +52,8 @@ public List> prep EventSourceContext context) { InformerEventSource ies = new InformerEventSource<>( - InformerEventSourceConfiguration - .from(ConfigMap.class, MultipleManagedDependentResourceCustomResource.class) + InformerEventSourceConfiguration.from( + ConfigMap.class, MultipleManagedDependentResourceCustomResource.class) .withName(CONFIG_MAP_EVENT_SOURCE) .build(), context); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentSameTypeIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentSameTypeIT.java index ed568e75e1..08de5a4ec3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentSameTypeIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanageddependentsametype/MultipleManagedDependentSameTypeIT.java @@ -22,11 +22,9 @@ class MultipleManagedDependentSameTypeIT { public static final int SECONDS = 30; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new MultipleManagedDependentResourceReconciler()) - .build(); - + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new MultipleManagedDependentResourceReconciler()) + .build(); @Test void handlesCrudOperations() { @@ -44,8 +42,13 @@ void handlesCrudOperations() { private void assertConfigMapsPresent(String expectedData) { await().untilAsserted(() -> { - var maps = operator.getKubernetesClient().configMaps() - .inNamespace(operator.getNamespace()).list().getItems().stream() + var maps = operator + .getKubernetesClient() + .configMaps() + .inNamespace(operator.getNamespace()) + .list() + .getItems() + .stream() .filter(cm -> cm.getMetadata().getName().startsWith(TEST_RESOURCE_NAME)) .collect(Collectors.toList()); assertThat(maps).hasSize(2); @@ -55,8 +58,13 @@ private void assertConfigMapsPresent(String expectedData) { private void assertConfigMapsDeleted() { await().atMost(Duration.ofSeconds(GARBAGE_COLLECTION_TIMEOUT_SECONDS)).untilAsserted(() -> { - var maps = operator.getKubernetesClient().configMaps() - .inNamespace(operator.getNamespace()).list().getItems().stream() + var maps = operator + .getKubernetesClient() + .configMaps() + .inNamespace(operator.getNamespace()) + .list() + .getItems() + .stream() .filter(cm -> cm.getMetadata().getName().startsWith(TEST_RESOURCE_NAME)) .collect(Collectors.toList()); assertThat(maps).hasSize(0); @@ -65,13 +73,10 @@ private void assertConfigMapsDeleted() { private MultipleManagedDependentResourceCustomResource testResource() { var res = new MultipleManagedDependentResourceCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new MultipleManagedDependentResourceSpec()); res.getSpec().setValue(DEFAULT_SPEC_VALUE); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/AbstractExternalDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/AbstractExternalDependentResource.java index 9cc3830be8..710297ae68 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/AbstractExternalDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/AbstractExternalDependentResource.java @@ -13,11 +13,12 @@ import io.javaoperatorsdk.operator.support.ExternalResource; import io.javaoperatorsdk.operator.support.ExternalServiceMock; -public abstract class AbstractExternalDependentResource extends - PollingDependentResource +public abstract class AbstractExternalDependentResource + extends PollingDependentResource< + ExternalResource, MultipleManagedExternalDependentResourceCustomResource> implements Creator, - Updater, - Deleter { + Updater, + Deleter { protected ExternalServiceMock externalServiceMock = ExternalServiceMock.getInstance(); @@ -31,14 +32,16 @@ public Map> fetchResources() { } @Override - public ExternalResource create(ExternalResource desired, + public ExternalResource create( + ExternalResource desired, MultipleManagedExternalDependentResourceCustomResource primary, Context context) { return externalServiceMock.create(desired); } @Override - public ExternalResource update(ExternalResource actual, + public ExternalResource update( + ExternalResource actual, ExternalResource desired, MultipleManagedExternalDependentResourceCustomResource primary, Context context) { @@ -46,7 +49,8 @@ public ExternalResource update(ExternalResource actual, } @Override - public Matcher.Result match(ExternalResource actualResource, + public Matcher.Result match( + ExternalResource actualResource, MultipleManagedExternalDependentResourceCustomResource primary, Context context) { var desired = desired(primary, context); @@ -54,15 +58,16 @@ public Matcher.Result match(ExternalResource actualResource, } @Override - public void delete(MultipleManagedExternalDependentResourceCustomResource primary, + public void delete( + MultipleManagedExternalDependentResourceCustomResource primary, Context context) { externalServiceMock.delete(toExternalResourceID(primary)); } - protected ExternalResource desired(MultipleManagedExternalDependentResourceCustomResource primary, + protected ExternalResource desired( + MultipleManagedExternalDependentResourceCustomResource primary, Context context) { - return new ExternalResource(toExternalResourceID(primary), - primary.getSpec().getValue()); + return new ExternalResource(toExternalResourceID(primary), primary.getSpec().getValue()); } protected String toExternalResourceID( @@ -71,5 +76,4 @@ protected String toExternalResourceID( } protected abstract String resourceIDSuffix(); - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceCustomResource.java index df443880c9..a3b1693ab2 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceCustomResource.java @@ -11,7 +11,4 @@ @Version("v1") @ShortNames("mme") public class MultipleManagedExternalDependentResourceCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java index cd17f1706b..59515dd0c5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentResourceReconciler.java @@ -25,16 +25,19 @@ import static io.javaoperatorsdk.operator.dependent.multiplemanagedexternaldependenttype.MultipleManagedExternalDependentResourceReconciler.EVENT_SOURCE_NAME; -@Workflow(dependents = { - @Dependent(type = ExternalDependentResource1.class, - useEventSourceWithName = EVENT_SOURCE_NAME), - @Dependent(type = ExternalDependentResource2.class, - useEventSourceWithName = EVENT_SOURCE_NAME) -}) +@Workflow( + dependents = { + @Dependent( + type = ExternalDependentResource1.class, + useEventSourceWithName = EVENT_SOURCE_NAME), + @Dependent( + type = ExternalDependentResource2.class, + useEventSourceWithName = EVENT_SOURCE_NAME) + }) @ControllerConfiguration() public class MultipleManagedExternalDependentResourceReconciler implements Reconciler, - TestExecutionInfoProvider { + TestExecutionInfoProvider { public static final String EVENT_SOURCE_NAME = "ConfigMapEventSource"; protected ExternalServiceMock externalServiceMock = ExternalServiceMock.getInstance(); @@ -56,8 +59,9 @@ public int getNumberOfExecutions() { } @Override - public List> prepareEventSources( - EventSourceContext context) { + public List> + prepareEventSources( + EventSourceContext context) { final PollingEventSource.GenericResourceFetcher fetcher = () -> { var lists = externalServiceMock.listResources(); @@ -70,8 +74,9 @@ public List pollingEventSource = - new PollingEventSource<>(ExternalResource.class, + PollingEventSource + pollingEventSource = new PollingEventSource<>( + ExternalResource.class, new PollingConfigurationBuilder<>(fetcher, Duration.ofMillis(1000L)) .withName(EVENT_SOURCE_NAME) .withCacheKeyMapper(ExternalResource::getId) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentSameTypeIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentSameTypeIT.java index 024060202b..ade71cf57f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentSameTypeIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multiplemanagedexternaldependenttype/MultipleManagedExternalDependentSameTypeIT.java @@ -14,10 +14,9 @@ class MultipleManagedExternalDependentSameTypeIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new MultipleManagedExternalDependentResourceReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new MultipleManagedExternalDependentResourceReconciler()) + .build(); public static final String TEST_RESOURCE_NAME = "test1"; public static final String DEFAULT_SPEC_VALUE = "val"; @@ -56,13 +55,10 @@ private void assertResourceCreatedWithData(String expectedData) { private MultipleManagedExternalDependentResourceCustomResource testResource() { var res = new MultipleManagedExternalDependentResourceCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new MultipleManagedDependentResourceSpec()); res.getSpec().setValue(DEFAULT_SPEC_VALUE); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java index d9c62d9a29..dadb7996f1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultiOwnerDependentTriggeringIT.java @@ -20,12 +20,10 @@ class MultiOwnerDependentTriggeringIT { public static final String NEW_VALUE_2 = "newValue2"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withConfigurationService(o -> o.withDefaultNonSSAResource(Set.of())) - .withReconciler(MultipleOwnerDependentReconciler.class) - .build(); - + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withConfigurationService(o -> o.withDefaultNonSSAResource(Set.of())) + .withReconciler(MultipleOwnerDependentReconciler.class) + .build(); @Test void multiOwnerTriggeringAndManagement() { @@ -36,9 +34,7 @@ void multiOwnerTriggeringAndManagement() { var cm = extension.get(ConfigMap.class, MultipleOwnerDependentConfigMap.RESOURCE_NAME); assertThat(cm).isNotNull(); - assertThat(cm.getData()) - .containsEntry(VALUE_1, VALUE_1) - .containsEntry(VALUE_2, VALUE_2); + assertThat(cm.getData()).containsEntry(VALUE_1, VALUE_1).containsEntry(VALUE_2, VALUE_2); assertThat(cm.getMetadata().getOwnerReferences()).hasSize(2); }); @@ -66,13 +62,10 @@ void multiOwnerTriggeringAndManagement() { MultipleOwnerDependentCustomResource testResource(String name, String value) { var res = new MultipleOwnerDependentCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(name).build()); res.setSpec(new MultipleOwnerDependentSpec()); res.getSpec().setValue(value); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java index b906796708..781451bba0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentConfigMap.java @@ -15,8 +15,7 @@ @KubernetesDependent(useSSA = BooleanWithUndefined.TRUE) public class MultipleOwnerDependentConfigMap - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource { public static final String RESOURCE_NAME = "test1"; @@ -25,7 +24,8 @@ public MultipleOwnerDependentConfigMap() { } @Override - protected ConfigMap desired(MultipleOwnerDependentCustomResource primary, + protected ConfigMap desired( + MultipleOwnerDependentCustomResource primary, Context context) { var cm = getSecondaryResource(primary, context); @@ -45,11 +45,12 @@ protected ConfigMap desired(MultipleOwnerDependentCustomResource primary, // need to change this since owner reference is present only for the creator primary resource. @Override - public Optional getSecondaryResource(MultipleOwnerDependentCustomResource primary, + public Optional getSecondaryResource( + MultipleOwnerDependentCustomResource primary, Context context) { InformerEventSource ies = - (InformerEventSource) context - .eventSourceRetriever().getEventSourceFor(ConfigMap.class); + (InformerEventSource) + context.eventSourceRetriever().getEventSourceFor(ConfigMap.class); return ies.get(new ResourceID(RESOURCE_NAME, primary.getMetadata().getNamespace())); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentCustomResource.java index d84e1bf5db..5f50d14d8e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentCustomResource.java @@ -10,7 +10,4 @@ @Version("v1") @ShortNames("mod") public class MultipleOwnerDependentCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java index b4c01cb6b9..b0fd098743 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/multipleupdateondependent/MultipleOwnerDependentReconciler.java @@ -6,13 +6,10 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = { - @Dependent(type = MultipleOwnerDependentConfigMap.class) -}) +@Workflow(dependents = {@Dependent(type = MultipleOwnerDependentConfigMap.class)}) @ControllerConfiguration() public class MultipleOwnerDependentReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @@ -27,9 +24,7 @@ public UpdateControl reconcile( return UpdateControl.noUpdate(); } - public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primaryindexer/DependentPrimaryIndexerTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primaryindexer/DependentPrimaryIndexerTestReconciler.java index bb97a32cf9..f16a1e0d7e 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primaryindexer/DependentPrimaryIndexerTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primaryindexer/DependentPrimaryIndexerTestReconciler.java @@ -22,12 +22,14 @@ import static io.javaoperatorsdk.operator.dependent.primaryindexer.DependentPrimaryIndexerTestReconciler.CONFIG_MAP_EVENT_SOURCE; -@Workflow(dependents = @Dependent(useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE, - type = DependentPrimaryIndexerTestReconciler.ReadOnlyConfigMapDependent.class)) +@Workflow( + dependents = + @Dependent( + useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE, + type = DependentPrimaryIndexerTestReconciler.ReadOnlyConfigMapDependent.class)) @ControllerConfiguration public class DependentPrimaryIndexerTestReconciler extends AbstractPrimaryIndexerTestReconciler - implements - Reconciler { + implements Reconciler { public static final String CONFIG_MAP_EVENT_SOURCE = "configMapEventSource"; @@ -38,18 +40,18 @@ public List> prepareEventSource var cache = context.getPrimaryCache(); cache.addIndexer(CONFIG_MAP_RELATION_INDEXER, indexer); - InformerEventSource es = - new InformerEventSource<>( - InformerEventSourceConfiguration - .from(ConfigMap.class, PrimaryIndexerTestCustomResource.class) - .withName(CONFIG_MAP_EVENT_SOURCE) - .withSecondaryToPrimaryMapper(resource -> cache + InformerEventSource es = new InformerEventSource<>( + InformerEventSourceConfiguration.from( + ConfigMap.class, PrimaryIndexerTestCustomResource.class) + .withName(CONFIG_MAP_EVENT_SOURCE) + .withSecondaryToPrimaryMapper(resource -> + cache .byIndex(CONFIG_MAP_RELATION_INDEXER, resource.getMetadata().getName()) .stream() .map(ResourceID::fromResource) .collect(Collectors.toSet())) - .build(), - context); + .build(), + context); return List.of(es); } @@ -62,7 +64,8 @@ public ReadOnlyConfigMapDependent() { } @Override - protected ConfigMap desired(PrimaryIndexerTestCustomResource primary, + protected ConfigMap desired( + PrimaryIndexerTestCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapDependent.java index c9b85acc69..167f724f34 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapDependent.java @@ -6,8 +6,8 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependentResource; -public class ConfigMapDependent extends - KubernetesDependentResource { +public class ConfigMapDependent + extends KubernetesDependentResource { public static final String TEST_CONFIG_MAP_NAME = "testconfigmap"; @@ -16,7 +16,8 @@ public ConfigMapDependent() { } @Override - protected ConfigMap desired(PrimaryToSecondaryDependentCustomResource primary, + protected ConfigMap desired( + PrimaryToSecondaryDependentCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapReconcilePrecondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapReconcilePrecondition.java index ab4ba62edf..74ce40e64c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapReconcilePrecondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/ConfigMapReconcilePrecondition.java @@ -15,10 +15,12 @@ public boolean isMet( DependentResource dependentResource, PrimaryToSecondaryDependentCustomResource primary, Context context) { - return dependentResource.getSecondaryResource(primary, context).map(cm -> { - var data = cm.getData().get(PrimaryToSecondaryDependentReconciler.DATA_KEY); - return data != null && !data.equals(DO_NOT_RECONCILE); - }) + return dependentResource + .getSecondaryResource(primary, context) + .map(cm -> { + var data = cm.getData().get(PrimaryToSecondaryDependentReconciler.DATA_KEY); + return data != null && !data.equals(DO_NOT_RECONCILE); + }) .orElse(false); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentCustomResource.java index 8be9ecf5c6..c4f16b3e57 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentCustomResource.java @@ -10,6 +10,4 @@ @Version("v1") @ShortNames("ptsd") public class PrimaryToSecondaryDependentCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentIT.java index 681c57e0d1..4f7b8a8be6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentIT.java @@ -19,12 +19,9 @@ class PrimaryToSecondaryDependentIT { - public static final String TEST_CR_NAME = "test1"; public static final String TEST_DATA = "testData"; - public - - @RegisterExtension LocallyRunOperatorExtension operator = + public @RegisterExtension LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() .withReconciler(new PrimaryToSecondaryDependentReconciler()) .build(); @@ -54,9 +51,7 @@ void testPrimaryToSecondaryInDependentResources() { PrimaryToSecondaryDependentCustomResource testCustomResource() { var res = new PrimaryToSecondaryDependentCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_CR_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_CR_NAME).build()); res.setSpec(new PrimaryToSecondaryDependentSpec()); res.getSpec().setConfigMapName(TEST_CONFIG_MAP_NAME); return res; @@ -64,11 +59,8 @@ PrimaryToSecondaryDependentCustomResource testCustomResource() { ConfigMap configMap(String data) { var cm = new ConfigMap(); - cm.setMetadata(new ObjectMetaBuilder() - .withName(TEST_CONFIG_MAP_NAME) - .build()); + cm.setMetadata(new ObjectMetaBuilder().withName(TEST_CONFIG_MAP_NAME).build()); cm.setData(Map.of(DATA_KEY, data)); return cm; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java index 76e2015be8..2254fdecc1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/PrimaryToSecondaryDependentReconciler.java @@ -23,11 +23,15 @@ * Note that this is usually just used with read only resources. So it has limited usage, one reason * to use it is to have nice condition on that resource within a workflow. */ -@Workflow(dependents = {@Dependent(type = ConfigMapDependent.class, - name = CONFIG_MAP, - reconcilePrecondition = ConfigMapReconcilePrecondition.class, - useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE), - @Dependent(type = SecretDependent.class, dependsOn = CONFIG_MAP)}) +@Workflow( + dependents = { + @Dependent( + type = ConfigMapDependent.class, + name = CONFIG_MAP, + reconcilePrecondition = ConfigMapReconcilePrecondition.class, + useEventSourceWithName = CONFIG_MAP_EVENT_SOURCE), + @Dependent(type = SecretDependent.class, dependsOn = CONFIG_MAP) + }) @ControllerConfiguration() public class PrimaryToSecondaryDependentReconciler implements Reconciler, TestExecutionInfoProvider { @@ -63,24 +67,34 @@ public List> prepareEv // there is no owner reference in the config map, but we still want to trigger reconciliation if // the config map changes. So first we add an index which custom resource references the config // map. - context.getPrimaryCache().addIndexer(CONFIG_MAP_INDEX, (primary -> List - .of(indexKey(primary.getSpec().getConfigMapName(), primary.getMetadata().getNamespace())))); + context + .getPrimaryCache() + .addIndexer( + CONFIG_MAP_INDEX, + (primary -> List.of(indexKey( + primary.getSpec().getConfigMapName(), primary.getMetadata().getNamespace())))); - var es = new InformerEventSource<>(InformerEventSourceConfiguration - .from(ConfigMap.class, PrimaryToSecondaryDependentCustomResource.class) - .withName(CONFIG_MAP_EVENT_SOURCE) - // if there is a many-to-many relationship (thus no direct owner reference) - // PrimaryToSecondaryMapper needs to be added - .withPrimaryToSecondaryMapper( - (PrimaryToSecondaryMapper) p -> Set - .of(new ResourceID(p.getSpec().getConfigMapName(), p.getMetadata().getNamespace()))) - // the index is used to trigger reconciliation of related custom resources if config map - // changes - .withSecondaryToPrimaryMapper(cm -> context.getPrimaryCache() - .byIndex(CONFIG_MAP_INDEX, indexKey(cm.getMetadata().getName(), - cm.getMetadata().getNamespace())) - .stream().map(ResourceID::fromResource).collect(Collectors.toSet())) - .build(), + var es = new InformerEventSource<>( + InformerEventSourceConfiguration.from( + ConfigMap.class, PrimaryToSecondaryDependentCustomResource.class) + .withName(CONFIG_MAP_EVENT_SOURCE) + // if there is a many-to-many relationship (thus no direct owner reference) + // PrimaryToSecondaryMapper needs to be added + .withPrimaryToSecondaryMapper( + (PrimaryToSecondaryMapper) + p -> Set.of(new ResourceID( + p.getSpec().getConfigMapName(), p.getMetadata().getNamespace()))) + // the index is used to trigger reconciliation of related custom resources if config map + // changes + .withSecondaryToPrimaryMapper(cm -> context + .getPrimaryCache() + .byIndex( + CONFIG_MAP_INDEX, + indexKey(cm.getMetadata().getName(), cm.getMetadata().getNamespace())) + .stream() + .map(ResourceID::fromResource) + .collect(Collectors.toSet())) + .build(), context); return List.of(es); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/SecretDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/SecretDependent.java index aa9470676d..2897da21cb 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/SecretDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/primarytosecondaydependent/SecretDependent.java @@ -18,15 +18,17 @@ public SecretDependent() { } @Override - protected Secret desired(PrimaryToSecondaryDependentCustomResource primary, + protected Secret desired( + PrimaryToSecondaryDependentCustomResource primary, Context context) { Secret secret = new Secret(); secret.setMetadata(new ObjectMetaBuilder() .withName(primary.getMetadata().getName()) .withNamespace(primary.getMetadata().getNamespace()) .build()); - secret.setData(Map.of(DATA_KEY, context.getSecondaryResource(ConfigMap.class) - .orElseThrow().getData().get(DATA_KEY))); + secret.setData(Map.of( + DATA_KEY, + context.getSecondaryResource(ConfigMap.class).orElseThrow().getData().get(DATA_KEY))); return secret; } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/readonly/ConfigMapReader.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/readonly/ConfigMapReader.java index c904a1741e..eac66ecd0f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/readonly/ConfigMapReader.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/readonly/ConfigMapReader.java @@ -7,5 +7,4 @@ @Version("v1") @Group("josdk.io") -public class ConfigMapReader extends CustomResource implements Namespaced { -} +public class ConfigMapReader extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/ConfigMapDependentResource.java index b7e69febd1..ac7966e817 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/ConfigMapDependentResource.java @@ -21,8 +21,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(RestartTestCustomResource primary, - Context context) { + protected ConfigMap desired( + RestartTestCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() .withLabels(Map.of("app", "restart-test")) @@ -31,6 +31,5 @@ protected ConfigMap desired(RestartTestCustomResource primary, .build()) .withData(Map.of(DATA_KEY, primary.getMetadata().getName())) .build(); - } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/OperatorRestartIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/OperatorRestartIT.java index db51c81081..3040862190 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/OperatorRestartIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/OperatorRestartIT.java @@ -11,14 +11,14 @@ class OperatorRestartIT { - private final static Operator operator = new Operator(o -> o.withCloseClientOnStop(false)); - private final static RestartTestReconciler reconciler = new RestartTestReconciler(); + private static final Operator operator = new Operator(o -> o.withCloseClientOnStop(false)); + private static final RestartTestReconciler reconciler = new RestartTestReconciler(); private static int reconcileNumberBeforeStop = 0; @BeforeAll static void registerReconciler() { - LocallyRunOperatorExtension.applyCrd(RestartTestCustomResource.class, - operator.getKubernetesClient()); + LocallyRunOperatorExtension.applyCrd( + RestartTestCustomResource.class, operator.getKubernetesClient()); operator.register(reconciler); } @@ -49,9 +49,7 @@ void reconcile() { RestartTestCustomResource testCustomResource() { RestartTestCustomResource cr = new RestartTestCustomResource(); - cr.setMetadata(new ObjectMetaBuilder() - .withName("test1") - .build()); + cr.setMetadata(new ObjectMetaBuilder().withName("test1").build()); return cr; } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestCustomResource.java index 6f9c08251d..fd5c14360c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestCustomResource.java @@ -9,7 +9,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("rt") -public class RestartTestCustomResource - extends CustomResource - implements Namespaced { -} +public class RestartTestCustomResource extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestReconciler.java index 6f59c29dc8..1eeb8aa144 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/restart/RestartTestReconciler.java @@ -15,8 +15,7 @@ public class RestartTestReconciler @Override public UpdateControl reconcile( - RestartTestCustomResource resource, - Context context) { + RestartTestCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); return UpdateControl.noUpdate(); } @@ -24,5 +23,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceDependentResource.java index a88fa14463..d47c7a0e2b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceDependentResource.java @@ -24,10 +24,11 @@ public ServiceDependentResource() { } @Override - protected Service desired(ServiceStrictMatcherTestCustomResource primary, + protected Service desired( + ServiceStrictMatcherTestCustomResource primary, Context context) { - Service service = loadYaml(Service.class, ServiceStrictMatcherIT.class, - "/io/javaoperatorsdk/operator/service.yaml"); + Service service = loadYaml( + Service.class, ServiceStrictMatcherIT.class, "/io/javaoperatorsdk/operator/service.yaml"); service.getMetadata().setName(primary.getMetadata().getName()); service.getMetadata().setNamespace(primary.getMetadata().getNamespace()); Map labels = new HashMap<>(); @@ -37,10 +38,16 @@ protected Service desired(ServiceStrictMatcherTestCustomResource primary, } @Override - public Matcher.Result match(Service actualResource, + public Matcher.Result match( + Service actualResource, ServiceStrictMatcherTestCustomResource primary, Context context) { - return GenericKubernetesResourceMatcher.match(this, actualResource, primary, context, false, + return GenericKubernetesResourceMatcher.match( + this, + actualResource, + primary, + context, + false, false, "/spec/ports", "/spec/clusterIP", @@ -53,7 +60,9 @@ public Matcher.Result match(Service actualResource, } @Override - public Service update(Service actual, Service desired, + public Service update( + Service actual, + Service desired, ServiceStrictMatcherTestCustomResource primary, Context context) { updated.addAndGet(1); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherIT.java index 7d1b306210..ca0c7abd72 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherIT.java @@ -14,18 +14,19 @@ public class ServiceStrictMatcherIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new ServiceStrictMatcherTestReconciler()) - .build(); - + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new ServiceStrictMatcherTestReconciler()) + .build(); @Test void testTheMatchingDoesNoTTriggersFurtherUpdates() { var resource = operator.create(testResource()); await().untilAsserted(() -> { - assertThat(operator.getReconcilerOfType(ServiceStrictMatcherTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(1); + assertThat(operator + .getReconcilerOfType(ServiceStrictMatcherTestReconciler.class) + .getNumberOfExecutions()) + .isEqualTo(1); }); // make an update to spec to reconcile again @@ -33,21 +34,19 @@ void testTheMatchingDoesNoTTriggersFurtherUpdates() { operator.replace(resource); await().pollDelay(Duration.ofMillis(300)).untilAsserted(() -> { - assertThat(operator.getReconcilerOfType(ServiceStrictMatcherTestReconciler.class) - .getNumberOfExecutions()).isEqualTo(2); + assertThat(operator + .getReconcilerOfType(ServiceStrictMatcherTestReconciler.class) + .getNumberOfExecutions()) + .isEqualTo(2); assertThat(ServiceDependentResource.updated.get()).isZero(); }); } - ServiceStrictMatcherTestCustomResource testResource() { var res = new ServiceStrictMatcherTestCustomResource(); res.setSpec(new ServiceStrictMatcherSpec()); res.getSpec().setValue(1); - res.setMetadata(new ObjectMetaBuilder() - .withName("test1") - .build()); + res.setMetadata(new ObjectMetaBuilder().withName("test1").build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestCustomResource.java index 6e05628633..ac12749d32 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestCustomResource.java @@ -10,7 +10,4 @@ @Version("v1") @ShortNames("ssm") public class ServiceStrictMatcherTestCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestReconciler.java index 556f28113d..12f18b5319 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/servicestrictmatcher/ServiceStrictMatcherTestReconciler.java @@ -10,7 +10,6 @@ public class ServiceStrictMatcherTestReconciler implements Reconciler { - private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @Override diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/ServiceAccountDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/ServiceAccountDependentResource.java index b5f8cd3225..ece2926208 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/ServiceAccountDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/ServiceAccountDependentResource.java @@ -9,16 +9,16 @@ import static io.javaoperatorsdk.operator.dependent.specialresourcesdependent.SpecialResourceSpec.INITIAL_VALUE; @KubernetesDependent -public class ServiceAccountDependentResource extends - CRUDKubernetesDependentResource { +public class ServiceAccountDependentResource + extends CRUDKubernetesDependentResource { public ServiceAccountDependentResource() { super(ServiceAccount.class); } @Override - protected ServiceAccount desired(SpecialResourceCustomResource primary, - Context context) { + protected ServiceAccount desired( + SpecialResourceCustomResource primary, Context context) { ServiceAccount res = new ServiceAccount(); res.setMetadata(new ObjectMetaBuilder() .withName(primary.getMetadata().getName()) @@ -28,5 +28,4 @@ protected ServiceAccount desired(SpecialResourceCustomResource primary, return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceCustomResource.java index fc7feeb805..84553fb61a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceCustomResource.java @@ -10,5 +10,4 @@ @Version("v1") @ShortNames("srd") public class SpecialResourceCustomResource extends CustomResource - implements Namespaced { -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceTestReconciler.java index 7d2720c5c2..bde90f7340 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourceTestReconciler.java @@ -7,21 +7,19 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = { - @Dependent(type = ServiceAccountDependentResource.class), -}) -@ControllerConfiguration( - informer = @Informer(namespaces = Constants.WATCH_CURRENT_NAMESPACE)) +@Workflow( + dependents = { + @Dependent(type = ServiceAccountDependentResource.class), + }) +@ControllerConfiguration(informer = @Informer(namespaces = Constants.WATCH_CURRENT_NAMESPACE)) public class SpecialResourceTestReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @Override public UpdateControl reconcile( - SpecialResourceCustomResource resource, - Context context) { + SpecialResourceCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); return UpdateControl.noUpdate(); } @@ -29,5 +27,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourcesDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourcesDependentIT.java index 89cd94e51d..9e0e8c8610 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourcesDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/specialresourcesdependent/SpecialResourcesDependentIT.java @@ -21,9 +21,9 @@ public class SpecialResourcesDependentIT { public static final String RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new SpecialResourceTestReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new SpecialResourceTestReconciler()) + .build(); @Test void specialCRUDReconciler() { @@ -43,17 +43,13 @@ void specialCRUDReconciler() { assertThat(sa).isNotNull(); assertThat(sa.getAutomountServiceAccountToken()).isFalse(); }); - } SpecialResourceCustomResource testResource() { SpecialResourceCustomResource res = new SpecialResourceCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); res.setSpec(new SpecialResourceSpec()); res.getSpec().setValue(INITIAL_VALUE); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherCustomResource.java index fe58579035..dffcea0e93 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherCustomResource.java @@ -9,8 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("slm") -public class SSALegacyMatcherCustomResource - extends CustomResource - implements Namespaced { - -} +public class SSALegacyMatcherCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherReconciler.java index 179496f1b9..29c97b1400 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSALegacyMatcherReconciler.java @@ -7,15 +7,13 @@ @Workflow(dependents = {@Dependent(type = ServiceDependentResource.class)}) @ControllerConfiguration -public class SSALegacyMatcherReconciler - implements Reconciler { +public class SSALegacyMatcherReconciler implements Reconciler { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); @Override public UpdateControl reconcile( - SSALegacyMatcherCustomResource resource, - Context context) { + SSALegacyMatcherCustomResource resource, Context context) { numberOfExecutions.addAndGet(1); return UpdateControl.noUpdate(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSAWithLegacyMatcherIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSAWithLegacyMatcherIT.java index 090f60c7d5..b002596e6a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSAWithLegacyMatcherIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/SSAWithLegacyMatcherIT.java @@ -15,9 +15,9 @@ public class SSAWithLegacyMatcherIT { public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder().withReconciler(new SSALegacyMatcherReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new SSALegacyMatcherReconciler()) + .build(); @Test void matchesDependentWithLegacyMatcher() { @@ -38,12 +38,9 @@ void matchesDependentWithLegacyMatcher() { SSALegacyMatcherCustomResource testResource() { SSALegacyMatcherCustomResource res = new SSALegacyMatcherCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new SSALegacyMatcherSpec()); res.getSpec().setValue("initial-value"); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/ServiceDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/ServiceDependentResource.java index 98036036cc..876b74b68c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/ServiceDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/ssalegacymatcher/ServiceDependentResource.java @@ -23,11 +23,11 @@ public ServiceDependentResource() { } @Override - protected Service desired(SSALegacyMatcherCustomResource primary, - Context context) { + protected Service desired( + SSALegacyMatcherCustomResource primary, Context context) { - Service service = loadYaml(Service.class, SSAWithLegacyMatcherIT.class, - "/io/javaoperatorsdk/operator/service.yaml"); + Service service = loadYaml( + Service.class, SSAWithLegacyMatcherIT.class, "/io/javaoperatorsdk/operator/service.yaml"); service.getMetadata().setName(primary.getMetadata().getName()); service.getMetadata().setNamespace(primary.getMetadata().getNamespace()); Map labels = new HashMap<>(); @@ -37,17 +37,22 @@ protected Service desired(SSALegacyMatcherCustomResource primary, } @Override - public Result match(Service actualResource, SSALegacyMatcherCustomResource primary, + public Result match( + Service actualResource, + SSALegacyMatcherCustomResource primary, Context context) { var desired = desired(primary, context); - return GenericKubernetesResourceMatcher.match(this, actualResource, primary, context, - false, false); + return GenericKubernetesResourceMatcher.match( + this, actualResource, primary, context, false, false); } // override just to check the exec count @Override - public Service update(Service actual, Service desired, SSALegacyMatcherCustomResource primary, + public Service update( + Service actual, + Service desired, + SSALegacyMatcherCustomResource primary, Context context) { createUpdateCount.addAndGet(1); return super.update(actual, desired, primary, context); @@ -55,7 +60,9 @@ public Service update(Service actual, Service desired, SSALegacyMatcherCustomRes // override just to check the exec count @Override - public Service create(Service desired, SSALegacyMatcherCustomResource primary, + public Service create( + Service desired, + SSALegacyMatcherCustomResource primary, Context context) { createUpdateCount.addAndGet(1); return super.create(desired, primary, context); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentResourceIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentResourceIT.java index 19853842e7..a0e90e71c7 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentResourceIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentResourceIT.java @@ -21,9 +21,9 @@ public class StandaloneDependentResourceIT { public static final String DEPENDENT_TEST_NAME = "dependent-test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(new StandaloneDependentTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new StandaloneDependentTestReconciler()) + .build(); @Test void dependentResourceManagesDeployment() { @@ -37,7 +37,7 @@ void dependentResourceManagesDeployment() { awaitForDeploymentReadyReplicas(1); assertThat( - ((StandaloneDependentTestReconciler) operator.getFirstReconciler()).isErrorOccurred()) + ((StandaloneDependentTestReconciler) operator.getFirstReconciler()).isErrorOccurred()) .isFalse(); } @@ -58,28 +58,23 @@ void executeUpdateForTestingCacheUpdateForGetResource() { awaitForDeploymentReadyReplicas(2); assertThat( - ((StandaloneDependentTestReconciler) operator.getFirstReconciler()).isErrorOccurred()) + ((StandaloneDependentTestReconciler) operator.getFirstReconciler()).isErrorOccurred()) .isFalse(); } void awaitForDeploymentReadyReplicas(int expectedReplicaCount) { - await() - .pollInterval(Duration.ofMillis(300)) - .atMost(Duration.ofSeconds(50)) - .until( - () -> { - var deployment = - operator - .getKubernetesClient() - .resources(Deployment.class) - .inNamespace(operator.getNamespace()) - .withName(DEPENDENT_TEST_NAME) - .get(); - return deployment != null - && deployment.getStatus() != null - && deployment.getStatus().getReadyReplicas() != null - && deployment.getStatus().getReadyReplicas() == expectedReplicaCount; - }); + await().pollInterval(Duration.ofMillis(300)).atMost(Duration.ofSeconds(50)).until(() -> { + var deployment = operator + .getKubernetesClient() + .resources(Deployment.class) + .inNamespace(operator.getNamespace()) + .withName(DEPENDENT_TEST_NAME) + .get(); + return deployment != null + && deployment.getStatus() != null + && deployment.getStatus().getReadyReplicas() != null + && deployment.getStatus().getReadyReplicas() == expectedReplicaCount; + }); } Cloner cloner() { @@ -101,5 +96,4 @@ public Version getVersion() { } }.getResourceCloner(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestCustomResource.java index 3f2d2c9c2e..dd966f5035 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestCustomResource.java @@ -10,7 +10,4 @@ @Version("v1") @ShortNames("sdt") public class StandaloneDependentTestCustomResource - extends - CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestReconciler.java index e10a20a93c..b73225d634 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/standalonedependent/StandaloneDependentTestReconciler.java @@ -30,8 +30,7 @@ public StandaloneDependentTestReconciler() { @Override public List> prepareEventSources( EventSourceContext context) { - return EventSourceUtils.dependentEventSources(context, - deploymentDependent); + return EventSourceUtils.dependentEventSources(context, deploymentDependent); } @Override @@ -54,7 +53,8 @@ public UpdateControl reconcile( @Override public ErrorStatusUpdateControl updateErrorStatus( StandaloneDependentTestCustomResource resource, - Context context, Exception e) { + Context context, + Exception e) { // this can happen when a namespace is terminated in test if (e instanceof KubernetesClientException) { return ErrorStatusUpdateControl.noStatusUpdate(); @@ -67,19 +67,21 @@ public boolean isErrorOccurred() { return errorOccurred; } - private static class DeploymentDependentResource extends - CRUDKubernetesDependentResource { + private static class DeploymentDependentResource + extends CRUDKubernetesDependentResource { public DeploymentDependentResource() { super(Deployment.class); } @Override - protected Deployment desired(StandaloneDependentTestCustomResource primary, + protected Deployment desired( + StandaloneDependentTestCustomResource primary, Context context) { - Deployment deployment = - ReconcilerUtils.loadYaml(Deployment.class, StandaloneDependentResourceIT.class, - "/io/javaoperatorsdk/operator/nginx-deployment.yaml"); + Deployment deployment = ReconcilerUtils.loadYaml( + Deployment.class, + StandaloneDependentResourceIT.class, + "/io/javaoperatorsdk/operator/nginx-deployment.yaml"); deployment.getMetadata().setName(primary.getMetadata().getName()); deployment.getSpec().setReplicas(primary.getSpec().getReplicaCount()); deployment.getMetadata().setNamespace(primary.getMetadata().getNamespace()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerCustomResource.java index e500206207..ebfac08b09 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerCustomResource.java @@ -8,7 +8,4 @@ @Group("sample.javaoperatorsdk") @Version("v1") public class StatefulSetDesiredSanitizerCustomResource - extends CustomResource - implements Namespaced { - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerDependentResource.java index 98ac4897d7..ba3619217c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerDependentResource.java @@ -7,8 +7,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; public class StatefulSetDesiredSanitizerDependentResource - extends - CRUDKubernetesDependentResource { + extends CRUDKubernetesDependentResource< + StatefulSet, StatefulSetDesiredSanitizerCustomResource> { public static volatile Boolean nonMatchedAtLeastOnce; @@ -17,11 +17,11 @@ public StatefulSetDesiredSanitizerDependentResource() { } @Override - protected StatefulSet desired(StatefulSetDesiredSanitizerCustomResource primary, + protected StatefulSet desired( + StatefulSetDesiredSanitizerCustomResource primary, Context context) { - var template = - ReconcilerUtils.loadYaml(StatefulSet.class, getClass(), - "/io/javaoperatorsdk/operator/statefulset.yaml"); + var template = ReconcilerUtils.loadYaml( + StatefulSet.class, getClass(), "/io/javaoperatorsdk/operator/statefulset.yaml"); template.setMetadata(new ObjectMetaBuilder() .withName(primary.getMetadata().getName()) .withNamespace(primary.getMetadata().getNamespace()) @@ -30,7 +30,8 @@ protected StatefulSet desired(StatefulSetDesiredSanitizerCustomResource primary, } @Override - public Result match(StatefulSet actualResource, + public Result match( + StatefulSet actualResource, StatefulSetDesiredSanitizerCustomResource primary, Context context) { var res = super.match(actualResource, primary, context); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerIT.java index 49c08f7a8b..686f55819d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerIT.java @@ -17,10 +17,9 @@ public class StatefulSetDesiredSanitizerIT { public static final String TEST_1 = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new StatefulSetDesiredSanitizerReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new StatefulSetDesiredSanitizerReconciler()) + .build(); @Test void testSSAMatcher() { @@ -34,20 +33,17 @@ void testSSAMatcher() { resource.getSpec().setValue("changed value"); extension.replace(resource); - await().untilAsserted( - () -> assertThat(StatefulSetDesiredSanitizerDependentResource.nonMatchedAtLeastOnce) - .isFalse()); + await().untilAsserted(() -> assertThat( + StatefulSetDesiredSanitizerDependentResource.nonMatchedAtLeastOnce) + .isFalse()); } StatefulSetDesiredSanitizerCustomResource testResource() { var res = new StatefulSetDesiredSanitizerCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_1) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_1).build()); res.setSpec(new StatefulSetDesiredSanitizerSpec()); res.getSpec().setValue("initial value"); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerReconciler.java index f84f71411e..284119ba61 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/dependent/statefulsetdesiredsanitizer/StatefulSetDesiredSanitizerReconciler.java @@ -11,7 +11,8 @@ public class StatefulSetDesiredSanitizerReconciler @Override public UpdateControl reconcile( StatefulSetDesiredSanitizerCustomResource resource, - Context context) throws Exception { + Context context) + throws Exception { return UpdateControl.noUpdate(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalIDGenServiceMock.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalIDGenServiceMock.java index f30b3fa959..df48fc282b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalIDGenServiceMock.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalIDGenServiceMock.java @@ -5,7 +5,7 @@ public class ExternalIDGenServiceMock { - private final static ExternalIDGenServiceMock serviceMock = new ExternalIDGenServiceMock(); + private static final ExternalIDGenServiceMock serviceMock = new ExternalIDGenServiceMock(); private final Map resourceMap = new ConcurrentHashMap<>(); @@ -38,5 +38,4 @@ public List listResources() { public static ExternalIDGenServiceMock getInstance() { return serviceMock; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalResource.java index dd3e5ab113..048b1642c8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/ExternalResource.java @@ -36,10 +36,8 @@ public String getData() { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; ExternalResource that = (ExternalResource) o; return Objects.equals(id, that.id) && Objects.equals(data, that.data); } @@ -55,13 +53,16 @@ public ResourceID toResourceID() { } public static String toExternalResourceId(HasMetadata primary, int i) { - return primary.getMetadata().getName() + EXTERNAL_RESOURCE_NAME_DELIMITER + - primary.getMetadata().getNamespace() + - EXTERNAL_RESOURCE_NAME_DELIMITER + i; + return primary.getMetadata().getName() + + EXTERNAL_RESOURCE_NAME_DELIMITER + + primary.getMetadata().getNamespace() + + EXTERNAL_RESOURCE_NAME_DELIMITER + + i; } public static String toExternalResourceId(HasMetadata primary) { - return primary.getMetadata().getName() + EXTERNAL_RESOURCE_NAME_DELIMITER + - primary.getMetadata().getNamespace(); + return primary.getMetadata().getName() + + EXTERNAL_RESOURCE_NAME_DELIMITER + + primary.getMetadata().getNamespace(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java index 952ad75b19..17d5bd729c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/support/TestUtils.java @@ -19,12 +19,11 @@ public static TestCustomResource testCustomResource() { public static TestCustomResource testCustomResource(String uid) { TestCustomResource resource = new TestCustomResource(); - resource.setMetadata( - new ObjectMetaBuilder() - .withName(TEST_CUSTOM_RESOURCE_NAME) - .withUid(uid) - .withGeneration(1L) - .build()); + resource.setMetadata(new ObjectMetaBuilder() + .withName(TEST_CUSTOM_RESOURCE_NAME) + .withUid(uid) + .withGeneration(1L) + .build()); resource.getMetadata().setAnnotations(new HashMap<>()); resource.setKind("CustomService"); resource.setSpec(new TestCustomResourceSpec()); @@ -37,9 +36,7 @@ public static TestCustomResource testCustomResource(String uid) { public static TestCustomResource testCustomResourceWithPrefix(String id) { TestCustomResource resource = new TestCustomResource(); resource.setMetadata( - new ObjectMetaBuilder() - .withName(TEST_CUSTOM_RESOURCE_PREFIX + id) - .build()); + new ObjectMetaBuilder().withName(TEST_CUSTOM_RESOURCE_PREFIX + id).build()); resource.setKind("CustomService"); resource.setSpec(new TestCustomResourceSpec()); resource.getSpec().setConfigMapName("test-config-map-" + id); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowCustomResource.java index cb48ea8c97..dafc1fc497 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowCustomResource.java @@ -10,5 +10,4 @@ @Version("v1") @ShortNames("cdc") public class ComplexWorkflowCustomResource - extends CustomResource implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowIT.java index cf7cdac004..51645a7502 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowIT.java @@ -23,31 +23,33 @@ class ComplexWorkflowIT { public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new ComplexWorkflowReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new ComplexWorkflowReconciler()) + .build(); @Test void successfullyReconciles() { operator.create(testResource()); - await().atMost(Duration.ofSeconds(90)) - .untilAsserted(() -> { - var res = operator.get(ComplexWorkflowCustomResource.class, TEST_RESOURCE_NAME); - assertThat(res.getStatus()).isNotNull(); - assertThat(res.getStatus().getStatus()) - .isEqualTo(ComplexWorkflowReconciler.RECONCILE_STATUS.READY); - }); + await().atMost(Duration.ofSeconds(90)).untilAsserted(() -> { + var res = operator.get(ComplexWorkflowCustomResource.class, TEST_RESOURCE_NAME); + assertThat(res.getStatus()).isNotNull(); + assertThat(res.getStatus().getStatus()) + .isEqualTo(ComplexWorkflowReconciler.RECONCILE_STATUS.READY); + }); - var firstStatefulSet = operator.get(StatefulSet.class, String.format("%s-%s", - FirstStatefulSet.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); - var secondStatefulSet = operator.get(StatefulSet.class, String.format("%s-%s", - SecondStatefulSet.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); - var firstService = operator.get(Service.class, String.format("%s-%s", - FirstService.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); - var secondService = operator.get(Service.class, String.format("%s-%s", - SecondService.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); + var firstStatefulSet = operator.get( + StatefulSet.class, + String.format("%s-%s", FirstStatefulSet.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); + var secondStatefulSet = operator.get( + StatefulSet.class, + String.format("%s-%s", SecondStatefulSet.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); + var firstService = operator.get( + Service.class, + String.format("%s-%s", FirstService.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); + var secondService = operator.get( + Service.class, + String.format("%s-%s", SecondService.DISCRIMINATOR_PREFIX, TEST_RESOURCE_NAME)); assertThat(firstService).isNotNull(); assertThat(secondService).isNotNull(); assertThat(firstStatefulSet).isNotNull(); @@ -58,13 +60,10 @@ void successfullyReconciles() { ComplexWorkflowCustomResource testResource() { var resource = new ComplexWorkflowCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); resource.setSpec(new ComplexWorkflowSpec()); resource.getSpec().setProjectId(TEST_RESOURCE_NAME); return resource; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowReconciler.java index d7e3fc56aa..30a2b305d5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowReconciler.java @@ -19,21 +19,29 @@ import static io.javaoperatorsdk.operator.workflow.complexdependent.ComplexWorkflowReconciler.SERVICE_EVENT_SOURCE_NAME; import static io.javaoperatorsdk.operator.workflow.complexdependent.ComplexWorkflowReconciler.STATEFUL_SET_EVENT_SOURCE_NAME; -@Workflow(dependents = { - @Dependent(name = "first-svc", type = FirstService.class, - useEventSourceWithName = SERVICE_EVENT_SOURCE_NAME), - @Dependent(name = "second-svc", type = SecondService.class, - useEventSourceWithName = SERVICE_EVENT_SOURCE_NAME), - @Dependent(name = "first", type = FirstStatefulSet.class, - useEventSourceWithName = STATEFUL_SET_EVENT_SOURCE_NAME, - dependsOn = {"first-svc"}, - readyPostcondition = StatefulSetReadyCondition.class), - @Dependent(name = "second", - type = SecondStatefulSet.class, - useEventSourceWithName = STATEFUL_SET_EVENT_SOURCE_NAME, - dependsOn = {"second-svc", "first"}, - readyPostcondition = StatefulSetReadyCondition.class), -}) +@Workflow( + dependents = { + @Dependent( + name = "first-svc", + type = FirstService.class, + useEventSourceWithName = SERVICE_EVENT_SOURCE_NAME), + @Dependent( + name = "second-svc", + type = SecondService.class, + useEventSourceWithName = SERVICE_EVENT_SOURCE_NAME), + @Dependent( + name = "first", + type = FirstStatefulSet.class, + useEventSourceWithName = STATEFUL_SET_EVENT_SOURCE_NAME, + dependsOn = {"first-svc"}, + readyPostcondition = StatefulSetReadyCondition.class), + @Dependent( + name = "second", + type = SecondStatefulSet.class, + useEventSourceWithName = STATEFUL_SET_EVENT_SOURCE_NAME, + dependsOn = {"second-svc", "first"}, + readyPostcondition = StatefulSetReadyCondition.class), + }) @ControllerConfiguration(name = "project-operator") public class ComplexWorkflowReconciler implements Reconciler { @@ -42,9 +50,11 @@ public class ComplexWorkflowReconciler implements Reconciler reconcile( - ComplexWorkflowCustomResource resource, - Context context) throws Exception { - var ready = context.managedWorkflowAndDependentResourceContext().getWorkflowReconcileResult() + ComplexWorkflowCustomResource resource, Context context) + throws Exception { + var ready = context + .managedWorkflowAndDependentResourceContext() + .getWorkflowReconcileResult() .orElseThrow() .allDependentResourcesReady(); @@ -60,15 +70,15 @@ public List> prepareEventSources( EventSourceContext context) { InformerEventSource serviceEventSource = new InformerEventSource<>( - InformerEventSourceConfiguration - .from(Service.class, ComplexWorkflowCustomResource.class) + InformerEventSourceConfiguration.from( + Service.class, ComplexWorkflowCustomResource.class) .withName(SERVICE_EVENT_SOURCE_NAME) .build(), context); InformerEventSource statefulSetEventSource = new InformerEventSource<>( - InformerEventSourceConfiguration - .from(StatefulSet.class, ComplexWorkflowCustomResource.class) + InformerEventSourceConfiguration.from( + StatefulSet.class, ComplexWorkflowCustomResource.class) .withName(STATEFUL_SET_EVENT_SOURCE_NAME) .build(), context); @@ -76,6 +86,7 @@ public List> prepareEventSources( } public enum RECONCILE_STATUS { - READY, NOT_READY + READY, + NOT_READY } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowStatus.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowStatus.java index d9b498682a..226880073f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowStatus.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/ComplexWorkflowStatus.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.workflow.complexdependent; - public class ComplexWorkflowStatus { private ComplexWorkflowReconciler.RECONCILE_STATUS status; diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseService.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseService.java index 75a4d7ee03..d9b0bdc894 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseService.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseService.java @@ -15,9 +15,11 @@ public BaseService(String component) { } @Override - protected Service desired(ComplexWorkflowCustomResource primary, - Context context) { - var template = ReconcilerUtils.loadYaml(Service.class, getClass(), + protected Service desired( + ComplexWorkflowCustomResource primary, Context context) { + var template = ReconcilerUtils.loadYaml( + Service.class, + getClass(), "/io/javaoperatorsdk/operator/workflow/complexdependent/service.yaml"); return new ServiceBuilder(template) diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseStatefulSet.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseStatefulSet.java index fe05db1c1b..c39bc31180 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseStatefulSet.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/BaseStatefulSet.java @@ -14,9 +14,11 @@ public BaseStatefulSet(String component) { } @Override - protected StatefulSet desired(ComplexWorkflowCustomResource primary, - Context context) { - var template = ReconcilerUtils.loadYaml(StatefulSet.class, getClass(), + protected StatefulSet desired( + ComplexWorkflowCustomResource primary, Context context) { + var template = ReconcilerUtils.loadYaml( + StatefulSet.class, + getClass(), "/io/javaoperatorsdk/operator/workflow/complexdependent/statefulset.yaml"); var name = name(primary); var metadata = createMeta(primary).build(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstService.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstService.java index 36b1ec4845..57686c6f7d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstService.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstService.java @@ -9,5 +9,4 @@ public class FirstService extends BaseService { public FirstService() { super(DISCRIMINATOR_PREFIX); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstStatefulSet.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstStatefulSet.java index d9cd2933fd..4a065f7ca6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstStatefulSet.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/FirstStatefulSet.java @@ -10,5 +10,4 @@ public class FirstStatefulSet extends BaseStatefulSet { public FirstStatefulSet() { super(DISCRIMINATOR_PREFIX); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/SecondStatefulSet.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/SecondStatefulSet.java index 78ab7953eb..85508b9695 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/SecondStatefulSet.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/SecondStatefulSet.java @@ -10,5 +10,4 @@ public class SecondStatefulSet extends BaseStatefulSet { public SecondStatefulSet() { super(DISCRIMINATOR_PREFIX); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/StatefulSetReadyCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/StatefulSetReadyCondition.java index 1116bd7f1d..68180565d0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/StatefulSetReadyCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/complexdependent/dependent/StatefulSetReadyCondition.java @@ -15,10 +15,12 @@ public boolean isMet( ComplexWorkflowCustomResource primary, Context context) { - return dependentResource.getSecondaryResource(primary, context).map(secondary -> { - var readyReplicas = secondary.getStatus().getReadyReplicas(); - return readyReplicas != null && readyReplicas > 0; - }) + return dependentResource + .getSecondaryResource(primary, context) + .map(secondary -> { + var readyReplicas = secondary.getStatus().getReadyReplicas(); + return readyReplicas != null && readyReplicas > 0; + }) .orElse(false); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationConditionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationConditionIT.java index 85cb3aa6c5..68802c9d2d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationConditionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationConditionIT.java @@ -20,31 +20,35 @@ public class CRDPresentActivationConditionIT { "crdpresentactivationdependentcustomresources.sample.javaoperatorsdk"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new CRDPresentActivationReconciler()) - .build(); - + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new CRDPresentActivationReconciler()) + .build(); @Test void resourceCreatedOnlyIfCRDPresent() { // deleted so test can be repeated - extension.getKubernetesClient().resources(CustomResourceDefinition.class) - .withName(CRD_NAME).delete(); + extension + .getKubernetesClient() + .resources(CustomResourceDefinition.class) + .withName(CRD_NAME) + .delete(); var resource = extension.create(testResource()); await().pollDelay(Duration.ofMillis(300)).untilAsserted(() -> { - var crd = extension.getKubernetesClient().resources(CustomResourceDefinition.class) - .withName(CRD_NAME).get(); + var crd = extension + .getKubernetesClient() + .resources(CustomResourceDefinition.class) + .withName(CRD_NAME) + .get(); assertThat(crd).isNull(); var dr = extension.get(CRDPresentActivationDependentCustomResource.class, TEST_1); assertThat(dr).isNull(); }); - LocallyRunOperatorExtension.applyCrd(CRDPresentActivationDependentCustomResource.class, - extension.getKubernetesClient()); + LocallyRunOperatorExtension.applyCrd( + CRDPresentActivationDependentCustomResource.class, extension.getKubernetesClient()); resource.getMetadata().setAnnotations(Map.of("sample", "value")); extension.replace(resource); @@ -53,15 +57,11 @@ void resourceCreatedOnlyIfCRDPresent() { var cm = extension.get(CRDPresentActivationDependentCustomResource.class, TEST_1); assertThat(cm).isNull(); }); - } CRDPresentActivationCustomResource testResource() { var res = new CRDPresentActivationCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_1) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_1).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationCustomResource.java index 5b8dc2f704..a010f42cca 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationCustomResource.java @@ -9,9 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("crdp") -public class CRDPresentActivationCustomResource - extends CustomResource - implements Namespaced { - - -} +public class CRDPresentActivationCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependent.java index fdfcda1700..82b3e6fedd 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependent.java @@ -5,8 +5,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; public class CRDPresentActivationDependent - extends - CRUDNoGCKubernetesDependentResource { + extends CRUDNoGCKubernetesDependentResource< + CRDPresentActivationDependentCustomResource, CRDPresentActivationCustomResource> { public CRDPresentActivationDependent() { super(CRDPresentActivationDependentCustomResource.class); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependentCustomResource.java index 18280ee6b3..4be93ab453 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependentCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationDependentCustomResource.java @@ -10,7 +10,4 @@ @Version("v1") @ShortNames("addp") public class CRDPresentActivationDependentCustomResource extends CustomResource - implements Namespaced { - - -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationReconciler.java index 9cc05eaddc..49aebd5e4f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/crdpresentactivation/CRDPresentActivationReconciler.java @@ -4,15 +4,17 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.processing.dependent.workflow.CRDPresentActivationCondition; -@Workflow(dependents = { - @Dependent(type = CRDPresentActivationDependent.class, - activationCondition = CRDPresentActivationCondition.class), -}) +@Workflow( + dependents = { + @Dependent( + type = CRDPresentActivationDependent.class, + activationCondition = CRDPresentActivationCondition.class), + }) // to trigger reconciliation with metadata change @ControllerConfiguration(generationAwareEventProcessing = false) public class CRDPresentActivationReconciler implements Reconciler, - Cleaner { + Cleaner { @Override public UpdateControl reconcile( @@ -23,7 +25,8 @@ public UpdateControl reconcile( } @Override - public DeleteControl cleanup(CRDPresentActivationCustomResource resource, + public DeleteControl cleanup( + CRDPresentActivationCustomResource resource, Context context) { return DeleteControl.defaultDelete(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/ConfigMapDependentResource.java index 0c1bdd5900..e93037df8c 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/ConfigMapDependentResource.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.workflow.getnonactivesecondary; - import io.fabric8.kubernetes.api.model.ConfigMap; import io.fabric8.kubernetes.api.model.ObjectMetaBuilder; import io.javaoperatorsdk.operator.api.reconciler.Context; @@ -16,7 +15,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(GetNonActiveSecondaryCustomResource primary, + protected ConfigMap desired( + GetNonActiveSecondaryCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/GetNonActiveSecondaryCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/GetNonActiveSecondaryCustomResource.java index fddcd9fe75..be12dec053 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/GetNonActiveSecondaryCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/GetNonActiveSecondaryCustomResource.java @@ -9,9 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("gnas") -public class GetNonActiveSecondaryCustomResource - extends CustomResource - implements Namespaced { - - -} +public class GetNonActiveSecondaryCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/RouteDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/RouteDependentResource.java index c7d1b9a1b1..b7dd1f58bf 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/RouteDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/RouteDependentResource.java @@ -13,7 +13,8 @@ public RouteDependentResource() { } @Override - protected Route desired(GetNonActiveSecondaryCustomResource primary, + protected Route desired( + GetNonActiveSecondaryCustomResource primary, Context context) { // basically does not matter since this should not be called Route route = new Route(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionIT.java index c2c073df88..2a431873d3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionIT.java @@ -14,27 +14,25 @@ public class WorkflowActivationConditionIT { public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(WorkflowActivationConditionReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(WorkflowActivationConditionReconciler.class) + .build(); @Test void reconciledOnVanillaKubernetesDespiteRouteInWorkflow() { extension.create(testResource()); await().untilAsserted(() -> { - assertThat(extension.getReconcilerOfType(WorkflowActivationConditionReconciler.class) - .getNumberOfReconciliationExecution()).isEqualTo(1); + assertThat(extension + .getReconcilerOfType(WorkflowActivationConditionReconciler.class) + .getNumberOfReconciliationExecution()) + .isEqualTo(1); }); } private GetNonActiveSecondaryCustomResource testResource() { var res = new GetNonActiveSecondaryCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionReconciler.java index 2d2d39274d..076919d5d1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/getnonactivesecondary/WorkflowActivationConditionReconciler.java @@ -10,11 +10,13 @@ import io.javaoperatorsdk.operator.api.reconciler.Workflow; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class), - @Dependent(type = RouteDependentResource.class, - activationCondition = FalseActivationCondition.class) -}) +@Workflow( + dependents = { + @Dependent(type = ConfigMapDependentResource.class), + @Dependent( + type = RouteDependentResource.class, + activationCondition = FalseActivationCondition.class) + }) @ControllerConfiguration public class WorkflowActivationConditionReconciler implements Reconciler { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ConfigMapDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ConfigMapDependent.java index af70b6842a..b4eebf36f0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ConfigMapDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ConfigMapDependent.java @@ -7,15 +7,17 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; -public class ConfigMapDependent extends - CRUDNoGCKubernetesDependentResource { +public class ConfigMapDependent + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, ManagedDependentDefaultDeleteConditionCustomResource> { public ConfigMapDependent() { super(ConfigMap.class); } @Override - protected ConfigMap desired(ManagedDependentDefaultDeleteConditionCustomResource primary, + protected ConfigMap desired( + ManagedDependentDefaultDeleteConditionCustomResource primary, Context context) { return new ConfigMapBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionCustomResource.java index 01b995c061..c421e75b54 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("mdcc") -public class ManagedDependentDefaultDeleteConditionCustomResource - extends CustomResource - implements Namespaced { -} +public class ManagedDependentDefaultDeleteConditionCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionReconciler.java index 530f9b8146..d992e9a1b4 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDefaultDeleteConditionReconciler.java @@ -7,11 +7,14 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.processing.dependent.workflow.KubernetesResourceDeletedCondition; -@Workflow(dependents = { - @Dependent(name = "ConfigMap", type = ConfigMapDependent.class), - @Dependent(type = SecretDependent.class, dependsOn = "ConfigMap", - deletePostcondition = KubernetesResourceDeletedCondition.class) -}) +@Workflow( + dependents = { + @Dependent(name = "ConfigMap", type = ConfigMapDependent.class), + @Dependent( + type = SecretDependent.class, + dependsOn = "ConfigMap", + deletePostcondition = KubernetesResourceDeletedCondition.class) + }) @ControllerConfiguration public class ManagedDependentDefaultDeleteConditionReconciler implements Reconciler { @@ -28,5 +31,4 @@ public UpdateControl recon return UpdateControl.noUpdate(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDeleteConditionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDeleteConditionIT.java index 4d688bf606..0be81727ee 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDeleteConditionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/ManagedDependentDeleteConditionIT.java @@ -20,18 +20,15 @@ public class ManagedDependentDeleteConditionIT { public static final String CUSTOM_FINALIZER = "test/customfinalizer"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withConfigurationService(o -> o.withDefaultNonSSAResource(Set.of())) - .withReconciler(new ManagedDependentDefaultDeleteConditionReconciler()).build(); - + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withConfigurationService(o -> o.withDefaultNonSSAResource(Set.of())) + .withReconciler(new ManagedDependentDefaultDeleteConditionReconciler()) + .build(); @Test void resourceNotDeletedUntilDependentDeleted() { var resource = new ManagedDependentDefaultDeleteConditionCustomResource(); - resource.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + resource.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); resource = extension.create(resource); await().timeout(Duration.ofSeconds(300)).untilAsserted(() -> { @@ -65,5 +62,4 @@ void resourceNotDeletedUntilDependentDeleted() { assertThat(sec).isNull(); }); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/SecretDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/SecretDependent.java index 6add6bf93b..73bbbc7006 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/SecretDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/manageddependentdeletecondition/SecretDependent.java @@ -10,15 +10,16 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; public class SecretDependent - extends - CRUDNoGCKubernetesDependentResource { + extends CRUDNoGCKubernetesDependentResource< + Secret, ManagedDependentDefaultDeleteConditionCustomResource> { public SecretDependent() { super(Secret.class); } @Override - protected Secret desired(ManagedDependentDefaultDeleteConditionCustomResource primary, + protected Secret desired( + ManagedDependentDefaultDeleteConditionCustomResource primary, Context context) { return new SecretBuilder() @@ -26,8 +27,8 @@ protected Secret desired(ManagedDependentDefaultDeleteConditionCustomResource pr .withName(primary.getMetadata().getName()) .withNamespace(primary.getMetadata().getNamespace()) .endMetadata() - .withData(Map.of("key", - new String(Base64.getEncoder().encode("val".getBytes(StandardCharsets.UTF_16))))) + .withData(Map.of( + "key", new String(Base64.getEncoder().encode("val".getBytes(StandardCharsets.UTF_16))))) .build(); } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource1.java index a3198a3ca3..732faf4004 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource1.java @@ -11,8 +11,8 @@ @KubernetesDependent(informer = @Informer(name = "configMapInformer")) public class ConfigMapDependentResource1 - extends - CRUDNoGCKubernetesDependentResource { + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, MultipleDependentActivationCustomResource> { public static final String DATA_KEY = "data"; public static final String SUFFIX = "1"; @@ -22,7 +22,8 @@ public ConfigMapDependentResource1() { } @Override - protected ConfigMap desired(MultipleDependentActivationCustomResource primary, + protected ConfigMap desired( + MultipleDependentActivationCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource2.java index 5fcead39a2..1765b5db09 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/ConfigMapDependentResource2.java @@ -11,8 +11,8 @@ @KubernetesDependent(informer = @Informer(name = "configMapInformer")) public class ConfigMapDependentResource2 - extends - CRUDNoGCKubernetesDependentResource { + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, MultipleDependentActivationCustomResource> { public static final String DATA_KEY = "data"; public static final String SUFFIX = "2"; @@ -22,7 +22,8 @@ public ConfigMapDependentResource2() { } @Override - protected ConfigMap desired(MultipleDependentActivationCustomResource primary, + protected ConfigMap desired( + MultipleDependentActivationCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationCustomResource.java index 1e99c1c4b1..fc68a98e56 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationCustomResource.java @@ -10,8 +10,4 @@ @Version("v1") @ShortNames("mdar") public class MultipleDependentActivationCustomResource - extends CustomResource - implements Namespaced { - - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationReconciler.java index 14e3ed9811..9953120e76 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentActivationReconciler.java @@ -5,13 +5,16 @@ import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource1.class, - activationCondition = ActivationCondition.class), - @Dependent(type = ConfigMapDependentResource2.class, - activationCondition = ActivationCondition.class), - @Dependent(type = SecretDependentResource.class) -}) +@Workflow( + dependents = { + @Dependent( + type = ConfigMapDependentResource1.class, + activationCondition = ActivationCondition.class), + @Dependent( + type = ConfigMapDependentResource2.class, + activationCondition = ActivationCondition.class), + @Dependent(type = SecretDependentResource.class) + }) @ControllerConfiguration public class MultipleDependentActivationReconciler implements Reconciler { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentWithActivationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentWithActivationIT.java index b82fc369f9..fedcfe6d25 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentWithActivationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/MultipleDependentWithActivationIT.java @@ -18,10 +18,9 @@ public class MultipleDependentWithActivationIT { public static final String TEST_RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(new MultipleDependentActivationReconciler()) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(new MultipleDependentActivationReconciler()) + .build(); @Test void bothDependentsWithActivationAreHandled() { @@ -52,24 +51,23 @@ void bothDependentsWithActivationAreHandled() { assertThat(secret).isNotNull(); assertThat(cm1).isNotNull(); assertThat(cm2).isNotNull(); - assertThat(cm1.getData()).containsEntry(ConfigMapDependentResource1.DATA_KEY, - CHANGED_VALUE + ConfigMapDependentResource1.SUFFIX); - assertThat(cm2.getData()).containsEntry(ConfigMapDependentResource2.DATA_KEY, - CHANGED_VALUE + ConfigMapDependentResource2.SUFFIX); + assertThat(cm1.getData()) + .containsEntry( + ConfigMapDependentResource1.DATA_KEY, + CHANGED_VALUE + ConfigMapDependentResource1.SUFFIX); + assertThat(cm2.getData()) + .containsEntry( + ConfigMapDependentResource2.DATA_KEY, + CHANGED_VALUE + ConfigMapDependentResource2.SUFFIX); }); - } MultipleDependentActivationCustomResource testResource() { var res = new MultipleDependentActivationCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new MultipleDependentActivationSpec()); res.getSpec().setValue(INITIAL_VALUE); return res; } - - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/SecretDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/SecretDependentResource.java index 6340d07b58..fbdb1d2ab0 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/SecretDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/multipledependentwithactivation/SecretDependentResource.java @@ -16,7 +16,8 @@ public SecretDependentResource() { } @Override - protected Secret desired(MultipleDependentActivationCustomResource primary, + protected Secret desired( + MultipleDependentActivationCustomResource primary, Context context) { // basically does not matter since this should not be called Secret secret = new Secret(); @@ -24,8 +25,8 @@ protected Secret desired(MultipleDependentActivationCustomResource primary, .withName(primary.getMetadata().getName()) .withNamespace(primary.getMetadata().getNamespace()) .build()); - secret.setData(Map.of("data", - Base64.getEncoder().encodeToString(primary.getSpec().getValue().getBytes()))); + secret.setData(Map.of( + "data", Base64.getEncoder().encodeToString(primary.getSpec().getValue().getBytes()))); return secret; } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource1.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource1.java index 0478fe4248..f3cc3144c6 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource1.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource1.java @@ -12,22 +12,24 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; @KubernetesDependent(informer = @Informer(labelSelector = "dependent = cm1")) -public class ConfigMapDependentResource1 extends - CRUDKubernetesDependentResource { +public class ConfigMapDependentResource1 + extends CRUDKubernetesDependentResource { public ConfigMapDependentResource1() { super(ConfigMap.class); } @Override - public ReconcileResult reconcile(OrderedManagedDependentCustomResource primary, + public ReconcileResult reconcile( + OrderedManagedDependentCustomResource primary, Context context) { OrderedManagedDependentTestReconciler.dependentExecution.add(this.getClass()); return super.reconcile(primary, context); } @Override - protected ConfigMap desired(OrderedManagedDependentCustomResource primary, + protected ConfigMap desired( + OrderedManagedDependentCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); @@ -42,5 +44,4 @@ protected ConfigMap desired(OrderedManagedDependentCustomResource primary, configMap.setData(data); return configMap; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource2.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource2.java index efbd6ec450..aae0fe79b3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource2.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/ConfigMapDependentResource2.java @@ -12,22 +12,24 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; @KubernetesDependent(informer = @Informer(labelSelector = "dependent = cm2")) -public class ConfigMapDependentResource2 extends - CRUDKubernetesDependentResource { +public class ConfigMapDependentResource2 + extends CRUDKubernetesDependentResource { public ConfigMapDependentResource2() { super(ConfigMap.class); } @Override - public ReconcileResult reconcile(OrderedManagedDependentCustomResource primary, + public ReconcileResult reconcile( + OrderedManagedDependentCustomResource primary, Context context) { OrderedManagedDependentTestReconciler.dependentExecution.add(this.getClass()); return super.reconcile(primary, context); } @Override - protected ConfigMap desired(OrderedManagedDependentCustomResource primary, + protected ConfigMap desired( + OrderedManagedDependentCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); @@ -42,5 +44,4 @@ protected ConfigMap desired(OrderedManagedDependentCustomResource primary, configMap.setData(data); return configMap; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentCustomResource.java index b73f92565d..ec3622dd86 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentCustomResource.java @@ -11,7 +11,5 @@ @Version("v1") @Kind("OrderedManagedDependentCustomResource") @ShortNames("omd") -public class OrderedManagedDependentCustomResource - extends CustomResource - implements Namespaced { -} +public class OrderedManagedDependentCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentIT.java index 73ab6e65f6..99c9cb2b7d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentIT.java @@ -14,18 +14,20 @@ class OrderedManagedDependentIT { @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder() - .withReconciler(new OrderedManagedDependentTestReconciler()) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(new OrderedManagedDependentTestReconciler()) + .build(); @Test void managedDependentsAreReconciledInOrder() { operator.create(createTestResource()); - await().pollDelay(Duration.ofSeconds(1)).atMost(Duration.ofSeconds(5)) + await() + .pollDelay(Duration.ofSeconds(1)) + .atMost(Duration.ofSeconds(5)) .until(() -> ((OrderedManagedDependentTestReconciler) operator.getFirstReconciler()) - .getNumberOfExecutions() == 1); + .getNumberOfExecutions() + == 1); assertThat(OrderedManagedDependentTestReconciler.dependentExecution.get(0)) .isEqualTo(ConfigMapDependentResource1.class); @@ -33,12 +35,10 @@ void managedDependentsAreReconciledInOrder() { .isEqualTo(ConfigMapDependentResource2.class); } - private OrderedManagedDependentCustomResource createTestResource() { OrderedManagedDependentCustomResource cr = new OrderedManagedDependentCustomResource(); cr.setMetadata(new ObjectMeta()); cr.getMetadata().setName("test"); return cr; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentTestReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentTestReconciler.java index 4336d940b0..77c3d830c1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentTestReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/orderedmanageddependent/OrderedManagedDependentTestReconciler.java @@ -10,15 +10,14 @@ import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; import io.javaoperatorsdk.operator.support.TestExecutionInfoProvider; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource1.class, name = "cm1"), - @Dependent(type = ConfigMapDependentResource2.class, dependsOn = "cm1") -}) -@ControllerConfiguration( - informer = @Informer(namespaces = Constants.WATCH_CURRENT_NAMESPACE)) +@Workflow( + dependents = { + @Dependent(type = ConfigMapDependentResource1.class, name = "cm1"), + @Dependent(type = ConfigMapDependentResource2.class, dependsOn = "cm1") + }) +@ControllerConfiguration(informer = @Informer(namespaces = Constants.WATCH_CURRENT_NAMESPACE)) public class OrderedManagedDependentTestReconciler - implements Reconciler, - TestExecutionInfoProvider { + implements Reconciler, TestExecutionInfoProvider { private final AtomicInteger numberOfExecutions = new AtomicInteger(0); public static final List> dependentExecution = @@ -35,5 +34,4 @@ public UpdateControl reconcile( public int getNumberOfExecutions() { return numberOfExecutions.get(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/ConfigMapDependentResource.java index a909a3a706..927b87dc8b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/ConfigMapDependentResource.java @@ -8,8 +8,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; public class ConfigMapDependentResource - extends - CRUDNoGCKubernetesDependentResource { + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, WorkflowActivationCleanupCustomResource> { public static final String DATA_KEY = "data"; @@ -18,7 +18,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(WorkflowActivationCleanupCustomResource primary, + protected ConfigMap desired( + WorkflowActivationCleanupCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupCustomResource.java index d98c9cd166..195ac565fd 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupCustomResource.java @@ -10,8 +10,4 @@ @Version("v1") @ShortNames("wacc") public class WorkflowActivationCleanupCustomResource - extends CustomResource - implements Namespaced { - - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupIT.java index f41d15ae27..1899a8ba60 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupIT.java @@ -23,15 +23,15 @@ public class WorkflowActivationCleanupIT { @BeforeEach void beforeEach(TestInfo testInfo) { - LocallyRunOperatorExtension.applyCrd(WorkflowActivationCleanupCustomResource.class, - client); + LocallyRunOperatorExtension.applyCrd(WorkflowActivationCleanupCustomResource.class, client); - testInfo.getTestMethod() + testInfo + .getTestMethod() .ifPresent(method -> testNamespace = KubernetesResourceUtil.sanitizeName(method.getName())); client.namespaces().resource(testNamespace(testNamespace)).create(); operator = new Operator(o -> o.withCloseClientOnStop(false)); - operator.register(new WorkflowActivationCleanupReconciler(), - o -> o.settingNamespaces(testNamespace)); + operator.register( + new WorkflowActivationCleanupReconciler(), o -> o.settingNamespaces(testNamespace)); } @AfterEach @@ -69,9 +69,8 @@ private WorkflowActivationCleanupCustomResource testResourceWithFinalizer() { } private Namespace testNamespace(String name) { - return new NamespaceBuilder().withMetadata(new ObjectMetaBuilder() - .withName(name) - .build()).build(); + return new NamespaceBuilder() + .withMetadata(new ObjectMetaBuilder().withName(name).build()) + .build(); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupReconciler.java index 64a7a28a5c..ea158c9e08 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcleanup/WorkflowActivationCleanupReconciler.java @@ -3,14 +3,16 @@ import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class, - activationCondition = TestActivcationCondition.class), -}) +@Workflow( + dependents = { + @Dependent( + type = ConfigMapDependentResource.class, + activationCondition = TestActivcationCondition.class), + }) @ControllerConfiguration public class WorkflowActivationCleanupReconciler implements Reconciler, - Cleaner { + Cleaner { @Override public UpdateControl reconcile( @@ -21,7 +23,8 @@ public UpdateControl reconcile( } @Override - public DeleteControl cleanup(WorkflowActivationCleanupCustomResource resource, + public DeleteControl cleanup( + WorkflowActivationCleanupCustomResource resource, Context context) { return DeleteControl.defaultDelete(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/ConfigMapDependentResource.java index a5b255b10f..8d71cd24af 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/ConfigMapDependentResource.java @@ -17,7 +17,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(WorkflowActivationConditionCustomResource primary, + protected ConfigMap desired( + WorkflowActivationConditionCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/RouteDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/RouteDependentResource.java index 92fe86d5db..e7efecd56a 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/RouteDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/RouteDependentResource.java @@ -13,7 +13,8 @@ public RouteDependentResource() { } @Override - protected Route desired(WorkflowActivationConditionCustomResource primary, + protected Route desired( + WorkflowActivationConditionCustomResource primary, Context context) { // basically does not matter since this should not be called Route route = new Route(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionCustomResource.java index d04b3c08e0..9c6347f032 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionCustomResource.java @@ -10,8 +10,4 @@ @Version("v1") @ShortNames("wac") public class WorkflowActivationConditionCustomResource - extends CustomResource - implements Namespaced { - - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionIT.java index 355855e6c6..9980f54988 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionIT.java @@ -17,10 +17,9 @@ public class WorkflowActivationConditionIT { public static final String TEST_DATA = "test data"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(WorkflowActivationConditionReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(WorkflowActivationConditionReconciler.class) + .build(); // Without activation condition this would fail / there would be errors. @Test @@ -36,12 +35,9 @@ void reconciledOnVanillaKubernetesDespiteRouteInWorkflow() { private WorkflowActivationConditionCustomResource testResource() { var res = new WorkflowActivationConditionCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(TEST_RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).build()); res.setSpec(new WorkflowActivationConditionSpec()); res.getSpec().setValue(TEST_DATA); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionReconciler.java index 2ac931bcdb..b8bcb210c5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowactivationcondition/WorkflowActivationConditionReconciler.java @@ -3,11 +3,13 @@ import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class), - @Dependent(type = RouteDependentResource.class, - activationCondition = IsOpenShiftCondition.class) -}) +@Workflow( + dependents = { + @Dependent(type = ConfigMapDependentResource.class), + @Dependent( + type = RouteDependentResource.class, + activationCondition = IsOpenShiftCondition.class) + }) @ControllerConfiguration public class WorkflowActivationConditionReconciler implements Reconciler { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDeletePostCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDeletePostCondition.java index c9d9393ce1..687047d0fa 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDeletePostCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDeletePostCondition.java @@ -19,7 +19,8 @@ public boolean isMet( WorkflowAllFeatureCustomResource primary, Context context) { - var configMapDeleted = dependentResource.getSecondaryResource(primary, context).isEmpty(); + var configMapDeleted = + dependentResource.getSecondaryResource(primary, context).isEmpty(); log.debug("Config Map Deleted: {}", configMapDeleted); return configMapDeleted; } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDependentResource.java index 9bee03d474..0e7d0decde 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapDependentResource.java @@ -18,8 +18,8 @@ public class ConfigMapDependentResource extends KubernetesDependentResource implements Creator, - Updater, - Deleter { + Updater, + Deleter { public static final String READY_TO_DELETE_ANNOTATION = "ready-to-delete"; @@ -30,8 +30,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(WorkflowAllFeatureCustomResource primary, - Context context) { + protected ConfigMap desired( + WorkflowAllFeatureCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() .withName(primary.getMetadata().getName()) @@ -42,8 +42,8 @@ protected ConfigMap desired(WorkflowAllFeatureCustomResource primary, } @Override - public void delete(WorkflowAllFeatureCustomResource primary, - Context context) { + public void delete( + WorkflowAllFeatureCustomResource primary, Context context) { Optional optionalConfigMap = context.getSecondaryResource(ConfigMap.class); if (optionalConfigMap.isEmpty()) { log.debug("Config Map not found for primary: {}", ResourceID.fromResource(primary)); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapReconcileCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapReconcileCondition.java index 024e110edb..0854908dd8 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapReconcileCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/ConfigMapReconcileCondition.java @@ -15,7 +15,8 @@ public class ConfigMapReconcileCondition @Override public Result detailedIsMet( DependentResource dependentResource, - WorkflowAllFeatureCustomResource primary, Context context) { + WorkflowAllFeatureCustomResource primary, + Context context) { final var createConfigMap = primary.getSpec().isCreateConfigMap(); return Result.withResult(createConfigMap, createConfigMap ? CREATE_SET : CREATE_NOT_SET); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentDependentResource.java index 5abcf4c28c..96782d0267 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentDependentResource.java @@ -5,19 +5,20 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; -public class DeploymentDependentResource extends - CRUDNoGCKubernetesDependentResource { +public class DeploymentDependentResource + extends CRUDNoGCKubernetesDependentResource { public DeploymentDependentResource() { super(Deployment.class); } @Override - protected Deployment desired(WorkflowAllFeatureCustomResource primary, - Context context) { - Deployment deployment = - ReconcilerUtils.loadYaml(Deployment.class, WorkflowAllFeatureIT.class, - "/io/javaoperatorsdk/operator/nginx-deployment.yaml"); + protected Deployment desired( + WorkflowAllFeatureCustomResource primary, Context context) { + Deployment deployment = ReconcilerUtils.loadYaml( + Deployment.class, + WorkflowAllFeatureIT.class, + "/io/javaoperatorsdk/operator/nginx-deployment.yaml"); deployment.getMetadata().setName(primary.getMetadata().getName()); deployment.getSpec().setReplicas(2); deployment.getMetadata().setNamespace(primary.getMetadata().getNamespace()); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentReadyCondition.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentReadyCondition.java index 5e023a3d9d..281299ad99 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentReadyCondition.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/DeploymentReadyCondition.java @@ -12,7 +12,8 @@ public boolean isMet( DependentResource dependentResource, WorkflowAllFeatureCustomResource primary, Context context) { - return dependentResource.getSecondaryResource(primary, context) + return dependentResource + .getSecondaryResource(primary, context) .map(deployment -> { var readyReplicas = deployment.getStatus().getReadyReplicas(); return readyReplicas != null && deployment.getSpec().getReplicas().equals(readyReplicas); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureCustomResource.java index cc3987710b..4b3a75b10b 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureCustomResource.java @@ -11,8 +11,4 @@ @ShortNames("waf") public class WorkflowAllFeatureCustomResource extends CustomResource - implements Namespaced { - - - -} + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureIT.java index 20e5ea5ae3..ca606c84cd 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureIT.java @@ -21,29 +21,28 @@ public class WorkflowAllFeatureIT { private static final Duration ONE_MINUTE = Duration.ofMinutes(1); @RegisterExtension - LocallyRunOperatorExtension operator = - LocallyRunOperatorExtension.builder().withReconciler(WorkflowAllFeatureReconciler.class) - .build(); + LocallyRunOperatorExtension operator = LocallyRunOperatorExtension.builder() + .withReconciler(WorkflowAllFeatureReconciler.class) + .build(); @Test void configMapNotReconciledUntilDeploymentReady() { operator.create(customResource(true)); - await().untilAsserted( - () -> { - assertThat(operator + await().untilAsserted(() -> { + assertThat(operator .getReconcilerOfType(WorkflowAllFeatureReconciler.class) .getNumberOfReconciliationExecution()) - .isPositive(); - assertThat(operator.get(Deployment.class, RESOURCE_NAME)).isNotNull(); - assertThat(operator.get(ConfigMap.class, RESOURCE_NAME)).isNull(); - assertThat(getPrimaryStatus().getMsgFromCondition()) - .isEqualTo(ConfigMapReconcileCondition.NOT_RECONCILED_YET); - }); + .isPositive(); + assertThat(operator.get(Deployment.class, RESOURCE_NAME)).isNotNull(); + assertThat(operator.get(ConfigMap.class, RESOURCE_NAME)).isNull(); + assertThat(getPrimaryStatus().getMsgFromCondition()) + .isEqualTo(ConfigMapReconcileCondition.NOT_RECONCILED_YET); + }); await().atMost(ONE_MINUTE).untilAsserted(() -> { assertThat(operator - .getReconcilerOfType(WorkflowAllFeatureReconciler.class) - .getNumberOfReconciliationExecution()) + .getReconcilerOfType(WorkflowAllFeatureReconciler.class) + .getNumberOfReconciliationExecution()) .isGreaterThan(1); assertThat(operator.get(ConfigMap.class, RESOURCE_NAME)).isNotNull(); final var primaryStatus = getPrimaryStatus(); @@ -56,11 +55,9 @@ void configMapNotReconciledUntilDeploymentReady() { } private WorkflowAllFeatureStatus getPrimaryStatus() { - return operator.get(WorkflowAllFeatureCustomResource.class, RESOURCE_NAME) - .getStatus(); + return operator.get(WorkflowAllFeatureCustomResource.class, RESOURCE_NAME).getStatus(); } - @Test void configMapNotReconciledIfReconcileConditionNotMet() { var resource = operator.create(customResource(false)); @@ -79,14 +76,12 @@ void configMapNotReconciledIfReconcileConditionNotMet() { }); } - @Test void configMapNotDeletedUntilNotMarked() { var resource = operator.create(customResource(true)); await().atMost(ONE_MINUTE).untilAsserted(() -> { - assertThat(getPrimaryStatus()) - .isNotNull(); + assertThat(getPrimaryStatus()).isNotNull(); assertThat(getPrimaryStatus().getReady()).isTrue(); assertThat(operator.get(ConfigMap.class, RESOURCE_NAME)).isNotNull(); }); @@ -95,14 +90,16 @@ void configMapNotDeletedUntilNotMarked() { await().pollDelay(Duration.ofMillis(300)).untilAsserted(() -> { assertThat(operator.get(ConfigMap.class, RESOURCE_NAME)).isNotNull(); - assertThat(operator.get(WorkflowAllFeatureCustomResource.class, RESOURCE_NAME)).isNotNull(); + assertThat(operator.get(WorkflowAllFeatureCustomResource.class, RESOURCE_NAME)) + .isNotNull(); }); markConfigMapForDelete(); await().atMost(ONE_MINUTE).untilAsserted(() -> { assertThat(operator.get(ConfigMap.class, RESOURCE_NAME)).isNull(); - assertThat(operator.get(WorkflowAllFeatureCustomResource.class, RESOURCE_NAME)).isNull(); + assertThat(operator.get(WorkflowAllFeatureCustomResource.class, RESOURCE_NAME)) + .isNull(); }); } @@ -117,12 +114,9 @@ private void markConfigMapForDelete() { private WorkflowAllFeatureCustomResource customResource(boolean createConfigMap) { var res = new WorkflowAllFeatureCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); res.setSpec(new WorkflowAllFeatureSpec()); res.getSpec().setCreateConfigMap(createConfigMap); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureReconciler.java index fb8b0b4a3d..487ac152e3 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowallfeature/WorkflowAllFeatureReconciler.java @@ -15,18 +15,22 @@ import static io.javaoperatorsdk.operator.workflow.workflowallfeature.WorkflowAllFeatureReconciler.DEPLOYMENT_NAME; -@Workflow(dependents = { - @Dependent(name = DEPLOYMENT_NAME, type = DeploymentDependentResource.class, - readyPostcondition = DeploymentReadyCondition.class), - @Dependent(type = ConfigMapDependentResource.class, - reconcilePrecondition = ConfigMapReconcileCondition.class, - deletePostcondition = ConfigMapDeletePostCondition.class, - dependsOn = DEPLOYMENT_NAME) -}) +@Workflow( + dependents = { + @Dependent( + name = DEPLOYMENT_NAME, + type = DeploymentDependentResource.class, + readyPostcondition = DeploymentReadyCondition.class), + @Dependent( + type = ConfigMapDependentResource.class, + reconcilePrecondition = ConfigMapReconcileCondition.class, + deletePostcondition = ConfigMapDeletePostCondition.class, + dependsOn = DEPLOYMENT_NAME) + }) @ControllerConfiguration public class WorkflowAllFeatureReconciler implements Reconciler, - Cleaner { + Cleaner { public static final String DEPLOYMENT_NAME = "deployment"; @@ -41,13 +45,17 @@ public UpdateControl reconcile( if (resource.getStatus() == null) { resource.setStatus(new WorkflowAllFeatureStatus()); } - final var reconcileResult = context.managedWorkflowAndDependentResourceContext() - .getWorkflowReconcileResult(); - final var msgFromCondition = reconcileResult.orElseThrow().getDependentConditionResult( - DependentResource.defaultNameFor(ConfigMapDependentResource.class), - Condition.Type.RECONCILE, String.class) + final var reconcileResult = + context.managedWorkflowAndDependentResourceContext().getWorkflowReconcileResult(); + final var msgFromCondition = reconcileResult + .orElseThrow() + .getDependentConditionResult( + DependentResource.defaultNameFor(ConfigMapDependentResource.class), + Condition.Type.RECONCILE, + String.class) .orElse(ConfigMapReconcileCondition.NOT_RECONCILED_YET); - resource.getStatus() + resource + .getStatus() .withReady(reconcileResult.orElseThrow().allDependentResourcesReady()) .withMsgFromCondition(msgFromCondition); return UpdateControl.patchStatus(resource); @@ -62,7 +70,8 @@ public int getNumberOfCleanupExecution() { } @Override - public DeleteControl cleanup(WorkflowAllFeatureCustomResource resource, + public DeleteControl cleanup( + WorkflowAllFeatureCustomResource resource, Context context) { numberOfCleanupExecution.addAndGet(1); return DeleteControl.defaultDelete(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/ConfigMapDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/ConfigMapDependent.java index 228ed39564..62908926db 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/ConfigMapDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/ConfigMapDependent.java @@ -8,15 +8,16 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; -public class ConfigMapDependent extends - CRUDNoGCKubernetesDependentResource { +public class ConfigMapDependent + extends CRUDNoGCKubernetesDependentResource { public ConfigMapDependent() { super(ConfigMap.class); } @Override - protected ConfigMap desired(WorkflowExplicitCleanupCustomResource primary, + protected ConfigMap desired( + WorkflowExplicitCleanupCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupCustomResource.java index 14ae6011a9..8622421db9 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("wec") -public class WorkflowExplicitCleanupCustomResource - extends CustomResource - implements Namespaced { -} +public class WorkflowExplicitCleanupCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupIT.java index e6a5b7a3cc..c29390d7fc 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupIT.java @@ -15,10 +15,9 @@ public class WorkflowExplicitCleanupIT { public static final String RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(WorkflowExplicitCleanupReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(WorkflowExplicitCleanupReconciler.class) + .build(); @Test void workflowInvokedExplicitly() { @@ -39,10 +38,7 @@ void workflowInvokedExplicitly() { WorkflowExplicitCleanupCustomResource testResource() { var res = new WorkflowExplicitCleanupCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupReconciler.java index 4361b5ac47..1dac660839 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitcleanup/WorkflowExplicitCleanupReconciler.java @@ -3,12 +3,11 @@ import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(explicitInvocation = true, - dependents = @Dependent(type = ConfigMapDependent.class)) +@Workflow(explicitInvocation = true, dependents = @Dependent(type = ConfigMapDependent.class)) @ControllerConfiguration public class WorkflowExplicitCleanupReconciler implements Reconciler, - Cleaner { + Cleaner { @Override public UpdateControl reconcile( @@ -21,7 +20,8 @@ public UpdateControl reconcile( } @Override - public DeleteControl cleanup(WorkflowExplicitCleanupCustomResource resource, + public DeleteControl cleanup( + WorkflowExplicitCleanupCustomResource resource, Context context) { context.managedWorkflowAndDependentResourceContext().cleanupManageWorkflow(); diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/ConfigMapDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/ConfigMapDependent.java index 1632de5bbd..ecfc0912f5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/ConfigMapDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/ConfigMapDependent.java @@ -8,15 +8,17 @@ import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; -public class ConfigMapDependent extends - CRUDNoGCKubernetesDependentResource { +public class ConfigMapDependent + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, WorkflowExplicitInvocationCustomResource> { public ConfigMapDependent() { super(ConfigMap.class); } @Override - protected ConfigMap desired(WorkflowExplicitInvocationCustomResource primary, + protected ConfigMap desired( + WorkflowExplicitInvocationCustomResource primary, Context context) { return new ConfigMapBuilder() .withMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationCustomResource.java index c64964b02b..e625fa21d5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationCustomResource.java @@ -10,6 +10,4 @@ @Version("v1") @ShortNames("wei") public class WorkflowExplicitInvocationCustomResource - extends CustomResource - implements Namespaced { -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationIT.java index ba77057acc..9cf64a4473 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationIT.java @@ -17,10 +17,9 @@ public class WorkflowExplicitInvocationIT { public static final String RESOURCE_NAME = "test1"; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(WorkflowExplicitInvocationReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(WorkflowExplicitInvocationReconciler.class) + .build(); @Test void workflowInvokedExplicitly() { @@ -54,12 +53,9 @@ void workflowInvokedExplicitly() { WorkflowExplicitInvocationCustomResource testResource() { var res = new WorkflowExplicitInvocationCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(RESOURCE_NAME) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(RESOURCE_NAME).build()); res.setSpec(new WorkflowExplicitInvocationSpec()); res.getSpec().setValue("initial value"); return res; } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationReconciler.java index 4ac64b4cf8..99249326f5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowexplicitinvocation/WorkflowExplicitInvocationReconciler.java @@ -5,8 +5,7 @@ import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(explicitInvocation = true, - dependents = @Dependent(type = ConfigMapDependent.class)) +@Workflow(explicitInvocation = true, dependents = @Dependent(type = ConfigMapDependent.class)) @ControllerConfiguration public class WorkflowExplicitInvocationReconciler implements Reconciler { @@ -25,7 +24,6 @@ public UpdateControl reconcile( context.managedWorkflowAndDependentResourceContext().reconcileManagedWorkflow(); } - return UpdateControl.noUpdate(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/ConfigMapDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/ConfigMapDependentResource.java index 82d8d9c236..4711d4ce87 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/ConfigMapDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/ConfigMapDependentResource.java @@ -8,8 +8,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; public class ConfigMapDependentResource - extends - CRUDNoGCKubernetesDependentResource { + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, WorkflowMultipleActivationCustomResource> { public static final String DATA_KEY = "data"; @@ -18,7 +18,8 @@ public ConfigMapDependentResource() { } @Override - protected ConfigMap desired(WorkflowMultipleActivationCustomResource primary, + protected ConfigMap desired( + WorkflowMultipleActivationCustomResource primary, Context context) { ConfigMap configMap = new ConfigMap(); configMap.setMetadata(new ObjectMetaBuilder() diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/SecretDependentResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/SecretDependentResource.java index 872a5b5770..1cd9466353 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/SecretDependentResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/SecretDependentResource.java @@ -16,7 +16,8 @@ public SecretDependentResource() { } @Override - protected Secret desired(WorkflowMultipleActivationCustomResource primary, + protected Secret desired( + WorkflowMultipleActivationCustomResource primary, Context context) { // basically does not matter since this should not be called Secret secret = new Secret(); @@ -24,8 +25,8 @@ protected Secret desired(WorkflowMultipleActivationCustomResource primary, .withName(primary.getMetadata().getName()) .withNamespace(primary.getMetadata().getNamespace()) .build()); - secret.setData(Map.of("data", - Base64.getEncoder().encodeToString(primary.getSpec().getValue().getBytes()))); + secret.setData(Map.of( + "data", Base64.getEncoder().encodeToString(primary.getSpec().getValue().getBytes()))); return secret; } } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationCustomResource.java index faf442b849..4951108ff5 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationCustomResource.java @@ -10,8 +10,4 @@ @Version("v1") @ShortNames("mwac") public class WorkflowMultipleActivationCustomResource - extends CustomResource - implements Namespaced { - - -} + extends CustomResource implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationIT.java index e793e9cb19..095d951a02 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationIT.java @@ -23,10 +23,9 @@ public class WorkflowMultipleActivationIT { public static final int POLL_DELAY = 300; @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(WorkflowMultipleActivationReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(WorkflowMultipleActivationReconciler.class) + .build(); @Test void deactivatingAndReactivatingDependent() { @@ -79,17 +78,19 @@ void deactivatingAndReactivatingDependent() { assertThat(cm.getData()).containsEntry(DATA_KEY, CHANGED_VALUE); }); - var numOfReconciliation = - extension.getReconcilerOfType(WorkflowMultipleActivationReconciler.class) - .getNumberOfReconciliationExecution(); + var numOfReconciliation = extension + .getReconcilerOfType(WorkflowMultipleActivationReconciler.class) + .getNumberOfReconciliationExecution(); var actualCM = extension.get(ConfigMap.class, TEST_RESOURCE1); actualCM.getData().put("data2", "additionaldata"); extension.replace(actualCM); await().pollDelay(Duration.ofMillis(POLL_DELAY)).untilAsserted(() -> { // change in config map does not induce reconciliation if inactive (thus informer is not // present) - assertThat(extension.getReconcilerOfType(WorkflowMultipleActivationReconciler.class) - .getNumberOfReconciliationExecution()).isEqualTo(numOfReconciliation); + assertThat(extension + .getReconcilerOfType(WorkflowMultipleActivationReconciler.class) + .getNumberOfReconciliationExecution()) + .isEqualTo(numOfReconciliation); }); extension.delete(cr1); @@ -101,9 +102,7 @@ void deactivatingAndReactivatingDependent() { WorkflowMultipleActivationCustomResource testResource(String name) { var res = new WorkflowMultipleActivationCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName(name) - .build()); + res.setMetadata(new ObjectMetaBuilder().withName(name).build()); res.setSpec(new WorkflowMultipleActivationSpec()); res.getSpec().setValue(INITIAL_DATA); return res; @@ -132,5 +131,4 @@ void simpleConcurrencyTest() { assertThat(cm2.getData()).containsEntry(DATA_KEY, INITIAL_DATA); }); } - } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationReconciler.java index 6018fb7112..460638024f 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowmultipleactivation/WorkflowMultipleActivationReconciler.java @@ -5,11 +5,13 @@ import io.javaoperatorsdk.operator.api.reconciler.*; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class, - activationCondition = ActivationCondition.class), - @Dependent(type = SecretDependentResource.class) -}) +@Workflow( + dependents = { + @Dependent( + type = ConfigMapDependentResource.class, + activationCondition = ActivationCondition.class), + @Dependent(type = SecretDependentResource.class) + }) @ControllerConfiguration public class WorkflowMultipleActivationReconciler implements Reconciler { diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/ConfigMapDependent.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/ConfigMapDependent.java index fcd817c4f7..bd8d4099ff 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/ConfigMapDependent.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/ConfigMapDependent.java @@ -1,13 +1,13 @@ package io.javaoperatorsdk.operator.workflow.workflowsilentexceptionhandling; - import io.fabric8.kubernetes.api.model.ConfigMap; import io.javaoperatorsdk.operator.api.reconciler.Context; import io.javaoperatorsdk.operator.api.reconciler.dependent.ReconcileResult; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDNoGCKubernetesDependentResource; -public class ConfigMapDependent extends - CRUDNoGCKubernetesDependentResource { +public class ConfigMapDependent + extends CRUDNoGCKubernetesDependentResource< + ConfigMap, HandleWorkflowExceptionsInReconcilerCustomResource> { public ConfigMapDependent() { super(ConfigMap.class); @@ -21,7 +21,8 @@ public ReconcileResult reconcile( } @Override - public void delete(HandleWorkflowExceptionsInReconcilerCustomResource primary, + public void delete( + HandleWorkflowExceptionsInReconcilerCustomResource primary, Context context) { throw new RuntimeException("Exception thrown on purpose"); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerCustomResource.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerCustomResource.java index db5e94e40b..e05f73cc6d 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerCustomResource.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerCustomResource.java @@ -9,7 +9,5 @@ @Group("sample.javaoperatorsdk") @Version("v1") @ShortNames("hweir") -public class HandleWorkflowExceptionsInReconcilerCustomResource - extends CustomResource - implements Namespaced { -} +public class HandleWorkflowExceptionsInReconcilerCustomResource extends CustomResource + implements Namespaced {} diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerReconciler.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerReconciler.java index 304c0d73ec..a33ac39ae1 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerReconciler.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/HandleWorkflowExceptionsInReconcilerReconciler.java @@ -9,12 +9,13 @@ import io.javaoperatorsdk.operator.api.reconciler.Workflow; import io.javaoperatorsdk.operator.api.reconciler.dependent.Dependent; -@Workflow(handleExceptionsInReconciler = true, +@Workflow( + handleExceptionsInReconciler = true, dependents = @Dependent(type = ConfigMapDependent.class)) @ControllerConfiguration public class HandleWorkflowExceptionsInReconcilerReconciler implements Reconciler, - Cleaner { + Cleaner { private volatile boolean errorsFoundInReconcilerResult = false; private volatile boolean errorsFoundInCleanupResult = false; @@ -24,19 +25,25 @@ public UpdateControl reconci HandleWorkflowExceptionsInReconcilerCustomResource resource, Context context) { - errorsFoundInReconcilerResult = context.managedWorkflowAndDependentResourceContext() - .getWorkflowReconcileResult().orElseThrow().erroredDependentsExist(); - + errorsFoundInReconcilerResult = context + .managedWorkflowAndDependentResourceContext() + .getWorkflowReconcileResult() + .orElseThrow() + .erroredDependentsExist(); return UpdateControl.noUpdate(); } @Override - public DeleteControl cleanup(HandleWorkflowExceptionsInReconcilerCustomResource resource, + public DeleteControl cleanup( + HandleWorkflowExceptionsInReconcilerCustomResource resource, Context context) { - errorsFoundInCleanupResult = context.managedWorkflowAndDependentResourceContext() - .getWorkflowCleanupResult().orElseThrow().erroredDependentsExist(); + errorsFoundInCleanupResult = context + .managedWorkflowAndDependentResourceContext() + .getWorkflowCleanupResult() + .orElseThrow() + .erroredDependentsExist(); return DeleteControl.defaultDelete(); } diff --git a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/WorkflowSilentExceptionHandlingIT.java b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/WorkflowSilentExceptionHandlingIT.java index b23fee2d20..7036a35514 100644 --- a/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/WorkflowSilentExceptionHandlingIT.java +++ b/operator-framework/src/test/java/io/javaoperatorsdk/operator/workflow/workflowsilentexceptionhandling/WorkflowSilentExceptionHandlingIT.java @@ -12,10 +12,9 @@ public class WorkflowSilentExceptionHandlingIT { @RegisterExtension - LocallyRunOperatorExtension extension = - LocallyRunOperatorExtension.builder() - .withReconciler(HandleWorkflowExceptionsInReconcilerReconciler.class) - .build(); + LocallyRunOperatorExtension extension = LocallyRunOperatorExtension.builder() + .withReconciler(HandleWorkflowExceptionsInReconcilerReconciler.class) + .build(); @Test void handleExceptionsInReconciler() { @@ -36,10 +35,7 @@ void handleExceptionsInReconciler() { HandleWorkflowExceptionsInReconcilerCustomResource testResource() { var res = new HandleWorkflowExceptionsInReconcilerCustomResource(); - res.setMetadata(new ObjectMetaBuilder() - .withName("test1") - .build()); + res.setMetadata(new ObjectMetaBuilder().withName("test1").build()); return res; } - } diff --git a/pom.xml b/pom.xml index 7cd433671b..52f2301403 100644 --- a/pom.xml +++ b/pom.xml @@ -327,53 +327,42 @@ WatchPermissionAwareTest + + com.diffplug.spotless + spotless-maven-plugin + + + + pom.xml + ./**/pom.xml + + + false + + + + + + false + + + java,javax,org,io,com,,\# + + + + + + + + apply + + compile + + + - - spotless - - - contributing - - - - - - com.diffplug.spotless - spotless-maven-plugin - - - - pom.xml - ./**/pom.xml - - - false - - - - - contributing/eclipse-google-style.xml - - - contributing/eclipse.importorder - - - - - - - - apply - - compile - - - - - - integration-tests diff --git a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionCustomResource.java b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionCustomResource.java index ae0f1034ee..59bb0eb8b9 100644 --- a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionCustomResource.java +++ b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionCustomResource.java @@ -9,6 +9,4 @@ @Version("v1") public class ControllerNamespaceDeletionCustomResource extends CustomResource - implements Namespaced { - -} + implements Namespaced {} diff --git a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionOperator.java b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionOperator.java index 5364852467..4f8ee460b1 100644 --- a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionOperator.java +++ b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionOperator.java @@ -25,7 +25,8 @@ public static void main(String[] args) { })); Operator operator = new Operator(); - operator.register(new ControllerNamespaceDeletionReconciler(), + operator.register( + new ControllerNamespaceDeletionReconciler(), ControllerConfigurationOverrider::watchingOnlyCurrentNamespace); operator.start(); } @@ -34,10 +35,11 @@ private static boolean waitUntilResourcesDeleted() { try (var client = new KubernetesClientBuilder().build()) { var startTime = LocalTime.now(); while (startTime.until(LocalTime.now(), SECONDS) < 20) { - var items = - client.resources(ControllerNamespaceDeletionCustomResource.class) - .inNamespace(client.getConfiguration().getNamespace()) - .list().getItems(); + var items = client + .resources(ControllerNamespaceDeletionCustomResource.class) + .inNamespace(client.getConfiguration().getNamespace()) + .list() + .getItems(); log.info("Custom resource in namespace: {}", items); if (items.isEmpty()) { return true; diff --git a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionReconciler.java b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionReconciler.java index 7261f269b4..d50a5d04fd 100644 --- a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionReconciler.java +++ b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionReconciler.java @@ -14,7 +14,7 @@ public class ControllerNamespaceDeletionReconciler implements Reconciler, - Cleaner { + Cleaner { private static final Logger log = LoggerFactory.getLogger(ControllerNamespaceDeletionReconciler.class); @@ -25,7 +25,9 @@ public class ControllerNamespaceDeletionReconciler public UpdateControl reconcile( ControllerNamespaceDeletionCustomResource resource, Context context) { - log.info("Reconciling: {} in namespace: {}", resource.getMetadata().getName(), + log.info( + "Reconciling: {} in namespace: {}", + resource.getMetadata().getName(), resource.getMetadata().getNamespace()); var response = createResponseResource(resource); @@ -46,7 +48,8 @@ private ControllerNamespaceDeletionCustomResource createResponseResource( } @Override - public DeleteControl cleanup(ControllerNamespaceDeletionCustomResource resource, + public DeleteControl cleanup( + ControllerNamespaceDeletionCustomResource resource, Context context) { log.info("Cleaning up resource"); try { diff --git a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionSpec.java b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionSpec.java index dc5092e7e5..0107449eb8 100644 --- a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionSpec.java +++ b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionSpec.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.sample; - public class ControllerNamespaceDeletionSpec { private String value; diff --git a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionStatus.java b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionStatus.java index 732fa7d626..36db2f33c4 100644 --- a/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionStatus.java +++ b/sample-operators/controller-namespace-deletion/src/main/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionStatus.java @@ -1,6 +1,5 @@ package io.javaoperatorsdk.operator.sample; - public class ControllerNamespaceDeletionStatus { private String value; diff --git a/sample-operators/controller-namespace-deletion/src/test/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionE2E.java b/sample-operators/controller-namespace-deletion/src/test/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionE2E.java index 36c7f132ab..6ede33ff25 100644 --- a/sample-operators/controller-namespace-deletion/src/test/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionE2E.java +++ b/sample-operators/controller-namespace-deletion/src/test/java/io/javaoperatorsdk/operator/sample/ControllerNamespaceDeletionE2E.java @@ -26,7 +26,6 @@ import static org.assertj.core.api.Assertions.assertThat; import static org.awaitility.Awaitility.await; - class ControllerNamespaceDeletionE2E { private static final Logger log = LoggerFactory.getLogger(ControllerNamespaceDeletionE2E.class); @@ -47,8 +46,11 @@ void customResourceCleanedUpOnNamespaceDeletion() { client.resource(testResource()).serverSideApply(); await().untilAsserted(() -> { - var res = client.resources(ControllerNamespaceDeletionCustomResource.class) - .inNamespace(namespace).withName(TEST_RESOURCE_NAME).get(); + var res = client + .resources(ControllerNamespaceDeletionCustomResource.class) + .inNamespace(namespace) + .withName(TEST_RESOURCE_NAME) + .get(); assertThat(res.getStatus()).isNotNull(); assertThat(res.getStatus().getValue()).isEqualTo(INITIAL_VALUE); }); @@ -56,8 +58,11 @@ void customResourceCleanedUpOnNamespaceDeletion() { client.namespaces().withName(namespace).delete(); await().timeout(Duration.ofSeconds(20)).untilAsserted(() -> { - var ns = client.resources(ControllerNamespaceDeletionCustomResource.class) - .inNamespace(namespace).withName(TEST_RESOURCE_NAME).get(); + var ns = client + .resources(ControllerNamespaceDeletionCustomResource.class) + .inNamespace(namespace) + .withName(TEST_RESOURCE_NAME) + .get(); assertThat(ns).isNull(); }); @@ -71,16 +76,22 @@ void customResourceCleanedUpOnNamespaceDeletion() { } private void removeRoleAndRoleBindingFinalizers() { - var rolebinding = - client.rbac().roleBindings().inNamespace(namespace).withName(RESOURCE_NAME).get(); + var rolebinding = client + .rbac() + .roleBindings() + .inNamespace(namespace) + .withName(RESOURCE_NAME) + .get(); rolebinding.getFinalizers().clear(); client.resource(rolebinding).update(); - var role = client.rbac().roles().inNamespace(namespace).withName(RESOURCE_NAME).get(); + var role = + client.rbac().roles().inNamespace(namespace).withName(RESOURCE_NAME).get(); role.getFinalizers().clear(); client.resource(role).update(); - var sa = client.serviceAccounts().inNamespace(namespace).withName(RESOURCE_NAME).get(); + var sa = + client.serviceAccounts().inNamespace(namespace).withName(RESOURCE_NAME).get(); sa.getMetadata().getFinalizers().clear(); client.resource(sa).update(); } @@ -96,21 +107,27 @@ ControllerNamespaceDeletionCustomResource testResource() { return cr; } - @BeforeEach void setup() { namespace = "controller-namespace-" + UUID.randomUUID(); - client = new KubernetesClientBuilder().withConfig(new ConfigBuilder() - .withNamespace(namespace) - .build()).build(); + client = new KubernetesClientBuilder() + .withConfig(new ConfigBuilder().withNamespace(namespace).build()) + .build(); applyCRD(); - client.namespaces().resource(new NamespaceBuilder().withNewMetadata().withName(namespace) - .endMetadata().build()).create(); + client + .namespaces() + .resource(new NamespaceBuilder() + .withNewMetadata() + .withName(namespace) + .endMetadata() + .build()) + .create(); } void deployController() { try { - List resources = client.load(new FileInputStream("k8s/operator.yaml")).items(); + List resources = + client.load(new FileInputStream("k8s/operator.yaml")).items(); resources.forEach(hm -> { hm.getMetadata().setNamespace(namespace); if (hm.getKind().equalsIgnoreCase("rolebinding")) { @@ -120,9 +137,7 @@ void deployController() { } } }); - client.resourceList(resources) - .inNamespace(namespace) - .createOrReplace(); + client.resourceList(resources).inNamespace(namespace).createOrReplace(); } catch (FileNotFoundException e) { throw new RuntimeException(e); diff --git a/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestOperator.java b/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestOperator.java index 359272e0ef..c723da9cac 100644 --- a/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestOperator.java +++ b/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestOperator.java @@ -16,10 +16,9 @@ public static void main(String[] args) { log.info("Starting operator with identity: {}", identity); - LeaderElectionConfiguration leaderElectionConfiguration = - namespace == null - ? new LeaderElectionConfiguration("leader-election-test") - : new LeaderElectionConfiguration("leader-election-test", namespace, identity); + LeaderElectionConfiguration leaderElectionConfiguration = namespace == null + ? new LeaderElectionConfiguration("leader-election-test") + : new LeaderElectionConfiguration("leader-election-test", namespace, identity); Operator operator = new Operator(c -> c.withLeaderElectionConfiguration(leaderElectionConfiguration)); diff --git a/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestReconciler.java b/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestReconciler.java index 1e54ddd915..5f8d0aa911 100644 --- a/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestReconciler.java +++ b/sample-operators/leader-election/src/main/java/io/javaoperatorsdk/operator/sample/LeaderElectionTestReconciler.java @@ -11,8 +11,7 @@ import io.javaoperatorsdk.operator.sample.v1.LeaderElectionStatus; @ControllerConfiguration() -public class LeaderElectionTestReconciler - implements Reconciler { +public class LeaderElectionTestReconciler implements Reconciler { private final String reconcilerName; @@ -22,8 +21,7 @@ public LeaderElectionTestReconciler(String reconcilerName) { @Override public UpdateControl reconcile( - LeaderElection resource, - Context context) { + LeaderElection resource, Context context) { if (resource.getStatus() == null) { resource.setStatus(new LeaderElectionStatus()); @@ -36,5 +34,4 @@ public UpdateControl reconcile( // update status is with optimistic locking return UpdateControl.patchStatus(resource).rescheduleAfter(Duration.ofSeconds(1)); } - } diff --git a/sample-operators/leader-election/src/test/java/io/javaoperatorsdk/operator/sample/LeaderElectionE2E.java b/sample-operators/leader-election/src/test/java/io/javaoperatorsdk/operator/sample/LeaderElectionE2E.java index dd6f4bc244..8c81fbc4af 100644 --- a/sample-operators/leader-election/src/test/java/io/javaoperatorsdk/operator/sample/LeaderElectionE2E.java +++ b/sample-operators/leader-election/src/test/java/io/javaoperatorsdk/operator/sample/LeaderElectionE2E.java @@ -59,11 +59,16 @@ void otherInstancesTakesOverWhenSteppingDown(String yamlFilePrefix) { deployOperatorsInOrder(yamlFilePrefix); log.info("Awaiting custom resource reconciliations"); - await().pollDelay(Duration.ofSeconds(MINIMAL_SECONDS_FOR_RENEWAL)) + await() + .pollDelay(Duration.ofSeconds(MINIMAL_SECONDS_FOR_RENEWAL)) .atMost(Duration.ofSeconds(MAX_WAIT_SECONDS)) .untilAsserted(() -> { - var actualStatus = client.resources(LeaderElection.class) - .inNamespace(namespace).withName(TEST_RESOURCE_NAME).get().getStatus(); + var actualStatus = client + .resources(LeaderElection.class) + .inNamespace(namespace) + .withName(TEST_RESOURCE_NAME) + .get() + .getStatus(); assertThat(actualStatus).isNotNull(); assertThat(actualStatus.getReconciledBy()) @@ -72,24 +77,38 @@ void otherInstancesTakesOverWhenSteppingDown(String yamlFilePrefix) { client.pods().inNamespace(namespace).withName(OPERATOR_1_POD_NAME).delete(); - var actualListSize = client.resources(LeaderElection.class) - .inNamespace(namespace).withName(TEST_RESOURCE_NAME).get().getStatus().getReconciledBy() + var actualListSize = client + .resources(LeaderElection.class) + .inNamespace(namespace) + .withName(TEST_RESOURCE_NAME) + .get() + .getStatus() + .getReconciledBy() .size(); - await().pollDelay(Duration.ofSeconds(MINIMAL_SECONDS_FOR_RENEWAL)) + await() + .pollDelay(Duration.ofSeconds(MINIMAL_SECONDS_FOR_RENEWAL)) .atMost(Duration.ofSeconds(240)) .untilAsserted(() -> { - var actualStatus = client.resources(LeaderElection.class) - .inNamespace(namespace).withName(TEST_RESOURCE_NAME).get().getStatus(); + var actualStatus = client + .resources(LeaderElection.class) + .inNamespace(namespace) + .withName(TEST_RESOURCE_NAME) + .get() + .getStatus(); assertThat(actualStatus).isNotNull(); assertThat(actualStatus.getReconciledBy()) .hasSizeGreaterThan(actualListSize + MINIMAL_EXPECTED_RECONCILIATION); }); - assertReconciliations( - client.resources(LeaderElection.class).inNamespace(namespace) - .withName(TEST_RESOURCE_NAME).get().getStatus().getReconciledBy()); + assertReconciliations(client + .resources(LeaderElection.class) + .inNamespace(namespace) + .withName(TEST_RESOURCE_NAME) + .get() + .getStatus() + .getReconciledBy()); } private void assertReconciliations(List reconciledBy) { @@ -116,28 +135,41 @@ private void applyCustomResource() { @BeforeEach void setup() { namespace = "leader-election-it-" + UUID.randomUUID(); - client = new KubernetesClientBuilder().withConfig(new ConfigBuilder() - .withNamespace(namespace) - .build()).build(); + client = new KubernetesClientBuilder() + .withConfig(new ConfigBuilder().withNamespace(namespace).build()) + .build(); applyCRD(); - client.namespaces().resource(new NamespaceBuilder().withNewMetadata().withName(namespace) - .endMetadata().build()).create(); + client + .namespaces() + .resource(new NamespaceBuilder() + .withNewMetadata() + .withName(namespace) + .endMetadata() + .build()) + .create(); } @AfterEach void tearDown() { - client.namespaces().resource(new NamespaceBuilder().withNewMetadata().withName(namespace) - .endMetadata().build()).delete(); - await() - .atMost(Duration.ofSeconds(60)) - .untilAsserted(() -> assertThat(client.namespaces().withName(namespace).get()).isNull()); + client + .namespaces() + .resource(new NamespaceBuilder() + .withNewMetadata() + .withName(namespace) + .endMetadata() + .build()) + .delete(); + await().atMost(Duration.ofSeconds(60)).untilAsserted(() -> assertThat( + client.namespaces().withName(namespace).get()) + .isNull()); } private void deployOperatorsInOrder(String yamlFilePrefix) { log.info("Installing 1st instance"); applyResources("k8s/" + yamlFilePrefix + "operator.yaml"); await().atMost(Duration.ofSeconds(POD_STARTUP_TIMEOUT)).untilAsserted(() -> { - var pod = client.pods().inNamespace(namespace).withName(OPERATOR_1_POD_NAME).get(); + var pod = + client.pods().inNamespace(namespace).withName(OPERATOR_1_POD_NAME).get(); assertThat(pod.getStatus().getContainerStatuses()).isNotEmpty(); assertThat(pod.getStatus().getContainerStatuses().get(0).getReady()).isTrue(); }); @@ -145,15 +177,15 @@ private void deployOperatorsInOrder(String yamlFilePrefix) { log.info("Installing 2nd instance"); applyResources("k8s/" + yamlFilePrefix + "operator-instance-2.yaml"); await().atMost(Duration.ofSeconds(POD_STARTUP_TIMEOUT)).untilAsserted(() -> { - var pod = client.pods().inNamespace(namespace).withName(OPERATOR_2_POD_NAME).get(); + var pod = + client.pods().inNamespace(namespace).withName(OPERATOR_2_POD_NAME).get(); assertThat(pod.getStatus().getContainerStatuses()).isNotEmpty(); assertThat(pod.getStatus().getContainerStatuses().get(0).getReady()).isTrue(); }); } void applyCRD() { - String path = - "./src/main/resources/kubernetes/leaderelections.sample.javaoperatorsdk-v1.yml"; + String path = "./src/main/resources/kubernetes/leaderelections.sample.javaoperatorsdk-v1.yml"; try (InputStream is = new FileInputStream(path)) { final var crd = client.load(is); crd.createOrReplace(); @@ -176,9 +208,7 @@ void applyResources(String path) { } } }); - client.resourceList(resources) - .inNamespace(namespace) - .createOrReplace(); + client.resourceList(resources).inNamespace(namespace).createOrReplace(); } catch (FileNotFoundException e) { throw new RuntimeException(e); diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLDbConfig.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLDbConfig.java index 0f63cc846a..6f409720fe 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLDbConfig.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLDbConfig.java @@ -17,11 +17,14 @@ public MySQLDbConfig(String host, String port, String user, String password) { } public static MySQLDbConfig loadFromEnvironmentVars() { - if (ObjectUtils.anyNull(System.getenv("MYSQL_HOST"), - System.getenv("MYSQL_USER"), System.getenv("MYSQL_PASSWORD"))) { + if (ObjectUtils.anyNull( + System.getenv("MYSQL_HOST"), + System.getenv("MYSQL_USER"), + System.getenv("MYSQL_PASSWORD"))) { throw new IllegalStateException("Mysql server parameters not defined"); } - return new MySQLDbConfig(System.getenv("MYSQL_HOST"), + return new MySQLDbConfig( + System.getenv("MYSQL_HOST"), System.getenv("MYSQL_PORT"), System.getenv("MYSQL_USER"), System.getenv("MYSQL_PASSWORD")); diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchema.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchema.java index 80eb25f8c7..adc6335c43 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchema.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchema.java @@ -7,5 +7,4 @@ @Group("mysql.sample.javaoperatorsdk") @Version("v1") -public class MySQLSchema extends CustomResource implements Namespaced { -} +public class MySQLSchema extends CustomResource implements Namespaced {} diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperator.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperator.java index ce3595f0c3..414844155e 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperator.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperator.java @@ -23,17 +23,18 @@ public class MySQLSchemaOperator { public static void main(String[] args) throws IOException { log.info("MySQL Schema Operator starting"); - Operator operator = new Operator(overrider -> overrider - .withMetrics(MicrometerMetrics.withoutPerResourceMetrics(new LoggingMeterRegistry()))); + Operator operator = new Operator(overrider -> overrider.withMetrics( + MicrometerMetrics.withoutPerResourceMetrics(new LoggingMeterRegistry()))); MySQLSchemaReconciler schemaReconciler = new MySQLSchemaReconciler(); // override the default configuration - operator.register(schemaReconciler, + operator.register( + schemaReconciler, configOverrider -> configOverrider.replacingNamedDependentResourceConfig( SchemaDependentResource.NAME, - new ResourcePollerConfig(Duration.ofMillis(300), - MySQLDbConfig.loadFromEnvironmentVars()))); + new ResourcePollerConfig( + Duration.ofMillis(300), MySQLDbConfig.loadFromEnvironmentVars()))); operator.start(); new FtBasic(new TkFork(new FkRegex("/health", "ALL GOOD!")), 8080).start(Exit.NEVER); diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java index 7e229ca4bd..f9e8055675 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/MySQLSchemaReconciler.java @@ -15,36 +15,42 @@ import static io.javaoperatorsdk.operator.sample.dependent.SecretDependentResource.MYSQL_SECRET_USERNAME; import static java.lang.String.format; -@Workflow(dependents = { - @Dependent(type = SecretDependentResource.class, name = SecretDependentResource.NAME), - @Dependent(type = SchemaDependentResource.class, name = SchemaDependentResource.NAME, - dependsOn = SecretDependentResource.NAME) -}) +@Workflow( + dependents = { + @Dependent(type = SecretDependentResource.class, name = SecretDependentResource.NAME), + @Dependent( + type = SchemaDependentResource.class, + name = SchemaDependentResource.NAME, + dependsOn = SecretDependentResource.NAME) + }) @ControllerConfiguration -public class MySQLSchemaReconciler - implements Reconciler { +public class MySQLSchemaReconciler implements Reconciler { static final Logger log = LoggerFactory.getLogger(MySQLSchemaReconciler.class); - @Override public UpdateControl reconcile(MySQLSchema schema, Context context) { // we only need to update the status if we just built the schema, i.e. when it's present in the // context Secret secret = context.getSecondaryResource(Secret.class).orElseThrow(); - return context.getSecondaryResource(Schema.class, SchemaDependentResource.NAME).map(s -> { - var statusUpdateResource = createForStatusUpdate(schema, s, secret.getMetadata().getName(), - decode(secret.getData().get(MYSQL_SECRET_USERNAME))); - log.info("Schema {} created - updating CR status", s.getName()); - return UpdateControl.patchStatus(statusUpdateResource); - }).orElseGet(UpdateControl::noUpdate); + return context + .getSecondaryResource(Schema.class, SchemaDependentResource.NAME) + .map(s -> { + var statusUpdateResource = createForStatusUpdate( + schema, + s, + secret.getMetadata().getName(), + decode(secret.getData().get(MYSQL_SECRET_USERNAME))); + log.info("Schema {} created - updating CR status", s.getName()); + return UpdateControl.patchStatus(statusUpdateResource); + }) + .orElseGet(UpdateControl::noUpdate); } @Override - public ErrorStatusUpdateControl updateErrorStatus(MySQLSchema schema, - Context context, - Exception e) { + public ErrorStatusUpdateControl updateErrorStatus( + MySQLSchema schema, Context context, Exception e) { SchemaStatus status = new SchemaStatus(); status.setUrl(null); status.setUserName(null); @@ -54,20 +60,15 @@ public ErrorStatusUpdateControl updateErrorStatus(MySQLSchema schem return ErrorStatusUpdateControl.patchStatus(schema); } - - private MySQLSchema createForStatusUpdate(MySQLSchema mySQLSchema, Schema schema, - String secretName, - String userName) { + private MySQLSchema createForStatusUpdate( + MySQLSchema mySQLSchema, Schema schema, String secretName, String userName) { MySQLSchema res = new MySQLSchema(); res.setMetadata(new ObjectMetaBuilder() .withName(mySQLSchema.getMetadata().getName()) .withNamespace(mySQLSchema.getMetadata().getNamespace()) .build()); SchemaStatus status = new SchemaStatus(); - status.setUrl( - format( - "jdbc:mysql://%1$s/%2$s", - System.getenv("MYSQL_HOST"), schema.getName())); + status.setUrl(format("jdbc:mysql://%1$s/%2$s", System.getenv("MYSQL_HOST"), schema.getName())); status.setUserName(userName); status.setSecretName(secretName); status.setStatus("CREATED"); diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/ResourcePollerConfig.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/ResourcePollerConfig.java index 44de818f88..feaf326a8d 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/ResourcePollerConfig.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/ResourcePollerConfig.java @@ -9,7 +9,6 @@ public class ResourcePollerConfig { private final Duration pollPeriod; private final MySQLDbConfig mySQLDbConfig; - public ResourcePollerConfig(Duration pollPeriod, MySQLDbConfig mySQLDbConfig) { this.pollPeriod = pollPeriod; this.mySQLDbConfig = mySQLDbConfig; diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java index 60875e6ae3..572b4404c1 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SchemaDependentResource.java @@ -32,15 +32,21 @@ import static io.javaoperatorsdk.operator.sample.dependent.SecretDependentResource.MYSQL_SECRET_USERNAME; import static java.lang.String.format; -@SchemaConfig(pollPeriod = 400, host = "127.0.0.1", +@SchemaConfig( + pollPeriod = 400, + host = "127.0.0.1", port = SchemaDependentResource.LOCAL_PORT, - user = "root", password = "password") // NOSONAR: password is only used locally, example only -@Configured(by = SchemaConfig.class, with = ResourcePollerConfig.class, + user = "root", + password = "password") // NOSONAR: password is only used locally, example only +@Configured( + by = SchemaConfig.class, + with = ResourcePollerConfig.class, converter = ResourcePollerConfigConverter.class) public class SchemaDependentResource extends PerResourcePollingDependentResource implements ConfiguredDependentResource, - Creator, Deleter { + Creator, + Deleter { public static final String NAME = "schema"; public static final int LOCAL_PORT = 3307; @@ -78,9 +84,7 @@ public Schema create(Schema target, MySQLSchema mySQLSchema, Context context) { try (Connection connection = getConnection()) { var userName = primary.getStatus() != null ? primary.getStatus().getUserName() : null; - SchemaService.deleteSchemaAndRelatedUser(connection, primary.getMetadata().getName(), - userName); + SchemaService.deleteSchemaAndRelatedUser( + connection, primary.getMetadata().getName(), userName); } catch (SQLException e) { throw new RuntimeException("Error while trying to delete Schema", e); } @@ -112,8 +115,10 @@ public static String decode(String value) { @Override public Set fetchResources(MySQLSchema primaryResource) { try (Connection connection = getConnection()) { - var schema = SchemaService.getSchema(connection, primaryResource.getMetadata().getName()) - .map(Set::of).orElseGet(Collections::emptySet); + var schema = SchemaService.getSchema( + connection, primaryResource.getMetadata().getName()) + .map(Set::of) + .orElseGet(Collections::emptySet); log.debug("Fetched schema: {}", schema); return schema; } catch (SQLException e) { @@ -121,19 +126,25 @@ public Set fetchResources(MySQLSchema primaryResource) { } } - static class ResourcePollerConfigConverter implements - ConfigurationConverter { + static class ResourcePollerConfigConverter + implements ConfigurationConverter { @Override - public ResourcePollerConfig configFrom(SchemaConfig configAnnotation, + public ResourcePollerConfig configFrom( + SchemaConfig configAnnotation, DependentResourceSpec spec, ControllerConfiguration parentConfiguration) { if (configAnnotation != null) { - return new ResourcePollerConfig(Duration.ofMillis(configAnnotation.pollPeriod()), - new MySQLDbConfig(configAnnotation.host(), String.valueOf(configAnnotation.port()), - configAnnotation.user(), configAnnotation.password())); + return new ResourcePollerConfig( + Duration.ofMillis(configAnnotation.pollPeriod()), + new MySQLDbConfig( + configAnnotation.host(), + String.valueOf(configAnnotation.port()), + configAnnotation.user(), + configAnnotation.password())); } - return new ResourcePollerConfig(Duration.ofMillis(SchemaConfig.DEFAULT_POLL_PERIOD), + return new ResourcePollerConfig( + Duration.ofMillis(SchemaConfig.DEFAULT_POLL_PERIOD), MySQLDbConfig.loadFromEnvironmentVars()); } } diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SecretDependentResource.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SecretDependentResource.java index e6cf2a45e7..bb81dd35c7 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SecretDependentResource.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/dependent/SecretDependentResource.java @@ -37,8 +37,8 @@ private static String encode(String value) { @Override protected Secret desired(MySQLSchema schema, Context context) { - final var password = RandomStringUtils - .randomAlphanumeric(16); // NOSONAR: we don't need cryptographically-strong randomness here + final var password = RandomStringUtils.randomAlphanumeric( + 16); // NOSONAR: we don't need cryptographically-strong randomness here final var name = schema.getMetadata().getName(); final var secretName = getSecretName(name); final var userName = String.format(USERNAME_FORMAT, name); @@ -63,12 +63,11 @@ public Result match(Secret actual, MySQLSchema primary, Context toPrimaryResourceIDs(Secret resource) { String name = resource.getMetadata().getName(); - return Set.of(new ResourceID(name.substring(0, name.length() - SECRET_SUFFIX.length()), + return Set.of(new ResourceID( + name.substring(0, name.length() - SECRET_SUFFIX.length()), resource.getMetadata().getNamespace())); } - } diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/Schema.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/Schema.java index 87fb88e9a4..08fe3295b5 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/Schema.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/Schema.java @@ -23,10 +23,8 @@ public String getCharacterSet() { @Override public boolean equals(Object o) { - if (this == o) - return true; - if (o == null || getClass() != o.getClass()) - return false; + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; Schema schema = (Schema) o; return Objects.equals(name, schema.name); } @@ -38,9 +36,6 @@ public int hashCode() { @Override public String toString() { - return "Schema{" + - "name='" + name + '\'' + - ", characterSet='" + characterSet + '\'' + - '}'; + return "Schema{" + "name='" + name + '\'' + ", characterSet='" + characterSet + '\'' + '}'; } } diff --git a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/SchemaService.java b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/SchemaService.java index 84504a5fec..0da45cd660 100644 --- a/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/SchemaService.java +++ b/sample-operators/mysql-schema/src/main/java/io/javaoperatorsdk/operator/sample/schema/SchemaService.java @@ -12,7 +12,6 @@ public class SchemaService { - private static final Logger log = LoggerFactory.getLogger(SchemaService.class); private final MySQLDbConfig mySQLDbConfig; @@ -29,16 +28,12 @@ public Optional getSchema(String name) { } } - public static Schema createSchemaAndRelatedUser(Connection connection, String schemaName, - String encoding, - String userName, - String password) { + public static Schema createSchemaAndRelatedUser( + Connection connection, String schemaName, String encoding, String userName, String password) { try { try (Statement statement = connection.createStatement()) { statement.execute( - format( - "CREATE SCHEMA `%1$s` DEFAULT CHARACTER SET %2$s", - schemaName, encoding)); + format("CREATE SCHEMA `%1$s` DEFAULT CHARACTER SET %2$s", schemaName, encoding)); } if (!userExists(connection, userName)) { try (Statement statement = connection.createStatement()) { @@ -46,8 +41,7 @@ public static Schema createSchemaAndRelatedUser(Connection connection, String sc } } try (Statement statement = connection.createStatement()) { - statement.execute( - format("GRANT ALL ON `%1$s`.* TO '%2$s'", schemaName, userName)); + statement.execute(format("GRANT ALL ON `%1$s`.* TO '%2$s'", schemaName, userName)); } return new Schema(schemaName, encoding); @@ -56,8 +50,8 @@ public static Schema createSchemaAndRelatedUser(Connection connection, String sc } } - public static void deleteSchemaAndRelatedUser(Connection connection, String schemaName, - String userName) { + public static void deleteSchemaAndRelatedUser( + Connection connection, String schemaName, String userName) { try { if (schemaExists(connection, schemaName)) { try (Statement statement = connection.createStatement()) { @@ -80,8 +74,7 @@ public static void deleteSchemaAndRelatedUser(Connection connection, String sche private static boolean userExists(Connection connection, String username) { try (PreparedStatement ps = - connection.prepareStatement( - "SELECT 1 FROM mysql.user WHERE user = ?")) { + connection.prepareStatement("SELECT 1 FROM mysql.user WHERE user = ?")) { ps.setString(1, username); try (ResultSet resultSet = ps.executeQuery()) { return resultSet.next(); @@ -96,9 +89,8 @@ public static boolean schemaExists(Connection connection, String schemaName) { } public static Optional getSchema(Connection connection, String schemaName) { - try (PreparedStatement ps = - connection.prepareStatement( - "SELECT * FROM information_schema.schemata WHERE schema_name = ?")) { + try (PreparedStatement ps = connection.prepareStatement( + "SELECT * FROM information_schema.schemata WHERE schema_name = ?")) { ps.setString(1, schemaName); try (ResultSet resultSet = ps.executeQuery()) { // CATALOG_NAME, SCHEMA_NAME, DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME, SQL_PATH @@ -106,7 +98,8 @@ public static Optional getSchema(Connection connection, String schemaNam if (!exists) { return Optional.empty(); } else { - return Optional.of(new Schema(resultSet.getString("SCHEMA_NAME"), + return Optional.of(new Schema( + resultSet.getString("SCHEMA_NAME"), resultSet.getString("DEFAULT_CHARACTER_SET_NAME"))); } } @@ -121,11 +114,10 @@ private Connection getConnection() { format("jdbc:mysql://%1$s:%2$s", mySQLDbConfig.getHost(), mySQLDbConfig.getPort()); log.debug("Connecting to '{}' with user '{}'", connectionString, mySQLDbConfig.getUser()); - return DriverManager.getConnection(connectionString, mySQLDbConfig.getUser(), - mySQLDbConfig.getPassword()); + return DriverManager.getConnection( + connectionString, mySQLDbConfig.getUser(), mySQLDbConfig.getPassword()); } catch (SQLException e) { throw new IllegalStateException(e); } } - } diff --git a/sample-operators/mysql-schema/src/test/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperatorE2E.java b/sample-operators/mysql-schema/src/test/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperatorE2E.java index 346ebcb9ef..b0834a2ced 100644 --- a/sample-operators/mysql-schema/src/test/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperatorE2E.java +++ b/sample-operators/mysql-schema/src/test/java/io/javaoperatorsdk/operator/sample/MySQLSchemaOperatorE2E.java @@ -36,14 +36,18 @@ class MySQLSchemaOperatorE2E { static final String MY_SQL_NS = "mysql"; - private final static List infrastructure = new ArrayList<>(); + private static final List infrastructure = new ArrayList<>(); public static final String TEST_RESOURCE_NAME = "mydb1"; static { - infrastructure.add( - new NamespaceBuilder().withNewMetadata().withName(MY_SQL_NS).endMetadata().build()); + infrastructure.add(new NamespaceBuilder() + .withNewMetadata() + .withName(MY_SQL_NS) + .endMetadata() + .build()); try { - infrastructure.addAll(client.load(new FileInputStream("k8s/mysql-db.yaml")).items()); + infrastructure.addAll( + client.load(new FileInputStream("k8s/mysql-db.yaml")).items()); } catch (FileNotFoundException e) { e.printStackTrace(); } @@ -57,18 +61,18 @@ boolean isLocal() { } @RegisterExtension - AbstractOperatorExtension operator = - isLocal() - ? LocallyRunOperatorExtension.builder() - .withReconciler(new MySQLSchemaReconciler()) // configuration for schema comes from - // SchemaDependentResource annotation - .withInfrastructure(infrastructure) - .withPortForward(MY_SQL_NS, "app", "mysql", 3306, SchemaDependentResource.LOCAL_PORT) - .build() - : ClusterDeployedOperatorExtension.builder() - .withOperatorDeployment(client.load(new FileInputStream("k8s/operator.yaml")).items()) - .withInfrastructure(infrastructure) - .build(); + AbstractOperatorExtension operator = isLocal() + ? LocallyRunOperatorExtension.builder() + .withReconciler(new MySQLSchemaReconciler()) // configuration for schema comes from + // SchemaDependentResource annotation + .withInfrastructure(infrastructure) + .withPortForward(MY_SQL_NS, "app", "mysql", 3306, SchemaDependentResource.LOCAL_PORT) + .build() + : ClusterDeployedOperatorExtension.builder() + .withOperatorDeployment( + client.load(new FileInputStream("k8s/operator.yaml")).items()) + .withInfrastructure(infrastructure) + .build(); public MySQLSchemaOperatorE2E() throws FileNotFoundException {} @@ -76,9 +80,10 @@ public MySQLSchemaOperatorE2E() throws FileNotFoundException {} void test() { MySQLSchema testSchema = new MySQLSchema(); - testSchema.setMetadata( - new ObjectMetaBuilder().withName(TEST_RESOURCE_NAME).withNamespace(operator.getNamespace()) - .build()); + testSchema.setMetadata(new ObjectMetaBuilder() + .withName(TEST_RESOURCE_NAME) + .withNamespace(operator.getNamespace()) + .build()); testSchema.setSpec(new SchemaSpec()); testSchema.getSpec().setEncoding("utf8"); @@ -86,38 +91,31 @@ void test() { client.resource(testSchema).createOrReplace(); log.info("Waiting 2 minutes for expected resources to be created and updated"); - await() - .atMost(2, MINUTES) - .ignoreExceptions() - .untilAsserted( - () -> { - MySQLSchema updatedSchema = - client - .resources(MySQLSchema.class) - .inNamespace(operator.getNamespace()) - .withName(testSchema.getMetadata().getName()) - .get(); - assertThat(updatedSchema.getStatus(), is(notNullValue())); - assertThat(updatedSchema.getStatus().getStatus(), equalTo("CREATED")); - assertThat(updatedSchema.getStatus().getSecretName(), is(notNullValue())); - assertThat(updatedSchema.getStatus().getUserName(), is(notNullValue())); - }); - - client.resources(MySQLSchema.class).inNamespace(operator.getNamespace()) - .withName(testSchema.getMetadata().getName()).delete(); - - await() - .atMost(2, MINUTES) - .ignoreExceptions() - .untilAsserted( - () -> { - MySQLSchema updatedSchema = - client - .resources(MySQLSchema.class) - .inNamespace(operator.getNamespace()) - .withName(testSchema.getMetadata().getName()) - .get(); - assertThat(updatedSchema, is(nullValue())); - }); + await().atMost(2, MINUTES).ignoreExceptions().untilAsserted(() -> { + MySQLSchema updatedSchema = client + .resources(MySQLSchema.class) + .inNamespace(operator.getNamespace()) + .withName(testSchema.getMetadata().getName()) + .get(); + assertThat(updatedSchema.getStatus(), is(notNullValue())); + assertThat(updatedSchema.getStatus().getStatus(), equalTo("CREATED")); + assertThat(updatedSchema.getStatus().getSecretName(), is(notNullValue())); + assertThat(updatedSchema.getStatus().getUserName(), is(notNullValue())); + }); + + client + .resources(MySQLSchema.class) + .inNamespace(operator.getNamespace()) + .withName(testSchema.getMetadata().getName()) + .delete(); + + await().atMost(2, MINUTES).ignoreExceptions().untilAsserted(() -> { + MySQLSchema updatedSchema = client + .resources(MySQLSchema.class) + .inNamespace(operator.getNamespace()) + .withName(testSchema.getMetadata().getName()) + .get(); + assertThat(updatedSchema, is(nullValue())); + }); } } diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/DeploymentDependentResource.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/DeploymentDependentResource.java index d6eaad24bb..8a9d3bffc9 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/DeploymentDependentResource.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/DeploymentDependentResource.java @@ -9,8 +9,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -@KubernetesDependent(informer = @Informer( - labelSelector = "app.kubernetes.io/managed-by=tomcat-operator")) +@KubernetesDependent( + informer = @Informer(labelSelector = "app.kubernetes.io/managed-by=tomcat-operator")) public class DeploymentDependentResource extends CRUDKubernetesDependentResource { @@ -37,15 +37,21 @@ protected Deployment desired(Tomcat tomcat, Context context) { .addToLabels("app.kubernetes.io/managed-by", "tomcat-operator") .endMetadata() .editSpec() - .editSelector().addToMatchLabels("app", tomcatName).endSelector() + .editSelector() + .addToMatchLabels("app", tomcatName) + .endSelector() .withReplicas(tomcat.getSpec().getReplicas()) // set tomcat version .editTemplate() // make sure label selector matches label (which has to be matched by service selector // too) - .editMetadata().addToLabels("app", tomcatName).endMetadata() + .editMetadata() + .addToLabels("app", tomcatName) + .endMetadata() .editSpec() - .editFirstContainer().withImage(tomcatImage(tomcat)).endContainer() + .editFirstContainer() + .withImage(tomcatImage(tomcat)) + .endContainer() .endSpec() .endTemplate() .endSpec() diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/ServiceDependentResource.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/ServiceDependentResource.java index 8a93b48804..b42a42257d 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/ServiceDependentResource.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/ServiceDependentResource.java @@ -9,8 +9,8 @@ import io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource; import io.javaoperatorsdk.operator.processing.dependent.kubernetes.KubernetesDependent; -@KubernetesDependent(informer = @Informer( - labelSelector = "app.kubernetes.io/managed-by=tomcat-operator")) +@KubernetesDependent( + informer = @Informer(labelSelector = "app.kubernetes.io/managed-by=tomcat-operator")) public class ServiceDependentResource extends CRUDKubernetesDependentResource { public ServiceDependentResource() { @@ -31,5 +31,4 @@ protected Service desired(Tomcat tomcat, Context context) { .endSpec() .build(); } - } diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java index f89a5f22e0..72af8ad6b5 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/TomcatReconciler.java @@ -15,10 +15,11 @@ * Runs a specified number of Tomcat app server Pods. It uses a Deployment to create the Pods. Also * creates a Service over which the Pods can be accessed. */ -@Workflow(dependents = { - @Dependent(type = DeploymentDependentResource.class), - @Dependent(type = ServiceDependentResource.class) -}) +@Workflow( + dependents = { + @Dependent(type = DeploymentDependentResource.class), + @Dependent(type = ServiceDependentResource.class) + }) @ControllerConfiguration public class TomcatReconciler implements Reconciler { @@ -26,15 +27,18 @@ public class TomcatReconciler implements Reconciler { @Override public UpdateControl reconcile(Tomcat tomcat, Context context) { - return context.getSecondaryResource(Deployment.class).map(deployment -> { - Tomcat updatedTomcat = createTomcatForStatusUpdate(tomcat, deployment); - log.info( - "Updating status of Tomcat {} in namespace {} to {} ready replicas", - tomcat.getMetadata().getName(), - tomcat.getMetadata().getNamespace(), - tomcat.getStatus() == null ? 0 : tomcat.getStatus().getReadyReplicas()); - return UpdateControl.patchStatus(updatedTomcat); - }).orElseGet(UpdateControl::noUpdate); + return context + .getSecondaryResource(Deployment.class) + .map(deployment -> { + Tomcat updatedTomcat = createTomcatForStatusUpdate(tomcat, deployment); + log.info( + "Updating status of Tomcat {} in namespace {} to {} ready replicas", + tomcat.getMetadata().getName(), + tomcat.getMetadata().getNamespace(), + tomcat.getStatus() == null ? 0 : tomcat.getStatus().getReadyReplicas()); + return UpdateControl.patchStatus(updatedTomcat); + }) + .orElseGet(UpdateControl::noUpdate); } private Tomcat createTomcatForStatusUpdate(Tomcat tomcat, Deployment deployment) { diff --git a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java index 82d0152b3c..d985a95cf4 100644 --- a/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java +++ b/sample-operators/tomcat-operator/src/main/java/io/javaoperatorsdk/operator/sample/WebappReconciler.java @@ -33,8 +33,7 @@ import io.javaoperatorsdk.operator.processing.event.source.informer.InformerEventSource; @ControllerConfiguration -public class WebappReconciler - implements Reconciler, Cleaner { +public class WebappReconciler implements Reconciler, Cleaner { private static final Logger log = LoggerFactory.getLogger(WebappReconciler.class); @@ -52,19 +51,18 @@ public List> prepareEventSources(EventSourceContext webappsMatchingTomcatName = - (Tomcat t) -> context.getPrimaryCache() - .list(webApp -> webApp.getSpec().getTomcat().equals(t.getMetadata().getName())) - .map(ResourceID::fromResource) - .collect(Collectors.toSet()); - - InformerEventSourceConfiguration configuration = - InformerEventSourceConfiguration.from(Tomcat.class, Webapp.class) - .withSecondaryToPrimaryMapper(webappsMatchingTomcatName) - .withPrimaryToSecondaryMapper( - (Webapp primary) -> Set.of(new ResourceID(primary.getSpec().getTomcat(), - primary.getMetadata().getNamespace()))) - .build(); + final SecondaryToPrimaryMapper webappsMatchingTomcatName = (Tomcat t) -> context + .getPrimaryCache() + .list(webApp -> webApp.getSpec().getTomcat().equals(t.getMetadata().getName())) + .map(ResourceID::fromResource) + .collect(Collectors.toSet()); + + InformerEventSourceConfiguration configuration = InformerEventSourceConfiguration.from( + Tomcat.class, Webapp.class) + .withSecondaryToPrimaryMapper(webappsMatchingTomcatName) + .withPrimaryToSecondaryMapper((Webapp primary) -> Set.of( + new ResourceID(primary.getSpec().getTomcat(), primary.getMetadata().getNamespace()))) + .build(); return List.of(new InformerEventSource<>(configuration, context)); } @@ -79,9 +77,10 @@ public UpdateControl reconcile(Webapp webapp, Context context) { return UpdateControl.noUpdate(); } - Tomcat tomcat = context.getSecondaryResource(Tomcat.class) - .orElseThrow( - () -> new IllegalStateException("Cannot find Tomcat " + webapp.getSpec().getTomcat() + Tomcat tomcat = context + .getSecondaryResource(Tomcat.class) + .orElseThrow(() -> + new IllegalStateException("Cannot find Tomcat " + webapp.getSpec().getTomcat() + " for Webapp " + webapp.getMetadata().getName() + " in namespace " + webapp.getMetadata().getNamespace())); @@ -89,19 +88,30 @@ public UpdateControl reconcile(Webapp webapp, Context context) { && Objects.equals(tomcat.getSpec().getReplicas(), tomcat.getStatus().getReadyReplicas())) { log.info( "Tomcat is ready and webapps not yet deployed. Commencing deployment of {} in Tomcat {}", - webapp.getMetadata().getName(), tomcat.getMetadata().getName()); - String[] command = new String[] {"wget", "-O", - "/data/" + webapp.getSpec().getContextPath() + ".war", webapp.getSpec().getUrl()}; + webapp.getMetadata().getName(), + tomcat.getMetadata().getName()); + String[] command = new String[] { + "wget", + "-O", + "/data/" + webapp.getSpec().getContextPath() + ".war", + webapp.getSpec().getUrl() + }; if (log.isInfoEnabled()) { - command = new String[] {"time", "wget", "-O", - "/data/" + webapp.getSpec().getContextPath() + ".war", webapp.getSpec().getUrl()}; + command = new String[] { + "time", + "wget", + "-O", + "/data/" + webapp.getSpec().getContextPath() + ".war", + webapp.getSpec().getUrl() + }; } String[] commandStatusInAllPods = executeCommandInAllPods(kubernetesClient, webapp, command); return UpdateControl.patchStatus(createWebAppForStatusUpdate(webapp, commandStatusInAllPods)); } else { - log.info("WebappController invoked but Tomcat not ready yet ({}/{})", + log.info( + "WebappController invoked but Tomcat not ready yet ({}/{})", tomcat.getStatus() != null ? tomcat.getStatus().getReadyReplicas() : 0, tomcat.getSpec().getReplicas()); return UpdateControl.noUpdate(); @@ -136,22 +146,20 @@ private String[] executeCommandInAllPods( KubernetesClient kubernetesClient, Webapp webapp, String[] command) { String[] status = new String[0]; - Deployment deployment = - kubernetesClient - .apps() - .deployments() - .inNamespace(webapp.getMetadata().getNamespace()) - .withName(webapp.getSpec().getTomcat()) - .get(); + Deployment deployment = kubernetesClient + .apps() + .deployments() + .inNamespace(webapp.getMetadata().getNamespace()) + .withName(webapp.getSpec().getTomcat()) + .get(); if (deployment != null) { - List pods = - kubernetesClient - .pods() - .inNamespace(webapp.getMetadata().getNamespace()) - .withLabels(deployment.getSpec().getSelector().getMatchLabels()) - .list() - .getItems(); + List pods = kubernetesClient + .pods() + .inNamespace(webapp.getMetadata().getNamespace()) + .withLabels(deployment.getSpec().getSelector().getMatchLabels()) + .list() + .getItems(); status = new String[pods.size()]; for (int i = 0; i < pods.size(); i++) { Pod pod = pods.get(i); @@ -166,8 +174,7 @@ private String[] executeCommandInAllPods( } catch (ExecutionException e) { status[i] = pod.getMetadata().getName() + ": ExecutionException - " + e.getMessage(); } catch (InterruptedException e) { - status[i] = - pod.getMetadata().getName() + ": InterruptedException - " + e.getMessage(); + status[i] = pod.getMetadata().getName() + ": InterruptedException - " + e.getMessage(); } catch (TimeoutException e) { status[i] = pod.getMetadata().getName() + ": TimeoutException - " + e.getMessage(); } @@ -178,7 +185,8 @@ private String[] executeCommandInAllPods( private ExecWatch execCmd(Pod pod, CompletableFuture data, String... command) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); - return kubernetesClient.pods() + return kubernetesClient + .pods() .inNamespace(pod.getMetadata().getNamespace()) .withName(pod.getMetadata().getName()) .inContainer("war-downloader") @@ -216,5 +224,4 @@ public void onClose(int code, String reason) { data.complete(baos.toString()); } } - } diff --git a/sample-operators/tomcat-operator/src/test/java/io/javaoperatorsdk/operator/sample/TomcatOperatorE2E.java b/sample-operators/tomcat-operator/src/test/java/io/javaoperatorsdk/operator/sample/TomcatOperatorE2E.java index 3095e7db8c..4711b60da8 100644 --- a/sample-operators/tomcat-operator/src/test/java/io/javaoperatorsdk/operator/sample/TomcatOperatorE2E.java +++ b/sample-operators/tomcat-operator/src/test/java/io/javaoperatorsdk/operator/sample/TomcatOperatorE2E.java @@ -26,13 +26,13 @@ class TomcatOperatorE2E { - final static Logger log = LoggerFactory.getLogger(TomcatOperatorE2E.class); + static final Logger log = LoggerFactory.getLogger(TomcatOperatorE2E.class); - final static KubernetesClient client = new DefaultKubernetesClient(); + static final KubernetesClient client = new DefaultKubernetesClient(); public TomcatOperatorE2E() throws FileNotFoundException {} - final static int tomcatReplicas = 2; + static final int tomcatReplicas = 2; boolean isLocal() { String deployment = System.getProperty("test.deployment"); @@ -42,11 +42,12 @@ boolean isLocal() { } @RegisterExtension - AbstractOperatorExtension operator = isLocal() ? LocallyRunOperatorExtension.builder() - .waitForNamespaceDeletion(false) - .withReconciler(new TomcatReconciler()) - .withReconciler(new WebappReconciler(client)) - .build() + AbstractOperatorExtension operator = isLocal() + ? LocallyRunOperatorExtension.builder() + .waitForNamespaceDeletion(false) + .withReconciler(new TomcatReconciler()) + .withReconciler(new WebappReconciler(client)) + .build() : ClusterDeployedOperatorExtension.builder() .waitForNamespaceDeletion(false) .withOperatorDeployment( @@ -92,12 +93,14 @@ void test() { log.info("Waiting 5 minutes for Tomcat and Webapp CR statuses to be updated"); await().atMost(5, MINUTES).untilAsserted(() -> { - Tomcat updatedTomcat = - tomcatClient.inNamespace(operator.getNamespace()).withName(tomcat.getMetadata().getName()) - .get(); - Webapp updatedWebapp = - webappClient.inNamespace(operator.getNamespace()) - .withName(webapp1.getMetadata().getName()).get(); + Tomcat updatedTomcat = tomcatClient + .inNamespace(operator.getNamespace()) + .withName(tomcat.getMetadata().getName()) + .get(); + Webapp updatedWebapp = webappClient + .inNamespace(operator.getNamespace()) + .withName(webapp1.getMetadata().getName()) + .get(); assertThat(updatedTomcat.getStatus(), is(notNullValue())); assertThat(updatedTomcat.getStatus().getReadyReplicas(), equalTo(tomcatReplicas)); assertThat(updatedWebapp.getStatus(), is(notNullValue())); @@ -123,5 +126,4 @@ void test() { log.info("Deleting test Webapp object: {}", webapp1); webappClient.inNamespace(operator.getNamespace()).resource(webapp1).delete(); } - } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/Utils.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/Utils.java index 72d04b42ed..05b6e66a54 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/Utils.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/Utils.java @@ -72,8 +72,16 @@ public static Ingress makeDesiredIngress(WebPage webPage) { Ingress ingress = loadYaml(Ingress.class, Utils.class, "ingress.yaml"); ingress.getMetadata().setName(webPage.getMetadata().getName()); ingress.getMetadata().setNamespace(webPage.getMetadata().getNamespace()); - ingress.getSpec().getRules().get(0).getHttp().getPaths().get(0) - .getBackend().getService().setName(serviceName(webPage)); + ingress + .getSpec() + .getRules() + .get(0) + .getHttp() + .getPaths() + .get(0) + .getBackend() + .getService() + .setName(serviceName(webPage)); return ingress; } } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java index 6adbeb03b5..b0612209b9 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageDependentsWorkflowReconciler.java @@ -25,11 +25,11 @@ * Shows how to implement reconciler using standalone dependent resources. */ @ControllerConfiguration( - informer = @Informer( - labelSelector = WebPageDependentsWorkflowReconciler.DEPENDENT_RESOURCE_LABEL_SELECTOR)) + informer = + @Informer( + labelSelector = WebPageDependentsWorkflowReconciler.DEPENDENT_RESOURCE_LABEL_SELECTOR)) @SuppressWarnings("unused") -public class WebPageDependentsWorkflowReconciler - implements Reconciler { +public class WebPageDependentsWorkflowReconciler implements Reconciler { public static final String DEPENDENT_RESOURCE_LABEL_SELECTOR = "!low-level"; @@ -53,9 +53,8 @@ public WebPageDependentsWorkflowReconciler(KubernetesClient kubernetesClient) { @Override public List> prepareEventSources(EventSourceContext context) { - return EventSourceUtils.dependentEventSources(context, configMapDR, - deploymentDR, serviceDR, - ingressDR); + return EventSourceUtils.dependentEventSources( + context, configMapDR, deploymentDR, serviceDR, ingressDR); } @Override @@ -65,10 +64,13 @@ public UpdateControl reconcile(WebPage webPage, Context contex workflow.reconcile(webPage, context); - return UpdateControl - .patchStatus( - createWebPageForStatusUpdate(webPage, context.getSecondaryResource(ConfigMap.class) - .orElseThrow().getMetadata().getName())); + return UpdateControl.patchStatus(createWebPageForStatusUpdate( + webPage, + context + .getSecondaryResource(ConfigMap.class) + .orElseThrow() + .getMetadata() + .getName())); } @Override @@ -91,5 +93,4 @@ private void initDependentResources(KubernetesClient client) { .build()) .build())); } - } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java index e59f7fe0fc..23d653c3be 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageManagedDependentsReconciler.java @@ -11,21 +11,22 @@ /** * Shows how to implement a reconciler with managed dependent resources. */ -@Workflow(dependents = { - @Dependent(type = ConfigMapDependentResource.class), - @Dependent(type = DeploymentDependentResource.class), - @Dependent(type = ServiceDependentResource.class), - @Dependent(type = IngressDependentResource.class, - reconcilePrecondition = ExposedIngressCondition.class) -}) -public class WebPageManagedDependentsReconciler - implements Reconciler, Cleaner { +@Workflow( + dependents = { + @Dependent(type = ConfigMapDependentResource.class), + @Dependent(type = DeploymentDependentResource.class), + @Dependent(type = ServiceDependentResource.class), + @Dependent( + type = IngressDependentResource.class, + reconcilePrecondition = ExposedIngressCondition.class) + }) +public class WebPageManagedDependentsReconciler implements Reconciler, Cleaner { public static final String SELECTOR = "managed"; @Override - public ErrorStatusUpdateControl updateErrorStatus(WebPage resource, - Context context, Exception e) { + public ErrorStatusUpdateControl updateErrorStatus( + WebPage resource, Context context, Exception e) { return handleError(resource, e); } @@ -34,8 +35,11 @@ public UpdateControl reconcile(WebPage webPage, Context contex throws Exception { simulateErrorIfRequested(webPage); - final var name = context.getSecondaryResource(ConfigMap.class).orElseThrow() - .getMetadata().getName(); + final var name = context + .getSecondaryResource(ConfigMap.class) + .orElseThrow() + .getMetadata() + .getName(); return UpdateControl.patchStatus(createWebPageForStatusUpdate(webPage, name)); } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java index ff80cc5901..1885e2d3b3 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageOperator.java @@ -18,7 +18,6 @@ public class WebPageOperator { public static final String WEBPAGE_MANAGED_DEPENDENT_RESOURCE_ENV_VALUE = "managed"; private static final Logger log = LoggerFactory.getLogger(WebPageOperator.class); - /** * Based on env variables a different flavor of Reconciler is used, showcasing how the same logic * can be implemented using the low level and higher level APIs. @@ -30,8 +29,7 @@ public static void main(String[] args) throws IOException { String reconcilerEnvVar = System.getenv(WEBPAGE_RECONCILER_ENV); if (WEBPAGE_CLASSIC_RECONCILER_ENV_VALUE.equals(reconcilerEnvVar)) { operator.register(new WebPageReconciler()); - } else if (WEBPAGE_MANAGED_DEPENDENT_RESOURCE_ENV_VALUE - .equals(reconcilerEnvVar)) { + } else if (WEBPAGE_MANAGED_DEPENDENT_RESOURCE_ENV_VALUE.equals(reconcilerEnvVar)) { operator.register(new WebPageManagedDependentsReconciler()); } else { operator.register(new WebPageStandaloneDependentsReconciler()); diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java index a687929b22..7a13d32306 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageReconciler.java @@ -27,45 +27,38 @@ /** Shows how to implement reconciler using the low level api directly. */ @RateLimited(maxReconciliations = 2, within = 3) @ControllerConfiguration -public class WebPageReconciler - implements Reconciler { +public class WebPageReconciler implements Reconciler { public static final String INDEX_HTML = "index.html"; private static final Logger log = LoggerFactory.getLogger(WebPageReconciler.class); - public WebPageReconciler() { - - } + public WebPageReconciler() {} @Override public List> prepareEventSources(EventSourceContext context) { - var configMapEventSource = - new InformerEventSource<>( - InformerEventSourceConfiguration.from(ConfigMap.class, WebPage.class) - .withLabelSelector(SELECTOR) - .build(), - context); - var deploymentEventSource = - new InformerEventSource<>( - InformerEventSourceConfiguration.from(Deployment.class, WebPage.class) - .withLabelSelector(SELECTOR) - .build(), - context); - var serviceEventSource = - new InformerEventSource<>( - InformerEventSourceConfiguration.from(Service.class, WebPage.class) - .withLabelSelector(SELECTOR) - .build(), - context); - var ingressEventSource = - new InformerEventSource<>( - InformerEventSourceConfiguration.from(Ingress.class, WebPage.class) - .withLabelSelector(SELECTOR) - .build(), - context); - return List.of(configMapEventSource, deploymentEventSource, - serviceEventSource, ingressEventSource); + var configMapEventSource = new InformerEventSource<>( + InformerEventSourceConfiguration.from(ConfigMap.class, WebPage.class) + .withLabelSelector(SELECTOR) + .build(), + context); + var deploymentEventSource = new InformerEventSource<>( + InformerEventSourceConfiguration.from(Deployment.class, WebPage.class) + .withLabelSelector(SELECTOR) + .build(), + context); + var serviceEventSource = new InformerEventSource<>( + InformerEventSourceConfiguration.from(Service.class, WebPage.class) + .withLabelSelector(SELECTOR) + .build(), + context); + var ingressEventSource = new InformerEventSource<>( + InformerEventSourceConfiguration.from(Ingress.class, WebPage.class) + .withLabelSelector(SELECTOR) + .build(), + context); + return List.of( + configMapEventSource, deploymentEventSource, serviceEventSource, ingressEventSource); } @Override @@ -82,7 +75,6 @@ public UpdateControl reconcile(WebPage webPage, Context contex String configMapName = configMapName(webPage); String deploymentName = deploymentName(webPage); - ConfigMap desiredHtmlConfigMap = makeDesiredHtmlConfigMap(ns, configMapName, webPage); Deployment desiredDeployment = makeDesiredDeployment(webPage, deploymentName, ns, configMapName); @@ -94,7 +86,11 @@ public UpdateControl reconcile(WebPage webPage, Context contex "Creating or updating ConfigMap {} in {}", desiredHtmlConfigMap.getMetadata().getName(), ns); - context.getClient().configMaps().inNamespace(ns).resource(desiredHtmlConfigMap) + context + .getClient() + .configMaps() + .inNamespace(ns) + .resource(desiredHtmlConfigMap) .serverSideApply(); } @@ -104,7 +100,12 @@ public UpdateControl reconcile(WebPage webPage, Context contex "Creating or updating Deployment {} in {}", desiredDeployment.getMetadata().getName(), ns); - context.getClient().apps().deployments().inNamespace(ns).resource(desiredDeployment) + context + .getClient() + .apps() + .deployments() + .inNamespace(ns) + .resource(desiredDeployment) .serverSideApply(); } @@ -114,8 +115,7 @@ public UpdateControl reconcile(WebPage webPage, Context contex "Creating or updating Deployment {} in {}", desiredDeployment.getMetadata().getName(), ns); - context.getClient().services().inNamespace(ns).resource(desiredService) - .serverSideApply(); + context.getClient().services().inNamespace(ns).resource(desiredService).serverSideApply(); } var existingIngress = context.getSecondaryResource(Ingress.class); @@ -125,17 +125,22 @@ public UpdateControl reconcile(WebPage webPage, Context contex context.getClient().resource(desiredIngress).inNamespace(ns).serverSideApply(); } } else - existingIngress.ifPresent( - ingress -> context.getClient().resource(ingress).delete()); + existingIngress.ifPresent(ingress -> context.getClient().resource(ingress).delete()); // not that this is not necessary, eventually mounted config map would be updated, just this way // is much faster; what is handy for demo purposes. // https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/#mounted-configmaps-are-updated-automatically - if (previousConfigMap != null && !StringUtils.equals( - previousConfigMap.getData().get(INDEX_HTML), - desiredHtmlConfigMap.getData().get(INDEX_HTML))) { + if (previousConfigMap != null + && !StringUtils.equals( + previousConfigMap.getData().get(INDEX_HTML), + desiredHtmlConfigMap.getData().get(INDEX_HTML))) { log.info("Restarting pods because HTML has changed in {}", ns); - context.getClient().pods().inNamespace(ns).withLabel("app", deploymentName(webPage)).delete(); + context + .getClient() + .pods() + .inNamespace(ns) + .withLabel("app", deploymentName(webPage)) + .delete(); } return UpdateControl.patchStatus( @@ -143,12 +148,26 @@ public UpdateControl reconcile(WebPage webPage, Context contex } private boolean match(Ingress desiredIngress, Ingress existingIngress) { - String desiredServiceName = - desiredIngress.getSpec().getRules().get(0).getHttp().getPaths().get(0) - .getBackend().getService().getName(); - String existingServiceName = - existingIngress.getSpec().getRules().get(0).getHttp().getPaths().get(0) - .getBackend().getService().getName(); + String desiredServiceName = desiredIngress + .getSpec() + .getRules() + .get(0) + .getHttp() + .getPaths() + .get(0) + .getBackend() + .getService() + .getName(); + String existingServiceName = existingIngress + .getSpec() + .getRules() + .get(0) + .getHttp() + .getPaths() + .get(0) + .getBackend() + .getService() + .getName(); return Objects.equals(desiredServiceName, existingServiceName); } @@ -156,10 +175,24 @@ private boolean match(Deployment desiredDeployment, Deployment deployment) { if (deployment == null) { return false; } else { - return desiredDeployment.getSpec().getReplicas().equals(deployment.getSpec().getReplicas()) && - desiredDeployment.getSpec().getTemplate().getSpec().getContainers().get(0).getImage() - .equals( - deployment.getSpec().getTemplate().getSpec().getContainers().get(0).getImage()); + return desiredDeployment + .getSpec() + .getReplicas() + .equals(deployment.getSpec().getReplicas()) + && desiredDeployment + .getSpec() + .getTemplate() + .getSpec() + .getContainers() + .get(0) + .getImage() + .equals(deployment + .getSpec() + .getTemplate() + .getSpec() + .getContainers() + .get(0) + .getImage()); } } @@ -190,8 +223,8 @@ private Service makeDesiredService(WebPage webPage, String ns, Deployment desire return desiredService; } - private Deployment makeDesiredDeployment(WebPage webPage, String deploymentName, String ns, - String configMapName) { + private Deployment makeDesiredDeployment( + WebPage webPage, String deploymentName, String ns, String configMapName) { Deployment desiredDeployment = ReconcilerUtils.loadYaml(Deployment.class, getClass(), "deployment.yaml"); desiredDeployment.getMetadata().setName(deploymentName); @@ -213,16 +246,14 @@ private Deployment makeDesiredDeployment(WebPage webPage, String deploymentName, private ConfigMap makeDesiredHtmlConfigMap(String ns, String configMapName, WebPage webPage) { Map data = new HashMap<>(); data.put(INDEX_HTML, webPage.getSpec().getHtml()); - ConfigMap configMap = - new ConfigMapBuilder() - .withMetadata( - new ObjectMetaBuilder() - .withName(configMapName) - .withNamespace(ns) - .withLabels(lowLevelLabel()) - .build()) - .withData(data) - .build(); + ConfigMap configMap = new ConfigMapBuilder() + .withMetadata(new ObjectMetaBuilder() + .withName(configMapName) + .withNamespace(ns) + .withLabels(lowLevelLabel()) + .build()) + .withData(data) + .build(); configMap.addOwnerReference(webPage); return configMap; } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java index b413e9ba53..a7d4f453df 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/WebPageStandaloneDependentsReconciler.java @@ -30,8 +30,7 @@ * Shows how to implement reconciler using standalone dependent resources and workflows. */ @ControllerConfiguration -public class WebPageStandaloneDependentsReconciler - implements Reconciler { +public class WebPageStandaloneDependentsReconciler implements Reconciler { private final Workflow workflow; @@ -67,9 +66,11 @@ public UpdateControl reconcile(WebPage webPage, Context contex // retrieve the name of the ConfigMap secondary resource to update the status if everything went // well - webPage.setStatus( - createStatus( - context.getSecondaryResource(ConfigMap.class).orElseThrow().getMetadata().getName())); + webPage.setStatus(createStatus(context + .getSecondaryResource(ConfigMap.class) + .orElseThrow() + .getMetadata() + .getName())); return UpdateControl.patchStatus(webPage); } @@ -92,7 +93,6 @@ private Workflow createDependentResourcesAndWorkflow() { var serviceDR = new ServiceDependentResource(); var ingressDR = new IngressDependentResource(); - // configure them with our label selector Arrays.asList(configMapDR, deploymentDR, serviceDR, ingressDR) .forEach(dr -> dr.configureWith(new KubernetesDependentResourceConfigBuilder() diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPage.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPage.java index c468fa212a..08a6efbd29 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPage.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPage.java @@ -7,14 +7,10 @@ @Group("sample.javaoperatorsdk") @Version("v1") -public class WebPage extends CustomResource - implements Namespaced { +public class WebPage extends CustomResource implements Namespaced { @Override public String toString() { - return "WebPage{" + - "spec=" + spec + - ", status=" + status + - '}'; + return "WebPage{" + "spec=" + spec + ", status=" + status + '}'; } } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageSpec.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageSpec.java index 56fd7dda40..12d2ca8d4b 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageSpec.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageSpec.java @@ -24,8 +24,6 @@ public WebPageSpec setExposed(Boolean exposed) { @Override public String toString() { - return "WebPageSpec{" + - "html='" + html + '\'' + - '}'; + return "WebPageSpec{" + "html='" + html + '\'' + '}'; } } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageStatus.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageStatus.java index 36409ac7f9..2d1d9844a8 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageStatus.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/customresource/WebPageStatus.java @@ -35,10 +35,9 @@ public WebPageStatus setErrorMessage(String errorMessage) { @Override public String toString() { - return "WebPageStatus{" + - "htmlConfigMap='" + htmlConfigMap + '\'' + - ", areWeGood='" + areWeGood + '\'' + - ", errorMessage='" + errorMessage + '\'' + - '}'; + return "WebPageStatus{" + "htmlConfigMap='" + + htmlConfigMap + '\'' + ", areWeGood='" + + areWeGood + '\'' + ", errorMessage='" + + errorMessage + '\'' + '}'; } } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java index 816db3688e..b2e06cfbbd 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ConfigMapDependentResource.java @@ -31,12 +31,11 @@ protected ConfigMap desired(WebPage webPage, Context context) { Map labels = new HashMap<>(); labels.put(SELECTOR, "true"); return new ConfigMapBuilder() - .withMetadata( - new ObjectMetaBuilder() - .withName(configMapName(webPage)) - .withNamespace(webPage.getMetadata().getNamespace()) - .withLabels(labels) - .build()) + .withMetadata(new ObjectMetaBuilder() + .withName(configMapName(webPage)) + .withNamespace(webPage.getMetadata().getNamespace()) + .withLabels(labels) + .build()) .withData(data) .build(); } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/DeploymentDependentResource.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/DeploymentDependentResource.java index b427e42d33..c8d2f9eab5 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/DeploymentDependentResource.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/DeploymentDependentResource.java @@ -37,12 +37,7 @@ protected Deployment desired(WebPage webPage, Context context) { deployment.getMetadata().setLabels(labels); deployment.getSpec().getSelector().getMatchLabels().put("app", deploymentName); - deployment - .getSpec() - .getTemplate() - .getMetadata() - .getLabels() - .put("app", deploymentName); + deployment.getSpec().getTemplate().getMetadata().getLabels().put("app", deploymentName); deployment .getSpec() .getTemplate() diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ExposedIngressCondition.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ExposedIngressCondition.java index 80691de96e..d07adc59d6 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ExposedIngressCondition.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ExposedIngressCondition.java @@ -9,8 +9,10 @@ public class ExposedIngressCondition implements Condition { @Override - public boolean isMet(DependentResource dependentResource, - WebPage primary, Context context) { + public boolean isMet( + DependentResource dependentResource, + WebPage primary, + Context context) { return primary.getSpec().getExposed(); } } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/IngressDependentResource.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/IngressDependentResource.java index e680d10fcf..994a35c98c 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/IngressDependentResource.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/IngressDependentResource.java @@ -23,5 +23,4 @@ public IngressDependentResource() { protected Ingress desired(WebPage webPage, Context context) { return makeDesiredIngress(webPage); } - } diff --git a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ServiceDependentResource.java b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ServiceDependentResource.java index ff9e7a1a52..b1ab856f62 100644 --- a/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ServiceDependentResource.java +++ b/sample-operators/webpage/src/main/java/io/javaoperatorsdk/operator/sample/dependentresource/ServiceDependentResource.java @@ -17,8 +17,10 @@ // this annotation only activates when using managed dependents and is not otherwise needed @KubernetesDependent(informer = @Informer(labelSelector = SELECTOR)) -public class ServiceDependentResource extends - io.javaoperatorsdk.operator.processing.dependent.kubernetes.CRUDKubernetesDependentResource { +public class ServiceDependentResource + extends io.javaoperatorsdk.operator.processing.dependent.kubernetes + .CRUDKubernetesDependentResource< + Service, WebPage> { public ServiceDependentResource() { super(Service.class); diff --git a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorAbstractTest.java b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorAbstractTest.java index 6c9a5512bb..b862f4aafa 100644 --- a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorAbstractTest.java +++ b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorAbstractTest.java @@ -57,24 +57,26 @@ void testAddingWebPage() { await() .atMost(Duration.ofSeconds(WAIT_SECONDS)) .pollInterval(POLL_INTERVAL) - .untilAsserted( - () -> { - var actual = operator().get(WebPage.class, TEST_PAGE); - var deployment = operator().get(Deployment.class, deploymentName(webPage)); - assertThat(actual.getStatus()).isNotNull(); - assertThat(actual.getStatus().getAreWeGood()).isTrue(); - assertThat(deployment.getSpec().getReplicas()) - .isEqualTo(deployment.getStatus().getReadyReplicas()); - }); + .untilAsserted(() -> { + var actual = operator().get(WebPage.class, TEST_PAGE); + var deployment = operator().get(Deployment.class, deploymentName(webPage)); + assertThat(actual.getStatus()).isNotNull(); + assertThat(actual.getStatus().getAreWeGood()).isTrue(); + assertThat(deployment.getSpec().getReplicas()) + .isEqualTo(deployment.getStatus().getReadyReplicas()); + }); assertThat(httpGetForWebPage(webPage)).contains(TITLE1); // update part: changing title operator().replace(createWebPage(TITLE2)); - await().atMost(Duration.ofSeconds(LONG_WAIT_SECONDS)) + await() + .atMost(Duration.ofSeconds(LONG_WAIT_SECONDS)) .pollInterval(POLL_INTERVAL) .untilAsserted(() -> { - String page = operator().get(ConfigMap.class, Utils.configMapName(webPage)).getData() + String page = operator() + .get(ConfigMap.class, Utils.configMapName(webPage)) + .getData() .get(INDEX_HTML); // not using portforward here since there were issues with GitHub actions // String page = httpGetForWebPage(webPage); @@ -84,7 +86,8 @@ void testAddingWebPage() { // delete part: deleting webpage operator().delete(createWebPage(TITLE2)); - await().atMost(Duration.ofSeconds(WAIT_SECONDS)) + await() + .atMost(Duration.ofSeconds(WAIT_SECONDS)) .pollInterval(POLL_INTERVAL) .untilAsserted(() -> { Deployment deployment = operator().get(Deployment.class, deploymentName(webPage)); @@ -95,14 +98,17 @@ void testAddingWebPage() { String httpGetForWebPage(WebPage webPage) { LocalPortForward portForward = null; try { - portForward = - client.services().inNamespace(webPage.getMetadata().getNamespace()) - .withName(serviceName(webPage)).portForward(80); + portForward = client + .services() + .inNamespace(webPage.getMetadata().getNamespace()) + .withName(serviceName(webPage)) + .portForward(80); HttpClient httpClient = HttpClient.newBuilder().connectTimeout(Duration.ofSeconds(10)).build(); - HttpRequest request = - HttpRequest.newBuilder().GET() - .uri(new URI("http://localhost:" + portForward.getLocalPort())).build(); + HttpRequest request = HttpRequest.newBuilder() + .GET() + .uri(new URI("http://localhost:" + portForward.getLocalPort())) + .build(); return httpClient.send(request, HttpResponse.BodyHandlers.ofString()).body(); } catch (URISyntaxException | IOException | InterruptedException e) { return null; @@ -125,19 +131,17 @@ WebPage createWebPage(String title) { webPage.setSpec(new WebPageSpec()); webPage .getSpec() - .setHtml( - "\n" - + " \n" - + " " + title + "\n" - + " \n" - + " \n" - + " Hello World! \n" - + " \n" - + " "); + .setHtml("\n" + + " \n" + + " " + title + "\n" + + " \n" + + " \n" + + " Hello World! \n" + + " \n" + + " "); return webPage; } abstract AbstractOperatorExtension operator(); - } diff --git a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorE2E.java b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorE2E.java index 45fc4cd5ba..3dc01a509b 100644 --- a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorE2E.java +++ b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorE2E.java @@ -23,29 +23,30 @@ class WebPageOperatorE2E extends WebPageOperatorAbstractTest { public WebPageOperatorE2E() throws FileNotFoundException {} @RegisterExtension - AbstractOperatorExtension operator = - isLocal() - ? LocallyRunOperatorExtension.builder() - .waitForNamespaceDeletion(false) - .withReconciler(new WebPageReconciler()) - .build() - : ClusterDeployedOperatorExtension.builder() - .waitForNamespaceDeletion(false) - .withOperatorDeployment(client.load(new FileInputStream("k8s/operator.yaml")).items(), - resources -> { - Deployment deployment = (Deployment) resources.stream() - .filter(r -> r instanceof Deployment).findFirst().orElseThrow(); - Container container = - deployment.getSpec().getTemplate().getSpec().getContainers().get(0); - if (container.getEnv() == null) { - container.setEnv(new ArrayList<>()); - } - container.getEnv().add( - new EnvVar(WEBPAGE_RECONCILER_ENV, WEBPAGE_CLASSIC_RECONCILER_ENV_VALUE, - null)); - }) - .build(); - + AbstractOperatorExtension operator = isLocal() + ? LocallyRunOperatorExtension.builder() + .waitForNamespaceDeletion(false) + .withReconciler(new WebPageReconciler()) + .build() + : ClusterDeployedOperatorExtension.builder() + .waitForNamespaceDeletion(false) + .withOperatorDeployment( + client.load(new FileInputStream("k8s/operator.yaml")).items(), resources -> { + Deployment deployment = (Deployment) resources.stream() + .filter(r -> r instanceof Deployment) + .findFirst() + .orElseThrow(); + Container container = + deployment.getSpec().getTemplate().getSpec().getContainers().get(0); + if (container.getEnv() == null) { + container.setEnv(new ArrayList<>()); + } + container + .getEnv() + .add(new EnvVar( + WEBPAGE_RECONCILER_ENV, WEBPAGE_CLASSIC_RECONCILER_ENV_VALUE, null)); + }) + .build(); @Override AbstractOperatorExtension operator() { diff --git a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorManagedDependentResourcesE2E.java b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorManagedDependentResourcesE2E.java index 92b0ce0a41..7e05ad8822 100644 --- a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorManagedDependentResourcesE2E.java +++ b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorManagedDependentResourcesE2E.java @@ -21,28 +21,32 @@ class WebPageOperatorManagedDependentResourcesE2E extends WebPageOperatorAbstrac public WebPageOperatorManagedDependentResourcesE2E() throws FileNotFoundException {} @RegisterExtension - AbstractOperatorExtension operator = - isLocal() - ? LocallyRunOperatorExtension.builder() - .waitForNamespaceDeletion(false) - .withReconciler(new WebPageManagedDependentsReconciler()) - .build() - : ClusterDeployedOperatorExtension.builder() - .waitForNamespaceDeletion(false) - .withOperatorDeployment(client.load(new FileInputStream("k8s/operator.yaml")).items(), - resources -> { - Deployment deployment = (Deployment) resources.stream() - .filter(r -> r instanceof Deployment).findFirst().orElseThrow(); - Container container = - deployment.getSpec().getTemplate().getSpec().getContainers().get(0); - if (container.getEnv() == null) { - container.setEnv(new ArrayList<>()); - } - container.getEnv().add( - new EnvVar(WEBPAGE_RECONCILER_ENV, - WEBPAGE_MANAGED_DEPENDENT_RESOURCE_ENV_VALUE, null)); - }) - .build(); + AbstractOperatorExtension operator = isLocal() + ? LocallyRunOperatorExtension.builder() + .waitForNamespaceDeletion(false) + .withReconciler(new WebPageManagedDependentsReconciler()) + .build() + : ClusterDeployedOperatorExtension.builder() + .waitForNamespaceDeletion(false) + .withOperatorDeployment( + client.load(new FileInputStream("k8s/operator.yaml")).items(), resources -> { + Deployment deployment = (Deployment) resources.stream() + .filter(r -> r instanceof Deployment) + .findFirst() + .orElseThrow(); + Container container = + deployment.getSpec().getTemplate().getSpec().getContainers().get(0); + if (container.getEnv() == null) { + container.setEnv(new ArrayList<>()); + } + container + .getEnv() + .add(new EnvVar( + WEBPAGE_RECONCILER_ENV, + WEBPAGE_MANAGED_DEPENDENT_RESOURCE_ENV_VALUE, + null)); + }) + .build(); @Override AbstractOperatorExtension operator() { diff --git a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorStandaloneDependentResourcesE2E.java b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorStandaloneDependentResourcesE2E.java index 7786473257..06fe33f13b 100644 --- a/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorStandaloneDependentResourcesE2E.java +++ b/sample-operators/webpage/src/test/java/io/javaoperatorsdk/operator/sample/WebPageOperatorStandaloneDependentResourcesE2E.java @@ -14,16 +14,16 @@ class WebPageOperatorStandaloneDependentResourcesE2E extends WebPageOperatorAbst public WebPageOperatorStandaloneDependentResourcesE2E() throws FileNotFoundException {} @RegisterExtension - AbstractOperatorExtension operator = - isLocal() - ? LocallyRunOperatorExtension.builder() - .waitForNamespaceDeletion(false) - .withReconciler(new WebPageStandaloneDependentsReconciler()) - .build() - : ClusterDeployedOperatorExtension.builder() - .waitForNamespaceDeletion(false) - .withOperatorDeployment(client.load(new FileInputStream("k8s/operator.yaml")).items()) - .build(); + AbstractOperatorExtension operator = isLocal() + ? LocallyRunOperatorExtension.builder() + .waitForNamespaceDeletion(false) + .withReconciler(new WebPageStandaloneDependentsReconciler()) + .build() + : ClusterDeployedOperatorExtension.builder() + .waitForNamespaceDeletion(false) + .withOperatorDeployment( + client.load(new FileInputStream("k8s/operator.yaml")).items()) + .build(); @Override AbstractOperatorExtension operator() {