Skip to content

Commit 2b936ff

Browse files
authored
Implemented ci for calculating test coverage baseline (#21331)
1 parent 9dd2e15 commit 2b936ff

File tree

9 files changed

+417
-152
lines changed

9 files changed

+417
-152
lines changed

.azure-pipelines/test-coverage.yml

Lines changed: 140 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,140 @@
1+
parameters:
2+
- name: windowsImage
3+
displayName: Windows Image
4+
type: string
5+
default: windows-2019
6+
- name: dotnet_sdk_3_1
7+
displayName: .NET Core 3.1
8+
default: 3.1.x
9+
- name: dotnet_sdk_6
10+
displayName: .NET 6
11+
type: string
12+
default: 6.0.x
13+
- name: dotnet_sdk_7
14+
displayName: .NET 7
15+
type: string
16+
default: 7.0.x
17+
- name: testFramework
18+
displayName: Test Framework
19+
type: string
20+
default: netcoreapp3.1
21+
22+
variables:
23+
EnableTestCoverage: true
24+
TestCoverageLocation: $(Pipeline.Workspace)/artifacts
25+
26+
pr: none
27+
trigger: none
28+
29+
jobs:
30+
- job: TestCoverage
31+
timeoutInMinutes: 600
32+
pool:
33+
vmImage: ${{ parameters.windowsImage }}
34+
35+
steps:
36+
- task: UseDotNet@2
37+
displayName: 'Install .NET Core 3.1 SDK'
38+
inputs:
39+
packageType: sdk
40+
version: ${{ parameters.dotnet_sdk_3_1 }}
41+
42+
- task: PowerShell@2
43+
displayName: Initialize Environment
44+
inputs:
45+
pwsh: true
46+
targetType: filePath
47+
filePath: ./tools/TestFx/Utilities/CommonUtility.ps1
48+
49+
- task: DotNetCoreCLI@2
50+
displayName: Build Azure PowerShell Solution
51+
inputs:
52+
command: custom
53+
custom: msbuild
54+
arguments: 'build.proj -t:"Clean;Build" -p:"Configuration=Debug"'
55+
56+
- task: DotNetCoreCLI@2
57+
displayName: Test SDK-Based Cmdlets
58+
condition: succeeded()
59+
inputs:
60+
command: custom
61+
custom: msbuild
62+
arguments: 'build.proj -t:"Test" -p:"Configuration=Debug;TestFramework=${{ parameters.testFramework }}"'
63+
64+
- task: PowerShell@2
65+
displayName: Test AutoRest-Based Cmdlets
66+
condition: succeeded()
67+
inputs:
68+
pwsh: true
69+
workingDirectory: 'artifacts/Debug'
70+
targetType: inline
71+
script: |
72+
Install-Module -Name Pester -RequiredVersion 4.10.1 -Force
73+
Import-Module (Join-Path -Path . -ChildPath Az.Accounts | Join-Path -ChildPath Az.Accounts.psd1) -Force
74+
75+
$PreErrorActionPreference = $ErrorActionPreference
76+
$ErrorActionPreference = "SilentlyContinue"
77+
78+
Get-ChildItem -Path . -Filter test-module.ps1 -File -Recurse | ForEach-Object {
79+
try {
80+
. $_ -Isolated
81+
}
82+
catch {
83+
Write-Host $_.Exception
84+
}
85+
}
86+
87+
$ErrorActionPreference = $PreErrorActionPreference
88+
89+
- task: PowerShell@2
90+
displayName: Analyze Test Coverage
91+
condition: succeeded()
92+
inputs:
93+
pwsh: true
94+
targetType: filePath
95+
filePath: ./tools/TestFx/Coverage/AnalyzeTestCoverage.ps1
96+
arguments: -CalcBaseline
97+
98+
- task: PowerShell@2
99+
displayName: Save Test Coverage Results
100+
condition: succeeded()
101+
inputs:
102+
pwsh: true
103+
targetType: filePath
104+
filePath: ./tools/TestFx/Coverage/SaveTestCoverageResult.ps1
105+
arguments: CITest $(Build.BuildId) $(KustoServicePrincipalTenantId) $(KustoServicePrincipalId) $(KustoServicePrincipalSecret) $(KustoClusterName) $(KustoClusterRegion) $(TestCoverageDatabaseName) $(TestCoverageTableName) $(TestCoverageLocation)
106+
107+
- task: PowerShell@2
108+
displayName: Update Test Coverage Baseline
109+
condition: succeeded()
110+
inputs:
111+
pwsh: true
112+
targetType: inline
113+
script: |
114+
$blDir = "./tools/TestFx/Coverage"
115+
$blCsv = Join-Path -Path $blDir -ChildPath "Baseline.csv"
116+
if (Test-Path -Path $blCsv) {
117+
Remove-Item -Path $blCsv -Force
118+
}
119+
120+
git checkout -b testcoverage-baseline
121+
Copy-Item -Path "$(Pipeline.Workspace)/artifacts/TestCoverageAnalysis/Results/Baseline.csv" -Destination $blDir
122+
git config user.email "[email protected]"
123+
git config user.name "azure-powershell-bot"
124+
git add $blCsv
125+
git commit -m "Update with the latest test coverage data"
126+
git remote set-url origin https://azure-powershell-bot:$(BotAccessToken)@github.com/Azure/azure-powershell.git
127+
git push origin testcoverage-baseline --force
128+
129+
$title = "Update test coverage baseline"
130+
$headBranch = "testcoverage-baseline"
131+
$targetBranch = "main"
132+
$description = "Update with the latest test coverage baseline data"
133+
./tools/Github/CreatePR.ps1 -Title $title -HeadBranch $headBranch -BaseBranch $targetBranch -BotAccessToken $(BotAccessToken) -Description $description
134+
135+
- task: PublishPipelineArtifact@1
136+
displayName: Publish Test Coverage Result
137+
condition: always()
138+
inputs:
139+
artifact: testcoverage
140+
targetPath: $(TestCoverageLocation)

src/Accounts/Authentication/TestCoverage.cs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ public void LogRawData(AzurePSQoSEvent qos)
105105
{
106106
#if DEBUG || TESTCOVERAGE
107107
string moduleName = qos.ModuleName;
108-
string commandName = qos.CommandName;
108+
string commandName = ProcessCommandName(qos.CommandName);
109109
string sourceScriptPath = qos.SourceScript;
110110
string sourceScriptName = Path.GetFileName(sourceScriptPath);
111111

@@ -150,5 +150,14 @@ public void LogRawData(AzurePSQoSEvent qos)
150150
}
151151
#endif
152152
}
153+
154+
private string ProcessCommandName(string commandName)
155+
{
156+
if (commandName.Contains("_"))
157+
{
158+
commandName = commandName.Substring(0, commandName.IndexOf("_"));
159+
}
160+
return commandName;
161+
}
153162
}
154163
}

