Skip to content

Commit 5d54f1a

Browse files
authored
Make xUnit tests run sequentially to avoid race conditions caused by manipulating 'powershell.config.json' in tests (#8945)
1 parent 23eccfd commit 5d54f1a

5 files changed

Lines changed: 28 additions & 25 deletions

File tree

.vsts-ci/windows.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,8 +90,8 @@ jobs:
9090
9191
- powershell: |
9292
Import-Module .\tools\ci.psm1
93-
$ParallelXUnitTestResultsFile = "$(System.ArtifactsDirectory)\xunit\ParallelXUnitTestResults.xml"
93+
$xUnitTestResultsFile = "$(System.ArtifactsDirectory)\xunit\xUnitTestResults.xml"
9494
95-
Test-XUnitTestResults -TestResultsFile $ParallelXUnitTestResultsFile
95+
Test-XUnitTestResults -TestResultsFile $xUnitTestResultsFile
9696
displayName: Test
9797
condition: succeeded()

build.psm1

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,7 +1374,7 @@ function Test-PSPesterResults
13741374

13751375
function Start-PSxUnit {
13761376
[CmdletBinding()]param(
1377-
[string] $ParallelTestResultsFile = "ParallelXUnitResults.xml"
1377+
[string] $xUnitTestResultsFile = "xUnitResults.xml"
13781378
)
13791379

13801380
# Add .NET CLI tools to PATH
@@ -1420,23 +1420,15 @@ function Start-PSxUnit {
14201420
}
14211421
}
14221422

1423-
dotnet build --configuration $Options.configuration
1424-
1425-
if (Test-Path $ParallelTestResultsFile) {
1426-
Remove-Item $ParallelTestResultsFile -Force -ErrorAction SilentlyContinue
1423+
if (Test-Path $xUnitTestResultsFile) {
1424+
Remove-Item $xUnitTestResultsFile -Force -ErrorAction SilentlyContinue
14271425
}
14281426

1429-
# we are having intermittent issues on macOS with these tests failing.
1430-
# VSTS has suggested forcing them to be sequential
1431-
if($env:TF_BUILD -and $IsMacOS)
1432-
{
1433-
Write-Log 'Forcing parallel xunit tests to run sequentially.'
1434-
dotnet test -p:ParallelizeTestCollections=false --configuration $Options.configuration --no-restore --no-build --test-adapter-path:. "--logger:xunit;LogFilePath=$ParallelTestResultsFile"
1435-
} else {
1436-
dotnet test --configuration $Options.configuration --no-restore --no-build --test-adapter-path:. "--logger:xunit;LogFilePath=$ParallelTestResultsFile"
1437-
}
1427+
# We run the xUnit tests sequentially to avoid race conditions caused by manipulating the config.json file.
1428+
# xUnit tests run in parallel by default. To make them run sequentially, we need to define the 'xunit.runner.json' file.
1429+
dotnet test --configuration $Options.configuration --test-adapter-path:. "--logger:xunit;LogFilePath=$xUnitTestResultsFile"
14381430

1439-
Publish-TestResults -Path $ParallelTestResultsFile -Type 'XUnit' -Title 'Xunit Parallel'
1431+
Publish-TestResults -Path $xUnitTestResultsFile -Type 'XUnit' -Title 'Xunit Sequential'
14401432
}
14411433
finally {
14421434
Pop-Location

test/xUnit/xUnit.tests.csproj

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,4 +27,12 @@
2727
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" />
2828
<PackageReference Include="XunitXml.TestLogger" Version="2.1.26" />
2929
</ItemGroup>
30+
31+
<ItemGroup>
32+
<Content Include="xunit.runner.json">
33+
<Link>xunit.runner.json</Link>
34+
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
35+
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
36+
</Content>
37+
</ItemGroup>
3038
</Project>

test/xUnit/xunit.runner.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
{
2+
"parallelizeTestCollections": false
3+
}

tools/ci.psm1

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -288,17 +288,17 @@ function Invoke-CIxUnit
288288
throw "CoreCLR pwsh.exe was not built"
289289
}
290290

291-
$ParallelXUnitTestResultsFile = "$pwd\ParallelXUnitTestResults.xml"
291+
$xUnitTestResultsFile = "$pwd\xUnitTestResults.xml"
292292

293-
Start-PSxUnit -ParallelTestResultsFile $ParallelXUnitTestResultsFile
293+
Start-PSxUnit -xUnitTestResultsFile $xUnitTestResultsFile
294294
Write-Host -ForegroundColor Green 'Uploading PSxUnit test results'
295-
Update-TestResults -resultsFile $ParallelXUnitTestResultsFile
296-
Push-Artifact -Path $ParallelXUnitTestResultsFile -name xunit
295+
Update-TestResults -resultsFile $xUnitTestResultsFile
296+
Push-Artifact -Path $xUnitTestResultsFile -name xunit
297297

298298
if(!$SkipFailing.IsPresent)
299299
{
300300
# Fail the build, if tests failed
301-
Test-XUnitTestResults -TestResultsFile $ParallelXUnitTestResultsFile
301+
Test-XUnitTestResults -TestResultsFile $xUnitTestResultsFile
302302
}
303303
}
304304

@@ -768,10 +768,10 @@ function Invoke-LinuxTests
768768
}
769769

770770
try {
771-
$ParallelXUnitTestResultsFile = "$pwd/ParallelXUnitTestResults.xml"
772-
Start-PSxUnit -ParallelTestResultsFile $ParallelXUnitTestResultsFile
771+
$xUnitTestResultsFile = "$pwd/xUnitTestResults.xml"
772+
Start-PSxUnit -xUnitTestResultsFile $xUnitTestResultsFile
773773
# If there are failures, Test-XUnitTestResults throws
774-
Test-XUnitTestResults -TestResultsFile $ParallelXUnitTestResultsFile
774+
Test-XUnitTestResults -TestResultsFile $xUnitTestResultsFile
775775
} catch {
776776
$result = "FAIL"
777777
if (!$resultError)

0 commit comments

Comments
 (0)