|
5 | 5 |
|
6 | 6 | import com.azure.spring.cloud.autoconfigure.implementation.context.properties.AzureGlobalProperties; |
7 | 7 | import com.azure.spring.cloud.autoconfigure.implementation.jms.properties.AzureServiceBusJmsProperties; |
| 8 | +import com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureJdbcPasswordlessProperties; |
| 9 | +import com.azure.spring.cloud.autoconfigure.implementation.passwordless.properties.AzureRedisPasswordlessProperties; |
8 | 10 | import com.azure.spring.cloud.core.implementation.util.AzurePasswordlessPropertiesUtils; |
9 | 11 | import com.azure.spring.cloud.core.provider.AzureProfileOptionsProvider; |
| 12 | +import com.azure.identity.extensions.implementation.enums.AuthProperty; |
10 | 13 | import org.junit.jupiter.api.Test; |
11 | 14 |
|
12 | 15 | import static org.junit.jupiter.api.Assertions.assertEquals; |
| 16 | +import static org.junit.jupiter.api.Assertions.assertNull; |
13 | 17 | import static org.junit.jupiter.api.Assertions.assertTrue; |
14 | 18 |
|
15 | 19 | class MergeAzureCommonPropertiesTest { |
@@ -116,4 +120,103 @@ void testGetPropertiesFromGlobalAndPasswordlessProperties() { |
116 | 120 | assertEquals("sub", result.getProfile().getSubscriptionId()); |
117 | 121 | assertEquals("global-tenant-id", result.getProfile().getTenantId()); |
118 | 122 | } |
| 123 | + |
| 124 | + @Test |
| 125 | + void testJdbcPropertiesGetCorrectScopeFromChinaCloudTypeInGlobalProperties() { |
| 126 | + AzureGlobalProperties globalProperties = new AzureGlobalProperties(); |
| 127 | + globalProperties.getProfile().setCloudType(AzureProfileOptionsProvider.CloudType.AZURE_CHINA); |
| 128 | + |
| 129 | + AzureJdbcPasswordlessProperties jdbcProperties = new AzureJdbcPasswordlessProperties(); |
| 130 | + // User has not explicitly set scopes |
| 131 | + |
| 132 | + AzureJdbcPasswordlessProperties result = new AzureJdbcPasswordlessProperties(); |
| 133 | + AzurePasswordlessPropertiesUtils.mergeAzureCommonProperties(globalProperties, jdbcProperties, result); |
| 134 | + |
| 135 | + // scopes field should be null (not explicitly set) |
| 136 | + assertNull(result.getScopes()); |
| 137 | + // effective scopes should use the merged cloud type (AZURE_CHINA) |
| 138 | + assertEquals("https://ossrdbms-aad.database.chinacloudapi.cn/.default", result.getEffectiveScopes()); |
| 139 | + // toPasswordlessProperties should include the correct cloud-type-aware scope |
| 140 | + assertEquals("https://ossrdbms-aad.database.chinacloudapi.cn/.default", |
| 141 | + result.toPasswordlessProperties().getProperty(AuthProperty.SCOPES.getPropertyKey())); |
| 142 | + assertEquals(AzureProfileOptionsProvider.CloudType.AZURE_CHINA, result.getProfile().getCloudType()); |
| 143 | + } |
| 144 | + |
| 145 | + @Test |
| 146 | + void testJdbcPropertiesExplicitScopesOverridesDefault() { |
| 147 | + AzureGlobalProperties globalProperties = new AzureGlobalProperties(); |
| 148 | + globalProperties.getProfile().setCloudType(AzureProfileOptionsProvider.CloudType.AZURE_CHINA); |
| 149 | + |
| 150 | + AzureJdbcPasswordlessProperties jdbcProperties = new AzureJdbcPasswordlessProperties(); |
| 151 | + jdbcProperties.setScopes("https://custom-scope/.default"); |
| 152 | + |
| 153 | + AzureJdbcPasswordlessProperties result = new AzureJdbcPasswordlessProperties(); |
| 154 | + AzurePasswordlessPropertiesUtils.mergeAzureCommonProperties(globalProperties, jdbcProperties, result); |
| 155 | + |
| 156 | + // Explicit scopes should be preserved |
| 157 | + assertEquals("https://custom-scope/.default", result.getScopes()); |
| 158 | + assertEquals("https://custom-scope/.default", result.getEffectiveScopes()); |
| 159 | + assertEquals("https://custom-scope/.default", |
| 160 | + result.toPasswordlessProperties().getProperty(AuthProperty.SCOPES.getPropertyKey())); |
| 161 | + } |
| 162 | + |
| 163 | + @Test |
| 164 | + void testRedisPropertiesGetCorrectScopeFromChinaCloudTypeInGlobalProperties() { |
| 165 | + AzureGlobalProperties globalProperties = new AzureGlobalProperties(); |
| 166 | + globalProperties.getProfile().setCloudType(AzureProfileOptionsProvider.CloudType.AZURE_CHINA); |
| 167 | + |
| 168 | + AzureRedisPasswordlessProperties redisProperties = new AzureRedisPasswordlessProperties(); |
| 169 | + // User has not explicitly set scopes |
| 170 | + |
| 171 | + AzureRedisPasswordlessProperties result = new AzureRedisPasswordlessProperties(); |
| 172 | + AzurePasswordlessPropertiesUtils.mergeAzureCommonProperties(globalProperties, redisProperties, result); |
| 173 | + |
| 174 | + // scopes field should be null (not explicitly set) |
| 175 | + assertNull(result.getScopes()); |
| 176 | + // effective scopes should use the merged cloud type (AZURE_CHINA) |
| 177 | + assertEquals("https://*.cacheinfra.windows.net.china:10225/appid/.default", result.getEffectiveScopes()); |
| 178 | + // toPasswordlessProperties should include the correct cloud-type-aware scope |
| 179 | + assertEquals("https://*.cacheinfra.windows.net.china:10225/appid/.default", |
| 180 | + result.toPasswordlessProperties().getProperty(AuthProperty.SCOPES.getPropertyKey())); |
| 181 | + assertEquals(AzureProfileOptionsProvider.CloudType.AZURE_CHINA, result.getProfile().getCloudType()); |
| 182 | + } |
| 183 | + |
| 184 | + @Test |
| 185 | + void testRedisPropertiesGetCorrectScopeFromUsGovCloudTypeInGlobalProperties() { |
| 186 | + AzureGlobalProperties globalProperties = new AzureGlobalProperties(); |
| 187 | + globalProperties.getProfile().setCloudType(AzureProfileOptionsProvider.CloudType.AZURE_US_GOVERNMENT); |
| 188 | + |
| 189 | + AzureRedisPasswordlessProperties redisProperties = new AzureRedisPasswordlessProperties(); |
| 190 | + // User has not explicitly set scopes |
| 191 | + |
| 192 | + AzureRedisPasswordlessProperties result = new AzureRedisPasswordlessProperties(); |
| 193 | + AzurePasswordlessPropertiesUtils.mergeAzureCommonProperties(globalProperties, redisProperties, result); |
| 194 | + |
| 195 | + // scopes field should be null (not explicitly set) |
| 196 | + assertNull(result.getScopes()); |
| 197 | + // effective scopes should use the merged cloud type (AZURE_US_GOVERNMENT) |
| 198 | + assertEquals("https://*.cacheinfra.windows.us.government.net:10225/appid/.default", result.getEffectiveScopes()); |
| 199 | + // toPasswordlessProperties should include the correct cloud-type-aware scope |
| 200 | + assertEquals("https://*.cacheinfra.windows.us.government.net:10225/appid/.default", |
| 201 | + result.toPasswordlessProperties().getProperty(AuthProperty.SCOPES.getPropertyKey())); |
| 202 | + assertEquals(AzureProfileOptionsProvider.CloudType.AZURE_US_GOVERNMENT, result.getProfile().getCloudType()); |
| 203 | + } |
| 204 | + |
| 205 | + @Test |
| 206 | + void testRedisPropertiesExplicitScopesOverridesDefault() { |
| 207 | + AzureGlobalProperties globalProperties = new AzureGlobalProperties(); |
| 208 | + globalProperties.getProfile().setCloudType(AzureProfileOptionsProvider.CloudType.AZURE_CHINA); |
| 209 | + |
| 210 | + AzureRedisPasswordlessProperties redisProperties = new AzureRedisPasswordlessProperties(); |
| 211 | + redisProperties.setScopes("https://custom-redis-scope/.default"); |
| 212 | + |
| 213 | + AzureRedisPasswordlessProperties result = new AzureRedisPasswordlessProperties(); |
| 214 | + AzurePasswordlessPropertiesUtils.mergeAzureCommonProperties(globalProperties, redisProperties, result); |
| 215 | + |
| 216 | + // Explicit scopes should be preserved |
| 217 | + assertEquals("https://custom-redis-scope/.default", result.getScopes()); |
| 218 | + assertEquals("https://custom-redis-scope/.default", result.getEffectiveScopes()); |
| 219 | + assertEquals("https://custom-redis-scope/.default", |
| 220 | + result.toPasswordlessProperties().getProperty(AuthProperty.SCOPES.getPropertyKey())); |
| 221 | + } |
119 | 222 | } |
0 commit comments