diff --git a/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/main/java/io/gravitee/gateway/resource/internal/ResourceManagerImpl.java b/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/main/java/io/gravitee/gateway/resource/internal/ResourceManagerImpl.java index da4efc7f0f2..4184bcccc2c 100644 --- a/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/main/java/io/gravitee/gateway/resource/internal/ResourceManagerImpl.java +++ b/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/main/java/io/gravitee/gateway/resource/internal/ResourceManagerImpl.java @@ -63,9 +63,10 @@ protected void initialize() { if (legacyMode) { super.initialize(); } else { - // Unlike v4 resource, v2 Resource enabled flag has never been used. Keep this unchanged to avoid unexpected behavior or breaking changes. reactable .dependencies(Resource.class) + .stream() + .filter(Resource::isEnabled) .forEach(resource -> { log.debug("Loading resource {} for {}", resource.getName(), reactable); final io.gravitee.resource.api.Resource resourceInstance = resourceLoader.load( diff --git a/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/test/java/io/gravitee/gateway/resource/internal/ResourceManagerImplTest.java b/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/test/java/io/gravitee/gateway/resource/internal/ResourceManagerImplTest.java index bd9b48601a2..057176135ab 100644 --- a/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/test/java/io/gravitee/gateway/resource/internal/ResourceManagerImplTest.java +++ b/gravitee-apim-gateway/gravitee-apim-gateway-resource/src/test/java/io/gravitee/gateway/resource/internal/ResourceManagerImplTest.java @@ -156,14 +156,11 @@ void should_not_ignore_when_resource_is_disabled() { final ResourcePlugin resourcePlugin = mock(ResourcePlugin.class); resource.setEnabled(false); - when(resourcePlugin.resource()).thenReturn(Fake.class); when(reactable.dependencies(Resource.class)).thenReturn(Set.of(resource)); - when(resourcePluginManager.get(resource.getType())).thenReturn(resourcePlugin); - cut.initialize(); - assertThat(cut.containsResource(resource.getName())).isTrue(); - assertThat(cut.getResource(resource.getName())).isExactlyInstanceOf(Fake.class); + assertThat(cut.containsResource(resource.getName())).isFalse(); + assertThat(cut.getResource(resource.getName())).isNull(); } @Test @@ -240,6 +237,46 @@ void should_initialize_resource_that_use_deployment_context() { assertThat(((FakeWithDeploymentContext) r).getDeploymentContext()).isNotNull().isSameAs(deploymentContext); } + @Test + void should_initialize_enabled_resource_and_not_load_disabled_resource() { + final Resource enabledResource = buildResource(); + enabledResource.setName("enabled-resource"); + enabledResource.setEnabled(true); + + final Resource disabledResource = buildResource(); + disabledResource.setName("disabled-resource"); + disabledResource.setType("test-disabled"); + disabledResource.setEnabled(false); + + final FakeConfiguration fakeConfiguration = new FakeConfiguration(); + final ResourcePlugin resourcePlugin = mock(ResourcePlugin.class); + + when(resourcePlugin.resource()).thenReturn(Fake.class); + when(reactable.dependencies(Resource.class)).thenReturn(Set.of(enabledResource, disabledResource)); + when(resourcePluginManager.get(anyString())).thenReturn(resourcePlugin); + when(resourcePlugin.configuration()).thenReturn(FakeConfiguration.class); + when(resourceConfigurationFactory.create(FakeConfiguration.class, enabledResource.getConfiguration())).thenReturn( + fakeConfiguration + ); + + cut.initialize(); + + // Only enabled resource should be loaded due to .filter(Resource::isEnabled) + assertThat(cut.containsResource(enabledResource.getName())).isTrue(); + assertThat(cut.containsResource(disabledResource.getName())).isFalse(); + + final Object enabledR = cut.getResource(enabledResource.getName()); + assertThat(enabledR).isExactlyInstanceOf(Fake.class); + assertThat(((Fake) enabledR).configuration()).isSameAs(fakeConfiguration); + + final Object disabledR = cut.getResource(disabledResource.getName()); + assertThat(disabledR).isNull(); + + // Verify only the enabled resource was loaded + verify(resourcePluginManager).get(enabledResource.getType()); + verify(resourcePluginManager, never()).get(disabledResource.getType()); + } + private Resource buildResource() { final Resource resource = new Resource(); resource.setType("test");