src/MySql/test/AzMySqlFlexibleServer.Tests.ps1

Lines changed: 16 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -15,41 +15,42 @@ Describe 'AzMySqlFlexibleServer' {
1515
It 'List1' {
1616
{
1717
$servers = Get-AzMySqlFlexibleServer
18-
$servers.Count | Should -BeGreaterOrEqual 1
18+
$servers.Count | Should -BeGreaterOrEqual 1
1919
$servers = Get-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup
20-
$servers.Count | Should -Be 1
20+
$servers.Count | Should -Be 1
2121
} | Should -Not -Throw
2222
}
2323

2424
It 'ViaName' {
2525
{
2626
$servers = Get-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.flexibleServerName
2727
$servers.Name | Should -Be $env.flexibleServerName
28-
29-
$server = Update-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.flexibleServerName -BackupRetentionDay 12
28+
29+
$server = Update-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.flexibleServerName -BackupRetentionDay 12
3030
$server.BackupRetentionDay | Should -Be 12
3131

3232
$server = Update-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.flexibleServerName -MaintenanceWindow "Mon:1:30"
3333
$server.MaintenanceWindowCustomWindow | Should -Be 'Enabled'
3434
$server.MaintenanceWindowDayOfWeek | Should -Be '1'
3535
$server.MaintenanceWindowStartHour | Should -Be '1'
3636
$server.MaintenanceWindowStartMinute | Should -Be '30'
37-
37+
3838
Stop-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.flexibleServerName
39-
39+
4040
Start-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.flexibleServerName
41-
41+
4242
Restart-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.flexibleServerName
43-
44-
$replica = Get-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -ServerName $env.flexibleServerName | New-AzMySqlFlexibleServerReplica -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
43+
44+
$flxServer = Get-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -ServerName $env.flexibleServerName
45+
$replica = New-AzMySqlFlexibleServerReplica -InputObject $flxServer -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
4546
$replica.Name | Should -Be $env.replicaName
4647
$replica.SkuName | Should -Be $env.flexibleSku
4748

4849
$replica = Get-AzMySqlFlexibleServerReplica -ResourceGroupName $env.resourceGroup -ServerName $env.flexibleServerName
4950
$replica.Count | Should -Be 1
5051

5152
Remove-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $env.replicaName
52-
53+
5354
} | Should -Not -Throw
5455
}
5556

@@ -68,18 +69,18 @@ Describe 'AzMySqlFlexibleServer' {
6869

6970
$ID = "/subscriptions/$($env.SubscriptionId)/resourceGroups/$($env.resourceGroup)/providers/Microsoft.DBforMySQL/flexibleServers/$($env.flexibleServerName)/stop"
7071
Stop-AzMySqlFlexibleServer -InputObject $ID
71-
72+
7273
$ID = "/subscriptions/$($env.SubscriptionId)/resourceGroups/$($env.resourceGroup)/providers/Microsoft.DBforMySQL/flexibleServers/$($env.flexibleServerName)/start"
7374
Start-AzMySqlFlexibleServer -InputObject $ID
74-
75+
7576
$ID = "/subscriptions/$($env.SubscriptionId)/resourceGroups/$($env.resourceGroup)/providers/Microsoft.DBforMySQL/flexibleServers/$($env.flexibleServerName)/restart"
7677
Restart-AzMySqlFlexibleServer -InputObject $ID
77-
78+
7879
$restorePointInTime = (Get-Date).AddMinutes(-10)
7980
$restoredServer = Restore-AzMySqlFlexibleServer -Name $env.restoreName -ResourceGroupName $env.resourceGroup -RestorePointInTime $restorePointInTime -InputObject $server
80-
81+
8182
Remove-AzMySqlFlexibleServer -ResourceGroupName $env.resourceGroup -Name $restoredServer.Name
8283

8384
} | Should -Not -Throw
8485
}
85-
}
86+
}

