diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java index a93e54176317..0a778f952e23 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/AADSeleniumITHelper.java @@ -1,5 +1,6 @@ package com.azure.test.aad.selenium; +import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.common.SeleniumITHelper; import org.openqa.selenium.By; import org.openqa.selenium.Keys; @@ -8,11 +9,7 @@ import java.util.HashMap; import java.util.Map; -import static com.azure.spring.test.EnvironmentVariable.AAD_SINGLE_TENANT_CLIENT_ID; -import static com.azure.spring.test.EnvironmentVariable.AAD_SINGLE_TENANT_CLIENT_SECRET; -import static com.azure.spring.test.EnvironmentVariable.AAD_TENANT_ID_1; -import static com.azure.spring.test.EnvironmentVariable.AAD_USER_NAME_1; -import static com.azure.spring.test.EnvironmentVariable.AAD_USER_PASSWORD_1; +import static com.azure.spring.test.EnvironmentVariable.*; import static org.openqa.selenium.support.ui.ExpectedConditions.presenceOfElementLocated; public class AADSeleniumITHelper extends SeleniumITHelper { @@ -27,6 +24,8 @@ public static Map createDefaultProperties() { defaultProperties.put("azure.activedirectory.client-secret", AAD_SINGLE_TENANT_CLIENT_SECRET); defaultProperties.put("azure.activedirectory.user-group.allowed-groups", "group1"); defaultProperties.put("azure.activedirectory.post-logout-redirect-uri", "http://localhost:${server.port}"); + defaultProperties.put("azure.activedirectory.base-uri", AzureCloudUrls.getBaseUrl(AZURE_CLOUD_TYPE)); + defaultProperties.put("azure.activedirectory.graph-base-uri", AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE)); return defaultProperties; } @@ -58,15 +57,15 @@ public String logoutAndGetLogoutUsername() { String cssSelector = "div[data-test-id='" + username + "']"; wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector(cssSelector))).click(); String id = wait.until(ExpectedConditions.elementToBeClickable(By.cssSelector("div[tabindex='0']"))) - .getAttribute("data-test-id"); + .getAttribute("data-test-id"); return id; } public String httpGetWithIncrementalConsent(String endpoint) { driver.get((app.root() + endpoint)); - String oauth2AuthorizationUrlFraction = String.format("https://login.microsoftonline.com/%s/oauth2/v2.0/" - + "authorize?", AAD_TENANT_ID_1); + String oauth2AuthorizationUrlFraction = String.format(AzureCloudUrls.getBaseUrl(AZURE_CLOUD_TYPE) + + "%s/oauth2/v2.0/" + "authorize?", AAD_TENANT_ID_1); wait.until(ExpectedConditions.urlContains(oauth2AuthorizationUrlFraction)); String onDemandAuthorizationUrl = driver.getCurrentUrl(); diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/multitenant/AADMultipleTenantIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/multitenant/AADMultipleTenantIT.java index a1bb83fd131e..15ac2463bb1e 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/multitenant/AADMultipleTenantIT.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/multitenant/AADMultipleTenantIT.java @@ -17,13 +17,10 @@ import org.springframework.web.bind.annotation.RestController; import java.security.Principal; -import java.util.HashMap; import java.util.Map; -import static com.azure.spring.test.EnvironmentVariable.AAD_MULTI_TENANT_CLIENT_ID; -import static com.azure.spring.test.EnvironmentVariable.AAD_MULTI_TENANT_CLIENT_SECRET; -import static com.azure.spring.test.EnvironmentVariable.AAD_USER_NAME_2; -import static com.azure.spring.test.EnvironmentVariable.AAD_USER_PASSWORD_2; +import static com.azure.spring.test.EnvironmentVariable.*; +import static com.azure.test.aad.selenium.AADSeleniumITHelper.createDefaultProperties; public class AADMultipleTenantIT { private static final Logger LOGGER = LoggerFactory.getLogger(AADMultipleTenantIT.class); @@ -31,9 +28,10 @@ public class AADMultipleTenantIT { @Test public void multipleTenantTest() { - Map properties = new HashMap<>(); + Map properties = createDefaultProperties(); properties.put("azure.activedirectory.client-id", AAD_MULTI_TENANT_CLIENT_ID); properties.put("azure.activedirectory.client-secret", AAD_MULTI_TENANT_CLIENT_SECRET); + aadSeleniumITHelper = new AADSeleniumITHelper(DumbApp.class, properties, AAD_USER_NAME_2, AAD_USER_PASSWORD_2); aadSeleniumITHelper.logIn(); diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java index 920776512d0f..df8c287173cf 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/issuedat/AADOauth2AuthorizedClientCachedIT.java @@ -3,6 +3,7 @@ package com.azure.test.aad.selenium.oauth2client.issuedat; +import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.selenium.AADSeleniumITHelper; import org.junit.After; import org.junit.Assert; @@ -19,6 +20,7 @@ import java.util.Map; import java.util.Optional; +import static com.azure.spring.test.EnvironmentVariable.AZURE_CLOUD_TYPE; import static com.azure.test.aad.selenium.AADSeleniumITHelper.createDefaultProperties; public class AADOauth2AuthorizedClientCachedIT { @@ -28,15 +30,14 @@ public class AADOauth2AuthorizedClientCachedIT { @Test public void testOauth2AuthorizedClientCached() { Map properties = createDefaultProperties(); - properties.put( - "azure.activedirectory.authorization-clients.office.scopes", - "https://manage.office.com/ActivityFeed.Read, " - + "https://manage.office.com/ActivityFeed.ReadDlp, " - + "https://manage.office.com/ServiceHealth.Read"); - properties.put( - "azure.activedirectory.authorization-clients.graph.scopes", - "https://graph.microsoft.com/User.Read, https://graph.microsoft.com/Directory.Read.All"); + String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); + String armClientScope = armClientUrl + "user_impersonation"; + properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope); + + String graphBaseUrl = AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE); + properties.put("azure.activedirectory.authorization-clients.graph.scopes", + graphBaseUrl + "User.Read, " + graphBaseUrl + "Directory.Read.All"); aadSeleniumITHelper = new AADSeleniumITHelper(DumbApp.class, properties); aadSeleniumITHelper.logIn(); @@ -50,8 +51,8 @@ public void testOauth2AuthorizedClientCached() { aadSeleniumITHelper.httpGet("accessTokenIssuedAt/graph")); Assert.assertEquals( - aadSeleniumITHelper.httpGet("accessTokenIssuedAt/office"), - aadSeleniumITHelper.httpGet("accessTokenIssuedAt/office")); + aadSeleniumITHelper.httpGet("accessTokenIssuedAt/arm"), + aadSeleniumITHelper.httpGet("accessTokenIssuedAt/arm")); } @After @@ -84,9 +85,9 @@ public String graph( .orElse(null); } - @GetMapping(value = "accessTokenIssuedAt/office") - public String office( - @RegisteredOAuth2AuthorizedClient("office") OAuth2AuthorizedClient authorizedClient) { + @GetMapping(value = "accessTokenIssuedAt/arm") + public String arm( + @RegisteredOAuth2AuthorizedClient("arm") OAuth2AuthorizedClient authorizedClient) { return Optional.of(authorizedClient) .map(OAuth2AuthorizedClient::getAccessToken) .map(OAuth2AccessToken::getIssuedAt) diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java index eb0f4e16e017..0f6146e53030 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/oauth2client/scopes/AADAccessTokenScopesIT.java @@ -3,12 +3,8 @@ package com.azure.test.aad.selenium.oauth2client.scopes; -import static com.azure.test.aad.selenium.AADSeleniumITHelper.createDefaultProperties; - +import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.selenium.AADSeleniumITHelper; -import java.util.Map; -import java.util.Optional; -import java.util.Set; import org.junit.After; import org.junit.Assert; import org.junit.Test; @@ -20,6 +16,13 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; +import java.util.Map; +import java.util.Optional; +import java.util.Set; + +import static com.azure.spring.test.EnvironmentVariable.AZURE_CLOUD_TYPE; +import static com.azure.test.aad.selenium.AADSeleniumITHelper.createDefaultProperties; + public class AADAccessTokenScopesIT { private AADSeleniumITHelper aadSeleniumITHelper; @@ -27,30 +30,29 @@ public class AADAccessTokenScopesIT { @Test public void testAccessTokenScopes() { Map properties = createDefaultProperties(); - properties.put( - "azure.activedirectory.authorization-clients.office.scopes", - "https://manage.office.com/ActivityFeed.Read, https://manage.office.com/ActivityFeed.ReadDlp, " - + "https://manage.office.com/ServiceHealth.Read"); - properties.put( - "azure.activedirectory.authorization-clients.graph.scopes", - "https://graph.microsoft.com/User.Read, https://graph.microsoft.com/Directory.Read.All"); + String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); + String armClientScope = armClientUrl + "user_impersonation"; + properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope); + String graphBaseUrl = AzureCloudUrls.getGraphBaseUrl(AZURE_CLOUD_TYPE); + properties.put("azure.activedirectory.authorization-clients.graph.scopes", + graphBaseUrl + "User.Read, " + graphBaseUrl + "Directory.Read.All"); + aadSeleniumITHelper = new AADSeleniumITHelper(DumbApp.class, properties); aadSeleniumITHelper.logIn(); + String httpResponse = aadSeleniumITHelper.httpGet("accessTokenScopes/azure"); Assert.assertTrue(httpResponse.contains("profile")); - Assert.assertTrue(httpResponse.contains("https://graph.microsoft.com/Directory.Read.All")); - Assert.assertTrue(httpResponse.contains("https://graph.microsoft.com/User.Read")); + Assert.assertTrue(httpResponse.contains("Directory.Read.All")); + Assert.assertTrue(httpResponse.contains("User.Read")); httpResponse = aadSeleniumITHelper.httpGet("accessTokenScopes/graph"); Assert.assertTrue(httpResponse.contains("profile")); - Assert.assertTrue(httpResponse.contains("https://graph.microsoft.com/Directory.Read.All")); - Assert.assertTrue(httpResponse.contains("https://graph.microsoft.com/User.Read")); + Assert.assertTrue(httpResponse.contains("Directory.Read.All")); + Assert.assertTrue(httpResponse.contains("User.Read")); - httpResponse = aadSeleniumITHelper.httpGet("accessTokenScopes/office"); + httpResponse = aadSeleniumITHelper.httpGet("accessTokenScopes/arm"); Assert.assertFalse(httpResponse.contains("profile")); - Assert.assertTrue(httpResponse.contains("https://manage.office.com/ActivityFeed.Read")); - Assert.assertTrue(httpResponse.contains("https://manage.office.com/ActivityFeed.ReadDlp")); - Assert.assertTrue(httpResponse.contains("https://manage.office.com/ServiceHealth.Read")); + Assert.assertTrue(httpResponse.contains("user_impersonation")); httpResponse = aadSeleniumITHelper.httpGet("notExist"); Assert.assertNotEquals(httpResponse, "notExist"); @@ -84,9 +86,9 @@ public Set graph( .orElse(null); } - @GetMapping(value = "accessTokenScopes/office") - public Set office( - @RegisteredOAuth2AuthorizedClient("office") OAuth2AuthorizedClient authorizedClient) { + @GetMapping(value = "accessTokenScopes/arm") + public Set arm( + @RegisteredOAuth2AuthorizedClient("arm") OAuth2AuthorizedClient authorizedClient) { return Optional.of(authorizedClient) .map(OAuth2AuthorizedClient::getAccessToken) .map(OAuth2AccessToken::getScopes) diff --git a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java index 81957cfaa9ae..4408caa6b78a 100644 --- a/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java +++ b/sdk/spring/azure-spring-boot-test-aad/src/test/java/com/azure/test/aad/selenium/ondemand/AADOnDemandIT.java @@ -3,6 +3,7 @@ package com.azure.test.aad.selenium.ondemand; +import com.azure.spring.utils.AzureCloudUrls; import com.azure.test.aad.selenium.AADSeleniumITHelper; import org.junit.After; import org.junit.Assert; @@ -19,8 +20,7 @@ import java.util.Map; -import static com.azure.spring.test.EnvironmentVariable.AAD_USER_NAME_ON_DEMAND; -import static com.azure.spring.test.EnvironmentVariable.AAD_USER_PASSWORD_ON_DEMAND; +import static com.azure.spring.test.EnvironmentVariable.*; import static com.azure.test.aad.selenium.AADSeleniumITHelper.createDefaultProperties; public class AADOnDemandIT { @@ -29,11 +29,11 @@ public class AADOnDemandIT { @Test public void onDemandTest() { + String armClientUrl = AzureCloudUrls.getServiceManagementBaseUrl(AZURE_CLOUD_TYPE); + String armClientScope = armClientUrl + "user_impersonation"; Map properties = createDefaultProperties(); - properties.put("azure.activedirectory.authorization-clients.arm.scopes", - "https://management.azure.com/user_impersonation"); + properties.put("azure.activedirectory.authorization-clients.arm.scopes", armClientScope); properties.put("azure.activedirectory.authorization-clients.arm.on-demand", "true"); - LOGGER.info(AAD_USER_NAME_ON_DEMAND); aadSeleniumITHelper = new AADSeleniumITHelper(DumbApp.class, properties, AAD_USER_NAME_ON_DEMAND, AAD_USER_PASSWORD_ON_DEMAND); @@ -43,7 +43,7 @@ public void onDemandTest() { Assert.assertTrue(httpResponse.contains("azure")); String incrementalConsentUrl = aadSeleniumITHelper.httpGetWithIncrementalConsent("api/arm"); - Assert.assertTrue(incrementalConsentUrl.contains("https://management.azure.com/user_impersonation")); + Assert.assertTrue(incrementalConsentUrl.contains(armClientScope)); httpResponse = aadSeleniumITHelper.httpGet("api/arm"); Assert.assertTrue(httpResponse.contains("arm")); @@ -71,4 +71,4 @@ public ResponseEntity arm( return ResponseEntity.ok("arm"); } } -} \ No newline at end of file +} diff --git a/sdk/spring/azure-spring-boot-test-core/src/main/java/com/azure/spring/test/EnvironmentVariable.java b/sdk/spring/azure-spring-boot-test-core/src/main/java/com/azure/spring/test/EnvironmentVariable.java index b8e9d50334ee..58bd67766613 100644 --- a/sdk/spring/azure-spring-boot-test-core/src/main/java/com/azure/spring/test/EnvironmentVariable.java +++ b/sdk/spring/azure-spring-boot-test-core/src/main/java/com/azure/spring/test/EnvironmentVariable.java @@ -23,6 +23,7 @@ public class EnvironmentVariable { public static final String AAD_USER_PASSWORD_1 = System.getenv("AAD_USER_PASSWORD_1"); public static final String AAD_USER_PASSWORD_2 = System.getenv("AAD_USER_PASSWORD_2"); public static final String AAD_USER_PASSWORD_ON_DEMAND = System.getenv("AAD_USER_PASSWORD_ON_DEMAND"); + public static final String AZURE_CLOUD_TYPE = System.getenv("AZURE_CLOUD_TYPE"); public static final String AZURE_KEYVAULT2_URI = System.getenv("AZURE_KEYVAULT2_URI"); public static final String AZURE_KEYVAULT_URI = System.getenv("AZURE_KEYVAULT_URI"); public static final String AZURE_STORAGE_ACCOUNT_KEY = System.getenv("AZURE_STORAGE_ACCOUNT_KEY"); diff --git a/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java new file mode 100644 index 000000000000..351fc91c9083 --- /dev/null +++ b/sdk/spring/azure-spring-boot/src/main/java/com/azure/spring/utils/AzureCloudUrls.java @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +package com.azure.spring.utils; + +/** + * Util class for Azure urls + */ +public class AzureCloudUrls { + public static String getBaseUrl(String cloudType) { + return cloudType.equals("Global") ? "https://login.microsoftonline.com/" + : "https://login.partner.microsoftonline.cn/"; + } + + public static String getGraphBaseUrl(String cloudType) { + return cloudType.equals("Global") ? "https://graph.microsoft.com/" + : "https://microsoftgraph.chinacloudapi.cn/"; + } + + public static String getServiceManagementBaseUrl(String cloudType) { + return cloudType.equals("Global") ? "https://management.azure.com/" + : "https://management.chinacloudapi.cn/"; + } +} diff --git a/sdk/spring/spring-test-template.yml b/sdk/spring/spring-test-template.yml new file mode 100644 index 000000000000..0f1a15a86fac --- /dev/null +++ b/sdk/spring/spring-test-template.yml @@ -0,0 +1,138 @@ +parameters: + AadOnDemandUserDisplayName: 'user$(System.JobId)-$(Build.BuildId)' + TestName: 'LiveTestInAzureGlobal' + Clouds: 'Public' + TestResourceDirectories: + - spring/azure-spring-boot-test-keyvault + - spring/azure-spring-boot-test-servicebus-jms + - spring/azure-spring-boot-test-storage + - spring/azure-spring-cloud-test-eventhubs + Artifacts: + - name: azure-spring-boot-test-application + groupId: com.azure.spring + safeName: azurespringboottestapplication + - name: azure-spring-boot-test-core + groupId: com.azure.spring + safeName: azurespringboottestcore + - name: azure-spring-boot-test-aad + groupId: com.azure.spring + safeName: azurespringboottestaad + - name: azure-spring-boot-test-aad-b2c + groupId: com.azure.spring + safeName: azurespringboottestaadb2c + - name: azure-spring-boot-test-aad-obo + groupId: com.azure.spring + safeName: azurespringboottestaadobo + - name: azure-spring-boot-test-aad-resource-server + groupId: com.azure.spring + safeName: azurespringboottestaadresourceserver + - name: azure-spring-boot-test-aad-resource-server-by-filter + groupId: com.azure.spring + safeName: azurespringboottestaadresourceserverbyfilter + - name: azure-spring-boot-test-keyvault + groupId: com.azure.spring + safeName: azurespringboottestkeyvault + - name: azure-spring-boot-test-keyvault-reactive + groupId: com.azure.spring + safeName: azurespringboottestkeyvaultreactive + - name: azure-spring-boot-test-parent + groupId: com.azure.spring + safeName: azurespringboottestparent + - name: azure-spring-boot-test-servicebus-jms + groupId: com.azure.spring + safeName: azurespringboottestservicebusjms + - name: azure-spring-cloud-test-eventhubs + groupId: com.azure.spring + safeName: azurespringcloudtesteventhubs + - name: azure-spring-boot-test-storage + groupId: com.azure.spring + safeName: azurespringbootteststorage + EnvVars: + AZURE_TEST_MODE: LIVE + AAD_TENANT_ID_1: $(java-spring-aad-tenant-id-1) + AAD_USER_NAME_1: $(java-spring-aad-user-name-1) + AAD_USER_PASSWORD_1: $(java-spring-aad-user-password-1) + AAD_TENANT_ID_2: $(java-spring-aad-tenant-id-2) + AAD_USER_NAME_2: $(java-spring-aad-user-name-2) + AAD_USER_PASSWORD_2: $(java-spring-aad-user-password-2) + AAD_MULTI_TENANT_CLIENT_ID: $(java-spring-aad-multi-tenant-client-id) + AAD_MULTI_TENANT_CLIENT_SECRET: $(java-spring-aad-multi-tenant-client-secret) + AAD_SINGLE_TENANT_CLIENT_ID: $(java-spring-aad-single-tenant-id) + AAD_SINGLE_TENANT_CLIENT_SECRET: $(java-spring-aad-single-tenant-secret) + AAD_SINGLE_TENANT_CLIENT_ID_WITH_ROLE: $(java-spring-aad-single-tenant-id-with-role) + AAD_SINGLE_TENANT_CLIENT_SECRET_WITH_ROLE: $(java-spring-aad-single-tenant-secret-with-role) + AAD_B2C_USER_EMAIL: "chrisgreen@abc.com" + AAD_B2C_TENANT: "B2CITTest1" + AAD_B2C_REPLY_URL: "http://localhost:8080/login/oauth2/code/" + AAD_B2C_SIGN_UP_OR_SIGN_IN: "B2C_1_signupsignin1" + AAD_B2C_PROFILE_EDIT: "B2C_1_profileediting1" + AAD_B2C_USER_PASSWORD: $(java-spring-aad-b2c-user-password) + AAD_B2C_CLIENT_ID: $(java-spring-aad-b2c-client-id) + AAD_B2C_CLIENT_SECRET: $(java-spring-aad-b2c-client-secret) + AAD_USER_NAME_ON_DEMAND: "user$(System.JobId)-$(Build.BuildId)@aadittest1.onmicrosoft.com" + AAD_USER_PASSWORD_ON_DEMAND: $(java-spring-aad-user-password-1) + AAD_SERVICE_PRICIPAL_CLIENT_ID: $(java-spring-aad-service-principal-client-id) + AAD_SERVICE_PRICIPAL_CLIENT_SECRET: $(java-spring-aad-service-principal-client-secret) + AZURE_CLOUD_TYPE: "Global" + +stages: + - template: ../../eng/pipelines/templates/stages/archetype-sdk-tests.yml + parameters: + TimeoutInMinutes: 240 + ServiceDirectory: spring + EnvVars: ${{ parameters.EnvVars }} + TestName: ${{ parameters.TestName }} + Clouds: ${{ parameters.Clouds }} + TestResourceDirectories: ${{ parameters.TestResourceDirectories }} + Artifacts: ${{ parameters.Artifacts }} + TestStepMavenInputs: + options: '-Dmaven.wagon.http.pool=false $(DefaultOptions) -Dmaven.javadoc.skip=true -Drevapi.skip=true -DskipSpringITs=false -pl $(ProjectList)' + goals: "verify" + PreSteps: + - script: | + az cloud set --name AzureChinaCloud + condition: endsWith('${{ parameters.EnvVars.AAD_USER_NAME_ON_DEMAND }}', 'cn') + displayName: 'Switch to Azure China Cloud' + - powershell: | + az login --allow-no-subscriptions --tenant ${{ parameters.EnvVars.AAD_TENANT_ID_1 }} --service-principal -u ${{ parameters.EnvVars.AAD_SERVICE_PRICIPAL_CLIENT_ID }} -p ${{ parameters.EnvVars.AAD_SERVICE_PRICIPAL_CLIENT_SECRET }} + az ad user create --user-principal-name "${{ parameters.EnvVars.AAD_USER_NAME_ON_DEMAND }}" --display-name "${{ parameters.AadOnDemandUserDisplayName }}" --password "${{ parameters.EnvVars.AAD_USER_PASSWORD_ON_DEMAND }}" --force-change-password-next-login false + displayName: 'Create On-demand test user' + + PostSteps: + - powershell: | + az ad user delete --id "${{ parameters.EnvVars.AAD_USER_NAME_ON_DEMAND }}" + az ad user create --user-principal-name "${{ parameters.EnvVars.AAD_USER_NAME_ON_DEMAND }}" --display-name "${{ parameters.AadOnDemandUserDisplayName }}" --password "${{ parameters.EnvVars.AAD_USER_PASSWORD_ON_DEMAND }}" --force-change-password-next-login false + condition: always() + displayName: 'Delete On-demand test user and create again' + + - script: | + python --version + python -m pip install setuptools termcolor in_place + python sdk/spring/scripts/replace_util.py --module spring --log debug --color false + displayName: 'Run replace_util.py' + + - task: Maven@3 + displayName: 'Build and Install again, JDK Version: $(JavaBuildVersion)' + inputs: + mavenPomFile: pom.xml + goals: 'install' + options: '$(DefaultOptions) -DskipTests -Dgpg.skip -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Dspotbugs.skip=true -Drevapi.skip=true -pl $(ProjectList) -am' + mavenOptions: '$(MemoryOptions) $(LoggingOptions)' + javaHomeOption: 'JDKVersion' + jdkVersionOption: $(JavaBuildVersion) + jdkArchitectureOption: 'x64' + publishJUnitResults: false + + - task: Maven@3 + displayName: 'Run tests again, JDK Version: $(JavaBuildVersion)' + inputs: + mavenPomFile: pom.xml + goals: verify + options: '-Dmaven.wagon.http.pool=false $(DefaultOptions) -Dmaven.javadoc.skip=true -Drevapi.skip=true -DskipSpringITs=false -pl $(ProjectList)' + env: ${{ parameters.EnvVars }} + + - powershell: | + az ad user delete --id "${{ parameters.EnvVars.AAD_USER_NAME_ON_DEMAND }}" + az logout + condition: always() + displayName: 'Delete On-demand test user' diff --git a/sdk/spring/tests.yml b/sdk/spring/tests.yml index fad53b75c4b6..04e939bd9238 100644 --- a/sdk/spring/tests.yml +++ b/sdk/spring/tests.yml @@ -1,171 +1,34 @@ trigger: none -parameters: -- name: AadOnDemandUserName - type: string - default: 'user$(System.JobId)-$(Build.BuildId)@aadittest1.onmicrosoft.com' -- name: AadOnDemandUserDisplayName - type: string - default: 'user$(System.JobId)-$(Build.BuildId)' -- name: AadOnDemandUserNameChina - type: string - default: 'user$(System.JobId)-$(Build.BuildId)@cnaadittest1.partner.onmschina.cn' - stages: - - template: /eng/pipelines/templates/stages/archetype-sdk-tests.yml + - template: spring-test-template.yml + + - template: spring-test-template.yml parameters: - TimeoutInMinutes: 240 - ServiceDirectory: spring + TestName: LiveTestInAzureChina + Clouds: China TestResourceDirectories: - - spring/azure-spring-boot-test-cosmos - - spring/azure-spring-boot-test-servicebus-jms - - spring/azure-spring-cloud-test-eventhubs - - spring/azure-spring-boot-test-keyvault - - spring/azure-spring-boot-test-storage - TestStepMavenInputs: - options: '-Dmaven.wagon.http.pool=false $(DefaultOptions) -Dmaven.javadoc.skip=true -Drevapi.skip=true -DskipSpringITs=false -pl $(ProjectList)' - goals: "verify" - + - spring/azure-spring-boot-test-aad Artifacts: - - name: azure-spring-boot-test-application - groupId: com.azure.spring - safeName: azurespringboottestapplication - - name: azure-spring-boot-test-core - groupId: com.azure.spring - safeName: azurespringboottestcore - - name: azure-spring-boot-test-cosmos - groupId: com.azure.spring - safeName: azurespringboottestcosmos - name: azure-spring-boot-test-aad groupId: com.azure.spring safeName: azurespringboottestaad - - name: azure-spring-boot-test-aad-b2c - groupId: com.azure.spring - safeName: azurespringboottestaadb2c - - name: azure-spring-boot-test-aad-obo - groupId: com.azure.spring - safeName: azurespringboottestaadobo - - name: azure-spring-boot-test-aad-resource-server - groupId: com.azure.spring - safeName: azurespringboottestaadresourceserver - - name: azure-spring-boot-test-aad-resource-server-by-filter - groupId: com.azure.spring - safeName: azurespringboottestaadresourceserverbyfilter - - name: azure-spring-boot-test-keyvault - groupId: com.azure.spring - safeName: azurespringboottestkeyvault - - name: azure-spring-boot-test-keyvault-reactive - groupId: com.azure.spring - safeName: azurespringboottestkeyvaultreactive - - name: azure-spring-boot-test-parent - groupId: com.azure.spring - safeName: azurespringboottestparent - - name: azure-spring-boot-test-servicebus-jms - groupId: com.azure.spring - safeName: azurespringboottestservicebusjms - - name: azure-spring-cloud-test-eventhubs - groupId: com.azure.spring - safeName: azurespringcloudtesteventhubs - - name: azure-spring-boot-test-storage - groupId: com.azure.spring - safeName: azurespringbootteststorage - EnvVars: AZURE_TEST_MODE: LIVE - AAD_TENANT_ID_1: $(java-spring-aad-tenant-id-1) - AAD_USER_NAME_1: $(java-spring-aad-user-name-1) - AAD_USER_PASSWORD_1: $(java-spring-aad-user-password-1) - AAD_TENANT_ID_2: $(java-spring-aad-tenant-id-2) - AAD_USER_NAME_2: $(java-spring-aad-user-name-2) - AAD_USER_PASSWORD_2: $(java-spring-aad-user-password-2) - AAD_MULTI_TENANT_CLIENT_ID: $(java-spring-aad-multi-tenant-client-id) - AAD_MULTI_TENANT_CLIENT_SECRET: $(java-spring-aad-multi-tenant-client-secret) - AAD_SINGLE_TENANT_CLIENT_ID: $(java-spring-aad-single-tenant-id) - AAD_SINGLE_TENANT_CLIENT_SECRET: $(java-spring-aad-single-tenant-secret) - AAD_SINGLE_TENANT_CLIENT_ID_WITH_ROLE: $(java-spring-aad-single-tenant-id-with-role) - AAD_SINGLE_TENANT_CLIENT_SECRET_WITH_ROLE: $(java-spring-aad-single-tenant-secret-with-role) - AAD_B2C_USER_EMAIL: "chrisgreen@abc.com" - AAD_B2C_TENANT: "B2CITTest1" - AAD_B2C_REPLY_URL: "http://localhost:8080/login/oauth2/code/" - AAD_B2C_SIGN_UP_OR_SIGN_IN: "B2C_1_signupsignin1" - AAD_B2C_PROFILE_EDIT: "B2C_1_profileediting1" - AAD_B2C_USER_PASSWORD: $(java-spring-aad-b2c-user-password) - AAD_B2C_CLIENT_ID: $(java-spring-aad-b2c-client-id) - AAD_B2C_CLIENT_SECRET: $(java-spring-aad-b2c-client-secret) - AAD_USER_NAME_ON_DEMAND: ${{ parameters.AadOnDemandUserName }} - AAD_USER_PASSWORD_ON_DEMAND: $(java-spring-aad-user-password-1) - AAD_SERVICE_PRICIPAL_CLIENT_ID: $(java-spring-aad-service-principal-client-id) - AAD_SERVICE_PRICIPAL_CLIENT_SECRET: $(java-spring-aad-service-principal-client-secret) - - PreSteps: - - powershell: | - az login --allow-no-subscriptions --tenant $(java-spring-aad-tenant-id-1) --service-principal -u $(java-spring-aad-service-principal-client-id) -p $(java-spring-aad-service-principal-client-secret) - az ad user create --user-principal-name "${{ parameters.AadOnDemandUserName }}" --display-name "${{ parameters.AadOnDemandUserDisplayName }}" --password "$(java-spring-aad-user-password-1)" --force-change-password-next-login false - az logout - displayName: 'Create On-demand test user' - - PostSteps: - - powershell: | - az login --allow-no-subscriptions --tenant $(java-spring-aad-tenant-id-1) --service-principal -u $(java-spring-aad-service-principal-client-id) -p $(java-spring-aad-service-principal-client-secret) - az ad user delete --id "${{ parameters.AadOnDemandUserName }}" - az ad user create --user-principal-name "${{ parameters.AadOnDemandUserName }}" --display-name "${{ parameters.AadOnDemandUserDisplayName }}" --password "$(java-spring-aad-user-password-1)" --force-change-password-next-login false - az logout - condition: always() - displayName: 'Delete On-demand test user and create again' - - script: | - python --version - python -m pip install setuptools termcolor in_place - python sdk/spring/scripts/replace_util.py --module spring --log debug --color false - displayName: 'Run replace_util.py' - - - task: Maven@3 - displayName: 'Build and Install again, JDK Version: $(JavaBuildVersion)' - inputs: - mavenPomFile: pom.xml - goals: 'install' - options: '$(DefaultOptions) -DskipTests -Dgpg.skip -Dmaven.javadoc.skip=true -Dcheckstyle.skip=true -Dspotbugs.skip=true -Drevapi.skip=true -pl $(ProjectList) -am' - mavenOptions: '$(MemoryOptions) $(LoggingOptions)' - javaHomeOption: 'JDKVersion' - jdkVersionOption: $(JavaBuildVersion) - jdkArchitectureOption: 'x64' - publishJUnitResults: false - - - task: Maven@3 - displayName: 'Run tests again, JDK Version: $(JavaBuildVersion)' - inputs: - mavenPomFile: pom.xml - goals: verify - options: '-Dmaven.wagon.http.pool=false $(DefaultOptions) -Dmaven.javadoc.skip=true -Drevapi.skip=true -DskipSpringITs=false -pl $(ProjectList)' - env: - AZURE_TEST_MODE: LIVE - AAD_TENANT_ID_1: $(java-spring-aad-tenant-id-1) - AAD_USER_NAME_1: $(java-spring-aad-user-name-1) - AAD_USER_PASSWORD_1: $(java-spring-aad-user-password-1) - AAD_TENANT_ID_2: $(java-spring-aad-tenant-id-2) - AAD_USER_NAME_2: $(java-spring-aad-user-name-2) - AAD_USER_PASSWORD_2: $(java-spring-aad-user-password-2) - AAD_MULTI_TENANT_CLIENT_ID: $(java-spring-aad-multi-tenant-client-id) - AAD_MULTI_TENANT_CLIENT_SECRET: $(java-spring-aad-multi-tenant-client-secret) - AAD_SINGLE_TENANT_CLIENT_ID: $(java-spring-aad-single-tenant-id) - AAD_SINGLE_TENANT_CLIENT_SECRET: $(java-spring-aad-single-tenant-secret) - AAD_SINGLE_TENANT_CLIENT_ID_WITH_ROLE: $(java-spring-aad-single-tenant-id-with-role) - AAD_SINGLE_TENANT_CLIENT_SECRET_WITH_ROLE: $(java-spring-aad-single-tenant-secret-with-role) - AAD_B2C_USER_EMAIL: "chrisgreen@abc.com" - AAD_B2C_TENANT: "B2CITTest1" - AAD_B2C_REPLY_URL: "http://localhost:8080/login/oauth2/code/" - AAD_B2C_SIGN_UP_OR_SIGN_IN: "B2C_1_signupsignin1" - AAD_B2C_PROFILE_EDIT: "B2C_1_profileediting1" - AAD_B2C_USER_PASSWORD: $(java-spring-aad-b2c-user-password) - AAD_B2C_CLIENT_ID: $(java-spring-aad-b2c-client-id) - AAD_B2C_CLIENT_SECRET: $(java-spring-aad-b2c-client-secret) - AAD_USER_NAME_ON_DEMAND: ${{ parameters.AadOnDemandUserName }} - AAD_USER_PASSWORD_ON_DEMAND: $(java-spring-aad-user-password-1) - AAD_SERVICE_PRICIPAL_CLIENT_ID: $(java-spring-aad-service-principal-client-id) - AAD_SERVICE_PRICIPAL_CLIENT_SECRET: $(java-spring-aad-service-principal-client-secret) - - - powershell: | - az login --allow-no-subscriptions --tenant $(java-spring-aad-tenant-id-1) --service-principal -u $(java-spring-aad-service-principal-client-id) -p $(java-spring-aad-service-principal-client-secret) - az ad user delete --id "${{ parameters.AadOnDemandUserName }}" - az logout - condition: always() - displayName: 'Delete On-demand test user' + AAD_TENANT_ID_1: $(java-spring-aad-tenant-id-1-cn) + AAD_USER_NAME_1: $(java-spring-aad-user-name-1-cn) + AAD_USER_PASSWORD_1: $(java-spring-aad-user-password-1-cn) + AAD_TENANT_ID_2: $(java-spring-aad-tenant-id-2-cn) + AAD_USER_NAME_2: $(java-spring-aad-user-name-2-cn) + AAD_USER_PASSWORD_2: $(java-spring-aad-user-password-2-cn) + AAD_MULTI_TENANT_CLIENT_ID: $(java-spring-aad-multi-tenant-client-id-cn) + AAD_MULTI_TENANT_CLIENT_SECRET: $(java-spring-aad-multi-tenant-client-secret-cn) + AAD_SINGLE_TENANT_CLIENT_ID: $(java-spring-aad-single-tenant-id-cn) + AAD_SINGLE_TENANT_CLIENT_SECRET: $(java-spring-aad-single-tenant-secret-cn) + AAD_SINGLE_TENANT_CLIENT_ID_WITH_ROLE: $(java-spring-aad-single-tenant-id-with-role-cn) + AAD_SINGLE_TENANT_CLIENT_SECRET_WITH_ROLE: $(java-spring-aad-single-tenant-secret-with-role-cn) + AAD_USER_NAME_ON_DEMAND: "user$(System.JobId)-$(Build.BuildId)@cnaadittest1.partner.onmschina.cn" + AAD_USER_PASSWORD_ON_DEMAND: $(java-spring-aad-user-password-1-cn) + AAD_SERVICE_PRICIPAL_CLIENT_ID: $(java-spring-aad-service-principal-client-id-cn) + AAD_SERVICE_PRICIPAL_CLIENT_SECRET: $(java-spring-aad-service-principal-client-secret-cn) + AZURE_CLOUD_TYPE: "China"