Skip to content

Commit 8f37159

Browse files
authored
Support cloud configurations for multi-cloud testing (Azure#15258)
1 parent b860c1c commit 8f37159

File tree

5 files changed

+143
-67
lines changed

5 files changed

+143
-67
lines changed

eng/common/TestResources/New-TestResources.ps1

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -562,7 +562,7 @@ is based on the cloud to which the template is being deployed:
562562
563563
.PARAMETER Environment
564564
Name of the cloud environment. The default is the Azure Public Cloud
565-
('PublicCloud')
565+
('AzureCloud')
566566
567567
.PARAMETER AdditionalParameters
568568
Optional key-value pairs of parameters to pass to the ARM template(s).

eng/common/TestResources/Remove-TestResources.ps1.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ Accept wildcard characters: False
187187
### -Environment
188188
Name of the cloud environment.
189189
The default is the Azure Public Cloud
190-
('PublicCloud')
190+
('AzureCloud')
191191
192192
```yaml
193193
Type: String

eng/pipelines/templates/jobs/archetype-sdk-tests-jobs.yml

Lines changed: 66 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -23,85 +23,90 @@ parameters:
2323
- name: Location
2424
type: string
2525
default: ''
26-
- name: SubscriptionConfiguration
27-
type: string
28-
default: $(sub-config-azure-cloud-test-resources)
2926
- name: ServiceDirectory
3027
type: string
3128
default: not-specified
3229
- name: TestSetupSteps
3330
type: stepList
3431
default: []
32+
- name: CloudConfigurations
33+
type: object
34+
default:
35+
AzureCloud:
36+
SubscriptionConfiguration: $(sub-config-azure-cloud-test-resources)
3537

3638
jobs:
37-
- ${{ each platform in parameters.Platforms }}:
38-
- job:
39-
condition: and(succeededOrFailed(), eq(eq(variables['Record'], 'true'), eq('${{ platform.TestMode }}', 'Record')))
40-
displayName: ${{ platform.DisplayName }}
41-
variables:
42-
- template: ../variables/globals.yml
43-
- name: OSVmImage
44-
value: ${{ platform.OSVmImage }}
39+
- ${{ each cloudConfig in parameters.CloudConfigurations }}:
40+
- ${{ each platform in parameters.Platforms }}:
41+
- job:
42+
condition: and(succeededOrFailed(), eq(eq(variables['Record'], 'true'), eq('${{ platform.TestMode }}', 'Record')))
43+
displayName: ${{ platform.DisplayName }}_${{ cloudConfig.key }}
44+
variables:
45+
- template: ../variables/globals.yml
46+
- name: OSVmImage
47+
value: ${{ platform.OSVmImage }}
4548

46-
timeoutInMinutes: ${{ parameters.TimeoutInMinutes }}
49+
timeoutInMinutes: ${{ parameters.TimeoutInMinutes }}
4750

48-
pool:
49-
vmImage: $(OSVmImage)
50-
${{ if platform.Container }}:
51-
container: ${{ platform.Container }}
51+
pool:
52+
vmImage: $(OSVmImage)
53+
${{ if platform.Container }}:
54+
container: ${{ platform.Container }}
5255

53-
steps:
54-
- ${{ if platform.PreSteps }}:
55-
- ${{ platform.PreSteps }}
56+
steps:
57+
- ${{ if platform.PreSteps }}:
58+
- ${{ platform.PreSteps }}
5659

57-
- ${{ parameters.PreSteps }}
60+
- ${{ parameters.PreSteps }}
5861

59-
- template: /eng/common/pipelines/templates/steps/verify-agent-os.yml
62+
- template: /eng/common/pipelines/templates/steps/verify-agent-os.yml
6063

61-
- ${{ each step in parameters.TestSetupSteps }}:
62-
- ${{ each pair in step }}:
63-
${{ pair.key }}: ${{ pair.value }}
64+
- ${{ each step in parameters.TestSetupSteps }}:
65+
- ${{ each pair in step }}:
66+
${{ pair.key }}: ${{ pair.value }}
6467

65-
- template: /eng/common/TestResources/deploy-test-resources.yml
66-
parameters:
67-
Location: ${{ parameters.Location }}
68-
ServiceDirectory: '${{ parameters.ServiceDirectory }}'
69-
SubscriptionConfiguration: ${{ parameters.SubscriptionConfiguration }}
68+
- template: /eng/common/TestResources/deploy-test-resources.yml
69+
parameters:
70+
Location: ${{ cloudConfig.value.Location }}
71+
ServiceDirectory: '${{ parameters.ServiceDirectory }}'
72+
SubscriptionConfiguration: ${{ cloudConfig.value.SubscriptionConfiguration }}
73+
ArmTemplateParameters: ${{ cloudConfig.value.ArmTemplateParameters }}
7074

71-
- script: >
72-
dotnet test eng/service.proj
73-
--framework ${{ platform.TestTargetFramework }}
74-
--filter "TestCategory!=Manually"
75-
--logger "trx"
76-
--logger:"console;verbosity=normal"
77-
/p:ServiceDirectory=${{ parameters.ServiceDirectory }}
78-
/p:IncludeSrc=false /p:IncludeSamples=false
79-
/p:BuildInParallel=${{ parameters.BuildInParallel }}
80-
${{ platform.AdditionalTestArguments }}
75+
- script: >
76+
dotnet test eng/service.proj
77+
--framework ${{ platform.TestTargetFramework }}
78+
--filter "TestCategory!=Manually"
79+
--logger "trx"
80+
--logger:"console;verbosity=normal"
81+
/p:ServiceDirectory=${{ parameters.ServiceDirectory }}
82+
/p:IncludeSrc=false /p:IncludeSamples=false
83+
/p:BuildInParallel=${{ parameters.BuildInParallel }}
84+
${{ platform.AdditionalTestArguments }}
8185
82-
displayName: "Build & Test (all tests for ${{ platform.TestTargetFramework }})"
83-
env:
84-
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
85-
DOTNET_CLI_TELEMETRY_OPTOUT: 1
86-
DOTNET_MULTILEVEL_LOOKUP: 0
87-
AZURE_TEST_MODE: "${{ coalesce(platform.TestMode, 'None') }}"
88-
${{ insert }}: ${{ parameters.EnvVars }}
86+
displayName: "Build & Test (all tests for ${{ platform.TestTargetFramework }})"
87+
env:
88+
DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1
89+
DOTNET_CLI_TELEMETRY_OPTOUT: 1
90+
DOTNET_MULTILEVEL_LOOKUP: 0
91+
AZURE_TEST_MODE: "${{ coalesce(platform.TestMode, 'None') }}"
92+
${{ insert }}: ${{ parameters.EnvVars }}
93+
${{ insert }}: ${{ cloudConfig.value.EnvVars }}
8994
90-
- template: /eng/common/TestResources/remove-test-resources.yml
91-
parameters:
92-
ServiceDirectory: '${{ parameters.ServiceDirectory }}'
93-
SubscriptionConfiguration: ${{ parameters.SubscriptionConfiguration }}
95+
- template: /eng/common/TestResources/remove-test-resources.yml
96+
parameters:
97+
ServiceDirectory: '${{ parameters.ServiceDirectory }}'
98+
SubscriptionConfiguration: ${{ cloudConfig.value.SubscriptionConfiguration }}
9499

95-
- task: PublishTestResults@2
96-
condition: always()
97-
displayName: "Publish Results (${{ platform.TestTargetFramework }})"
98-
inputs:
99-
testResultsFiles: "**/*.trx"
100-
testRunTitle: "$(OSName) ${{ platform.TestTargetFramework }}"
101-
testResultsFormat: "VSTest"
102-
mergeTestResults: true
100+
- task: PublishTestResults@2
101+
condition: always()
102+
displayName: "Publish Results (${{ platform.TestTargetFramework }})"
103+
inputs:
104+
testResultsFiles: "**/*.trx"
105+
testRunTitle: "$(OSName) ${{ platform.TestTargetFramework }}"
106+
testResultsFormat: "VSTest"
107+
mergeTestResults: true
103108

104-
- ${{ parameters.PostSteps }}
109+
- ${{ parameters.PostSteps }}
105110

106-
- ${{ if platform.PostSteps }}:
107-
- ${{ platform.PostSteps }}
111+
- ${{ if platform.PostSteps }}:
112+
- ${{ platform.PostSteps }}

eng/pipelines/templates/jobs/archetype-sdk-tests.yml

Lines changed: 59 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ parameters:
3838
- name: TestSetupSteps
3939
type: stepList
4040
default: []
41+
- name: Clouds
42+
type: string
43+
default: 'AzureCloud'
4144

4245
jobs:
4346
- template: archetype-sdk-tests-jobs.yml
@@ -49,9 +52,63 @@ jobs:
4952
BuildInParallel: ${{ parameters.BuildInParallel }}
5053
TimeoutInMinutes: ${{ parameters.TimeoutInMinutes }}
5154
Location: ${{ parameters.Location }}
52-
SubscriptionConfiguration: ${{ parameters.SubscriptionConfiguration }}
5355
ServiceDirectory: ${{ parameters.ServiceDirectory }}
5456
TestSetupSteps: ${{ parameters.TestSetupSteps }}
57+
CloudConfigurations:
58+
${{ if contains(parameters.Clouds, 'AzureCloud') }}:
59+
AzureCloud:
60+
SubscriptionConfiguration: ${{ parameters.SubscriptionConfiguration }}
61+
ArmTemplateParameters: >-
62+
@{ keyVaultDomainSuffix = '.vault.azure.net';
63+
storageEndpointSuffix = 'core.windows.net';
64+
endpointSuffix = '.cognitiveservices.azure.com';
65+
azureAuthorityHost = 'https://login.microsoftonline.com/';
66+
keyVaultEndpointSuffix = '.vault.azure.net'
67+
}
68+
EnvVars:
69+
SERVICE_MANAGEMENT_URL: https://management.core.windows.net/
70+
STORAGE_ENDPOINT_SUFFIX: core.windows.net
71+
RESOURCE_MANAGER_URL: https://management.azure.com/
72+
SEARCH_ENDPOINT_SUFFIX: search.windows.net
73+
COSMOS_TABLES_ENDPOINT_SUFFIX: cosmos.azure.com
74+
${{ if contains(parameters.Clouds, 'AzureUsGovCloud') }}:
75+
AzureUsGovCloud:
76+
SubscriptionConfiguration: $(sub-config-gov-test-resources)
77+
ArmTemplateParameters: >-
78+
@{ keyVaultDomainSuffix = '.vault.usgovcloudapi.net';
79+
storageEndpointSuffix = 'core.usgovcloudapi.net';
80+
endpointSuffix = '.cognitiveservices.azure.us';
81+
azureAuthorityHost = 'https://login.microsoftonline.us/';
82+
keyVaultEndpointSuffix = '.vault.usgovcloudapi.net';
83+
enableStorageVersioning = $false
84+
}
85+
EnvVars:
86+
AZURE_AUTHORITY_HOST: https://login.microsoftonline.us
87+
RESOURCE_MANAGER_URL: https://management.usgovcloudapi.net/
88+
STORAGE_ENDPOINT_SUFFIX: core.usgovcloudapi.net
89+
SERVICE_MANAGEMENT_URL: https://management.core.usgovcloudapi.net/
90+
SEARCH_ENDPOINT_SUFFIX: search.azure.us
91+
COSMOS_TABLES_ENDPOINT_SUFFIX: cosmos.azure.us
92+
${{ if contains(parameters.Clouds, 'AzureChinaCloud') }}:
93+
AzureChinaCloud:
94+
SubscriptionConfiguration: $(sub-config-cn-test-resources)
95+
ArmTemplateParameters: >-
96+
@{ keyVaultDomainSuffix = '.vault.azure.cn';
97+
storageEndpointSuffix = 'core.chinacloudapi.cn';
98+
azureAuthorityHost = 'https://login.chinacloudapi.cn/';
99+
keyVaultEndpointSuffix = '.vault.azure.cn';
100+
keyVaultSku = 'standard';
101+
enableStorageVersioning = $false;
102+
endpointSuffix = '.cognitiveservices.azure.cn';
103+
textAnalyticsSku = 'S'
104+
}
105+
EnvVars:
106+
AZURE_AUTHORITY_HOST: https://login.chinacloudapi.cn
107+
SERVICE_MANAGEMENT_URL: https://management.core.chinacloudapi.cn/
108+
RESOURCE_MANAGER_URL: https://management.chinacloudapi.cn
109+
STORAGE_ENDPOINT_SUFFIX: core.chinacloudapi.cn
110+
SEARCH_ENDPOINT_SUFFIX: search.azure.cn
111+
COSMOS_TABLES_ENDPOINT_SUFFIX: cosmos.azure.cn
55112
platforms:
56113
- DisplayName: "Test on Linux"
57114
OSVmImage: "ubuntu-18.04"
@@ -99,4 +156,4 @@ jobs:
99156
pathToPublish: '$(Build.ArtifactStagingDirectory)/SessionRecords'
100157
artifactName: SessionRecords
101158

102-
- ${{ parameters.AdditionalPlatforms }}
159+
- ${{ parameters.AdditionalPlatforms }}

sdk/keyvault/test-resources.json

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,24 @@
4848
"metadata": {
4949
"description": "Whether to enable soft delete for the Key Vault. The default is true."
5050
}
51+
},
52+
"keyVaultDomainSuffix": {
53+
"type": "string",
54+
"defaultValue": ".vault.azure.net",
55+
"metadata": {
56+
"description": "Domain suffix for sovereign clouds, requies the preceeding '.'. The default uses the public Azure Cloud (.vault.azure.net)"
57+
}
58+
},
59+
"keyVaultSku": {
60+
"type": "string",
61+
"defaultValue": "premium",
62+
"metadata": {
63+
"description": "Key Vault SKU to deploy. The default is 'premium'"
64+
}
5165
}
5266
},
5367
"variables": {
54-
"azureKeyVaultUrl": "[format('https://{0}.vault.azure.net', parameters('baseName'))]",
68+
"azureKeyVaultUrl": "[format('https://{0}{1}', parameters('baseName'), parameters('keyVaultDomainSuffix'))]",
5569
"mgmtApiVersion": "2019-04-01",
5670
"blobContainerName": "backup",
5771
"primaryAccountName": "[concat(parameters('baseName'), 'prim')]",
@@ -81,7 +95,7 @@
8195
"properties": {
8296
"sku": {
8397
"family": "A",
84-
"name": "premium"
98+
"name": "[parameters('keyVaultSku')]"
8599
},
86100
"tenantId": "[parameters('tenantId')]",
87101
"accessPolicies": [

0 commit comments

Comments
 (0)