Skip to content

Commit 20abe8a

Browse files
fix: respect disabled state for OAuth2 resources
1 parent 8746c0f commit 20abe8a

File tree

2 files changed

+44
-6
lines changed

2 files changed

+44
-6
lines changed

gravitee-apim-gateway/gravitee-apim-gateway-resource/src/main/java/io/gravitee/gateway/resource/internal/ResourceManagerImpl.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,10 @@ protected void initialize() {
6363
if (legacyMode) {
6464
super.initialize();
6565
} else {
66-
// Unlike v4 resource, v2 Resource enabled flag has never been used. Keep this unchanged to avoid unexpected behavior or breaking changes.
6766
reactable
6867
.dependencies(Resource.class)
68+
.stream()
69+
.filter(Resource::isEnabled)
6970
.forEach(resource -> {
7071
log.debug("Loading resource {} for {}", resource.getName(), reactable);
7172
final io.gravitee.resource.api.Resource resourceInstance = resourceLoader.load(

gravitee-apim-gateway/gravitee-apim-gateway-resource/src/test/java/io/gravitee/gateway/resource/internal/ResourceManagerImplTest.java

Lines changed: 42 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -156,14 +156,11 @@ void should_not_ignore_when_resource_is_disabled() {
156156
final ResourcePlugin resourcePlugin = mock(ResourcePlugin.class);
157157
resource.setEnabled(false);
158158

159-
when(resourcePlugin.resource()).thenReturn(Fake.class);
160159
when(reactable.dependencies(Resource.class)).thenReturn(Set.of(resource));
161-
when(resourcePluginManager.get(resource.getType())).thenReturn(resourcePlugin);
162-
163160
cut.initialize();
164161

165-
assertThat(cut.containsResource(resource.getName())).isTrue();
166-
assertThat(cut.getResource(resource.getName())).isExactlyInstanceOf(Fake.class);
162+
assertThat(cut.containsResource(resource.getName())).isFalse();
163+
assertThat(cut.getResource(resource.getName())).isNull();
167164
}
168165

169166
@Test
@@ -240,6 +237,46 @@ void should_initialize_resource_that_use_deployment_context() {
240237
assertThat(((FakeWithDeploymentContext) r).getDeploymentContext()).isNotNull().isSameAs(deploymentContext);
241238
}
242239

240+
@Test
241+
void should_initialize_enabled_resource_and_not_load_disabled_resource() {
242+
final Resource enabledResource = buildResource();
243+
enabledResource.setName("enabled-resource");
244+
enabledResource.setEnabled(true);
245+
246+
final Resource disabledResource = buildResource();
247+
disabledResource.setName("disabled-resource");
248+
disabledResource.setType("test-disabled");
249+
disabledResource.setEnabled(false);
250+
251+
final FakeConfiguration fakeConfiguration = new FakeConfiguration();
252+
final ResourcePlugin resourcePlugin = mock(ResourcePlugin.class);
253+
254+
when(resourcePlugin.resource()).thenReturn(Fake.class);
255+
when(reactable.dependencies(Resource.class)).thenReturn(Set.of(enabledResource, disabledResource));
256+
when(resourcePluginManager.get(anyString())).thenReturn(resourcePlugin);
257+
when(resourcePlugin.configuration()).thenReturn(FakeConfiguration.class);
258+
when(resourceConfigurationFactory.create(FakeConfiguration.class, enabledResource.getConfiguration())).thenReturn(
259+
fakeConfiguration
260+
);
261+
262+
cut.initialize();
263+
264+
// Only enabled resource should be loaded due to .filter(Resource::isEnabled)
265+
assertThat(cut.containsResource(enabledResource.getName())).isTrue();
266+
assertThat(cut.containsResource(disabledResource.getName())).isFalse();
267+
268+
final Object enabledR = cut.getResource(enabledResource.getName());
269+
assertThat(enabledR).isExactlyInstanceOf(Fake.class);
270+
assertThat(((Fake) enabledR).configuration()).isSameAs(fakeConfiguration);
271+
272+
final Object disabledR = cut.getResource(disabledResource.getName());
273+
assertThat(disabledR).isNull();
274+
275+
// Verify only the enabled resource was loaded
276+
verify(resourcePluginManager).get(enabledResource.getType());
277+
verify(resourcePluginManager, never()).get(disabledResource.getType());
278+
}
279+
243280
private Resource buildResource() {
244281
final Resource resource = new Resource();
245282
resource.setType("test");

0 commit comments

Comments
 (0)