diff --git a/sdk/spring/CHANGELOG.md b/sdk/spring/CHANGELOG.md index 3a65e0f34f4d..1efea2c99bfb 100644 --- a/sdk/spring/CHANGELOG.md +++ b/sdk/spring/CHANGELOG.md @@ -29,6 +29,7 @@ This section includes changes in `spring-cloud-azure-appconfiguration-config` mo #### Bugs Fixed - Fixed bug where `spring.cloud.azure.appconfiguration.enabled=false` was ignored in the new major version. [#47029](https://github.com/Azure/azure-sdk-for-java/pull/47029) +- Fixed bug where connection string validation occurred even when `spring.cloud.azure.appconfiguration.enabled` is `false`. ### Azure Spring Data Cosmos This section includes changes in `azure-spring-data-cosmos` module. diff --git a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java index b4ecd1b477ba..6a0ebe649ad1 100644 --- a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java +++ b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/main/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolver.java @@ -57,8 +57,16 @@ public boolean isResolvable(ConfigDataLocationResolverContext context, ConfigDat return false; } + Binder binder = context.getBinder(); + + // Check if Azure App Configuration is enabled + Boolean enabled = binder.bind(AppConfigurationProperties.CONFIG_PREFIX + ".enabled", Boolean.class).orElse(true); + if (!enabled) { + return false; + } + // Check if the configuration properties for Azure App Configuration are present - return hasValidStoreConfiguration(context.getBinder()); + return hasValidStoreConfiguration(binder); } /** diff --git a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java index 04cc61b72850..a3f3655b20c7 100644 --- a/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java +++ b/sdk/spring/spring-cloud-azure-appconfiguration-config/src/test/java/com/azure/spring/cloud/appconfiguration/config/implementation/AzureAppConfigDataLocationResolverTest.java @@ -47,6 +47,12 @@ class AzureAppConfigDataLocationResolverTest { @Mock BindResult validResult; + @Mock + BindResult enabledTrueResult; + + @Mock + BindResult enabledFalseResult; + private static final String PREFIX = "azureAppConfiguration:"; private static final String INVALID_PREFIX = "someOtherPrefix:"; @@ -80,6 +86,9 @@ void testIsResolvableWithCorrectPrefix() { ConfigDataLocation location = ConfigDataLocation.of(PREFIX); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(validResult); when(validResult.orElse("")).thenReturn("https://test.config.io"); @@ -95,6 +104,9 @@ void testIsResolvableWithValidConnectionStringConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(emptyResult.orElse("")).thenReturn(""); @@ -108,11 +120,28 @@ void testIsResolvableWithValidConnectionStringConfiguration() { assertTrue(result, "Resolver should accept locations with valid connection-string configuration"); } + @Test + void testIsResolvableWhenAppConfigurationIsDisabled() { + ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); + + when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledFalseResult); + when(enabledFalseResult.orElse(true)).thenReturn(false); + + boolean result = resolver.isResolvable(mockContext, location); + + assertFalse(result, "Resolver should reject locations when App Configuration is disabled"); + } + @Test void testIsResolvableWithValidEndpointsConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(emptyResult.orElse("")).thenReturn(""); @@ -134,6 +163,9 @@ void testIsResolvableWithValidConnectionStringsConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].connection-string", String.class)) @@ -156,6 +188,9 @@ void testIsResolvableWithNoValidConfiguration() { ConfigDataLocation location = ConfigDataLocation.of("azureAppConfiguration:"); when(mockContext.getBinder()).thenReturn(mockBinder); + when(mockBinder.bind("spring.cloud.azure.appconfiguration.enabled", Boolean.class)) + .thenReturn(enabledTrueResult); + when(enabledTrueResult.orElse(true)).thenReturn(true); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].endpoint", String.class)) .thenReturn(emptyResult); when(mockBinder.bind("spring.cloud.azure.appconfiguration.stores[0].connection-string", String.class))