| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- name: Run StressTests (for 15 minutes)
- on:
- schedule:
- - cron: '0 0 * * *' # Runs every day at midnight UTC
- push:
- branches: [ v2_release, v2_develop ]
- paths-ignore:
- - '**.md'
-
- jobs:
- run_stress_tests:
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- os: [ ubuntu-latest ]
- timeout-minutes: 70 # Allow some buffer time beyond the 1-hour test duration
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: 8.x
- dotnet-quality: 'ga'
- - name: Install dependencies
- run: dotnet restore
- - name: Build StressTests
- run: dotnet build Tests/StressTests --configuration Debug --no-restore
- - name: Run StressTests for 15 minutes
- run: |
- end=$((SECONDS+900))
- while [ $SECONDS -lt $end ]; do
- dotnet test Tests/StressTests --no-build --verbosity normal --diag:logs/${{ runner.os }}/logs.txt --blame --blame-crash --blame-hang --blame-hang-timeout 60s --blame-crash-collect-always -- xunit.stopOnFail=true
- done
- - name: Upload Test Logs
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: stress-test-logs-${{ runner.os }}
- path: |
- logs/
- TestResults/StressTests
- parallel_unittests_stress:
- name: Parallel Unit Tests Stress (3 iterations)
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- os: [ ubuntu-latest, windows-latest, macos-latest ]
- timeout-minutes: 90
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
- - name: Setup .NET Core
- uses: actions/setup-dotnet@v4
- with:
- dotnet-version: 8.x
- dotnet-quality: 'ga'
- - name: Install dependencies
- run: dotnet restore
- - name: Build UnitTestsParallelizable
- run: dotnet build Tests/UnitTestsParallelizable --configuration Debug --no-restore
- - name: Disable Windows Defender (Windows only)
- if: runner.os == 'Windows'
- shell: powershell
- run: |
- Add-MpPreference -ExclusionPath "${{ github.workspace }}"
- Add-MpPreference -ExclusionProcess "dotnet.exe"
- Add-MpPreference -ExclusionProcess "testhost.exe"
- Add-MpPreference -ExclusionProcess "VSTest.Console.exe"
- - name: Set VSTEST_DUMP_PATH
- shell: bash
- run: echo "VSTEST_DUMP_PATH=logs/UnitTestsParallelizable/${{ runner.os }}/" >> $GITHUB_ENV
- - name: Run UnitTestsParallelizable (3 iterations with varying parallelization)
- shell: bash
- run: |
- # Run tests 3 times with different parallelization settings to expose concurrency issues
- # Run 1: Default parallelization (2x) - standard test execution
- # Run 2: Maximum parallelization (unlimited) - stress test with high concurrency
- # Run 3: Single-threaded execution (1) - deterministic execution to expose ordering issues
- for RUN in {1..3}; do
- echo "============================================"
- echo "Starting test run $RUN of 3"
- echo "============================================"
-
- # Use a combination of run number and timestamp to create different execution patterns
- SEED=$((1000 + $RUN + $(date +%s) % 1000))
- echo "Using randomization seed: $SEED"
-
- # Vary the xUnit parallelization based on run number to expose race conditions
- if [ $RUN -eq 1 ]; then
- XUNIT_MAX_PARALLEL_THREADS="2x"
- echo "Run $RUN: Using default parallelization (2x)"
- elif [ $RUN -eq 2 ]; then
- XUNIT_MAX_PARALLEL_THREADS="unlimited"
- echo "Run $RUN: Using maximum parallelization (unlimited)"
- else
- XUNIT_MAX_PARALLEL_THREADS="1"
- echo "Run $RUN: Using single-threaded execution"
- fi
-
- dotnet test Tests/UnitTestsParallelizable \
- --no-build \
- --verbosity normal \
- --settings Tests/UnitTestsParallelizable/runsettings.xml \
- --diag:logs/UnitTestsParallelizable/${{ runner.os }}/run${RUN}-logs.txt \
- --blame \
- --blame-crash \
- --blame-hang \
- --blame-hang-timeout 60s \
- --blame-crash-collect-always \
- -- xUnit.MaxParallelThreads=${XUNIT_MAX_PARALLEL_THREADS}
-
- if [ $? -ne 0 ]; then
- echo "ERROR: Test run $RUN failed!"
- exit 1
- fi
-
- echo "Test run $RUN completed successfully"
- echo ""
- done
-
- echo "============================================"
- echo "All 3 test runs completed successfully!"
- echo "============================================"
- - name: Upload UnitTestsParallelizable Logs
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: parallel_unittests_stress-logs-${{ runner.os }}
- path: |
- logs/UnitTestsParallelizable/
- TestResults/
|