src/MySql/test/Get-AzMySqlReplica.Tests.ps1

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ while(-not $mockingPath) {
1313

1414
Describe 'Get-AzMySqlReplica' {
1515
It 'List' {
16-
Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName | New-AzMySqlReplica -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
16+
$server = Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName
17+
New-AzMySqlReplica -InputObject $server -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
1718
$replica = Get-AzMySqlReplica -ResourceGroupName $env.resourceGroup -ServerName $env.serverName
1819
$replica.Count | Should -Be 1
1920
Remove-AzMySqlServer -InputObject $replica

src/MySql/test/New-AzMySqlReplica.Tests.ps1

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ while(-not $mockingPath) {
1313

1414
Describe 'New-AzMySqlReplica' {
1515
It 'CreateExpanded' {
16-
$replica = Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName | New-AzMySqlReplica -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
16+
$server = Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName
17+
$replica = New-AzMySqlReplica -InputObject $server -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
1718
$replica.Name | Should -Be $env.replicaName
1819
$replica.SkuName | Should -Be $env.Sku
1920
$replica.Location | Should -Be eastus

src/MySql/test/Restore-AzMySqlServer.Tests.ps1

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,17 @@ while(-not $mockingPath) {
1515
# See https://github.com/Azure/autorest.powershell/issues/580
1616
Describe 'Restore-AzMySqlServer' {
1717
It 'GeoRestore' {
18-
$replica = Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName | New-AzMySqlReplica -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
19-
$restoreServer = Restore-AzMySqlServer -Name $env.serverName -ResourceGroupName $env.resourceGroup -InputObject $replica -UseGeoRestore
18+
$server = Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName
19+
$replica = New-AzMySqlReplica -InputObject $server -Replica $env.replicaName -ResourceGroupName $env.resourceGroup
20+
$restoreServer = Restore-AzMySqlServer -Name $env.serverName -ResourceGroupName $env.resourceGroup -InputObject $replica -UseGeoRestore
2021
$restoreServer.Name | Should -Be $env.serverName
2122
$restoreServer.SkuName | Should -Be $env.Sku
2223
}
2324

2425
It 'PointInTimeRestore' {
26+
$server = Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName
2527
$restorePointInTime = (Get-Date).AddMinutes(-10)
26-
$restoreServer = Get-AzMySqlServer -ResourceGroupName $env.resourceGroup -ServerName $env.serverName | Restore-AzMySqlServer -Name $env.restoreName2 -ResourceGroupName $env.resourceGroup -RestorePointInTime $restorePointInTime -UsePointInTimeRestore
28+
$restoreServer = Restore-AzMySqlServer -InputObject $server -Name $env.restoreName2 -ResourceGroupName $env.resourceGroup -RestorePointInTime $restorePointInTime -UsePointInTimeRestore
2729
$restoreServer.Name | Should -Be $env.restoreName2
2830
$restoreServer.SkuName | Should -Be $env.Sku
2931
}

0 commit comments

Comments
 (0)