Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions .azure/pipelines/components-e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,4 +49,16 @@ variables:
- template: /eng/common/templates/variables/pool-providers.yml

jobs:
# CoreCLR runtime E2E tests (UseMonoRuntime=false)
- template: jobs/components-e2e-test-job.yml
parameters:
runtimeName: CoreCLR
runtimeBuildArgs: '/p:UseMonoRuntime=false'
buildRestoreArgs: ''
minimumTestCount: 500

# Mono runtime (default) E2E tests
- template: jobs/components-e2e-test-job.yml
parameters:
runtimeName: Mono
minimumTestCount: 1000
44 changes: 29 additions & 15 deletions .azure/pipelines/jobs/components-e2e-test-job.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,25 @@
# Shared job definition for Components E2E tests.
# Used by both components-e2e-tests.yml and components-e2e-tests-internal.yml.

parameters:
- name: runtimeName
type: string
default: 'Mono'
- name: runtimeBuildArgs
type: string
default: ''
- name: buildRestoreArgs
type: string
default: '--no-restore'
- name: minimumTestCount
type: number
default: 1000

jobs:
- template: default-build.yml
parameters:
jobName: Components_E2E_Test
jobDisplayName: "Test: Blazor E2E tests on Linux"
jobName: Components_E2E_Test_${{ parameters.runtimeName }}
jobDisplayName: "Test: Blazor E2E tests on Linux (${{ parameters.runtimeName }})"
agentOs: Linux
use1ESUbuntu: true
isAzDOTestingJob: true
Expand All @@ -30,14 +44,14 @@ jobs:
condition: ne(variables.NODE_MODULES_CACHE_HIT, 'true')
- script: npm run build
displayName: Build JS
- script: .dotnet/dotnet build ./src/Components/test/E2ETest -c $(BuildConfiguration) --no-restore
displayName: Build
- script: .dotnet/dotnet build ./src/Components/test/E2ETest -c $(BuildConfiguration) ${{ parameters.buildRestoreArgs }} ${{ parameters.runtimeBuildArgs }}
displayName: Build (${{ parameters.runtimeName }})
- script: |
set -eo pipefail

.dotnet/dotnet test ./src/Components/test/E2ETest \
-c $(BuildConfiguration) \
--no-build \
--no-build ${{ parameters.runtimeBuildArgs }} \
--filter 'Quarantined!=true|Quarantined=false' \
-p:VsTestUseMSBuildOutput=false \
--logger:"trx%3BLogFileName=Microsoft.AspNetCore.Components.E2ETests.trx" \
Expand All @@ -55,44 +69,44 @@ jobs:
# Check total tests run to detect abnormalities. In case the number of tests changes significantly, we should adjust the threshold.
# Extract total from the summary line "Failed: xx, Passed: yy, Skipped: zz, Total: NNN, Duration: ..."
total=$(sed -nE 's/.*Failed:[[:space:]]*[0-9]+,[[:space:]]*Passed:[[:space:]]*[0-9]+,[[:space:]]*Skipped:[[:space:]]*[0-9]+,[[:space:]]*Total:[[:space:]]*([0-9]+).*/\1/p' e2e-test-output.log)
min_total=1000
min_total=${{ parameters.minimumTestCount }}
if [ -z "$total" ] || [ "$total" -lt "$min_total" ]
then
echo "##vso[task.logissue type=error] Insufficient total test count: $total. We expect at least $min_total tests to run."
exit 1
fi
displayName: Run E2E tests
- script: .dotnet/dotnet test ./src/Components/test/E2ETest -c $(BuildConfiguration) --no-build --filter 'Quarantined=true' -p:RunQuarantinedTests=true
displayName: Run E2E tests (${{ parameters.runtimeName }})
- script: .dotnet/dotnet test ./src/Components/test/E2ETest -c $(BuildConfiguration) --no-build ${{ parameters.runtimeBuildArgs }} --filter 'Quarantined=true' -p:RunQuarantinedTests=true
-p:VsTestUseMSBuildOutput=false
--logger:"trx%3BLogFileName=Microsoft.AspNetCore.Components.E2ETests.trx"
--logger:"html%3BLogFileName=Microsoft.AspNetCore.Components.E2ETests.html"
--results-directory $(Build.SourcesDirectory)/artifacts/TestResults/$(BuildConfiguration)/Quarantined
displayName: Run Quarantined E2E tests
displayName: Run Quarantined E2E tests (${{ parameters.runtimeName }})
continueOnError: true
- task: PublishTestResults@2
displayName: Publish E2E Test Results
displayName: Publish E2E Test Results (${{ parameters.runtimeName }})
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '*.trx'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(BuildConfiguration)/Unquarantined'
testRunTitle: ComponentsE2E-$(AgentOsName)-$(BuildConfiguration)-xunit
testRunTitle: ComponentsE2E-${{ parameters.runtimeName }}-$(AgentOsName)-$(BuildConfiguration)-xunit
condition: always()
- task: PublishTestResults@2
displayName: Publish Quarantined E2E Test Results
displayName: Publish Quarantined E2E Test Results (${{ parameters.runtimeName }})
inputs:
testResultsFormat: 'VSTest'
testResultsFiles: '*.trx'
searchFolder: '$(Build.SourcesDirectory)/artifacts/TestResults/$(BuildConfiguration)/Quarantined'
testRunTitle: Quarantine-$(AgentOsName)-$(BuildConfiguration)-xunit
testRunTitle: Quarantine-${{ parameters.runtimeName }}-$(AgentOsName)-$(BuildConfiguration)-xunit
mergeTestResults: true
condition: always()

artifacts:
- name: Components_E2E_Logs
- name: Components_E2E_${{ parameters.runtimeName }}_Logs
path: artifacts/log/
publishOnError: true
includeForks: true
- name: Components_E2E_Test_Logs
- name: Components_E2E_${{ parameters.runtimeName }}_Test_Logs
path: '$(Build.SourcesDirectory)/artifacts/TestResults/$(BuildConfiguration)'
includeForks: true
publishOnError: true
Original file line number Diff line number Diff line change
Expand Up @@ -72,24 +72,27 @@ private static async Task<IEnumerable<Assembly>> LoadAssembliesInClientAsync(IEn
var loadedAssemblies = new List<Assembly>();
var pendingLoads = newAssembliesToLoad.Select(LazyAssemblyLoaderInterop.LoadLazyAssembly);

// this will download the files and install them into memory
// it would not load them into the VM until we call LoadFromAssemblyName below
var loadedStatus = await Task.WhenAll(pendingLoads);
int i = 0;

List<Assembly>? allAssemblies = null;
foreach (var loaded in loadedStatus)
{
if (loaded)
{
if (allAssemblies == null)
var assemblyName = Path.GetFileNameWithoutExtension(newAssembliesToLoad[i]);
try
{
allAssemblies = AssemblyLoadContext.Default.Assemblies.ToList();
var assembly = AssemblyLoadContext.Default.LoadFromAssemblyName(new AssemblyName(assemblyName));
if (assembly != null)
{
loadedAssemblies.Add(assembly);
}
}

var assemblyName = Path.GetFileNameWithoutExtension(newAssembliesToLoad[i]);
var assembly = AssemblyLoadContext.Default.Assemblies.FirstOrDefault(a => a.GetName().Name == assemblyName);
if (assembly != null)
catch (FileNotFoundException)
{
loadedAssemblies.Add(assembly);
// no op
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,17 @@
<Compile Include="$(SharedSourceRoot)Process\**\*.cs" LinkBase="Shared" />
</ItemGroup>

<!-- Exclude server-only tests since the CoreCLR job targets the WASM runtime path;
server-side Blazor already runs on CoreCLR by default and is covered by the Mono job. -->
<ItemGroup Condition="'$(UseMonoRuntime)' == 'false'">
<Compile Remove="ServerExecutionTests\**\*.cs" />
<Compile Remove="ServerRenderingTests\**\*.cs" />
<!-- ProtectedBrowserStorageInjectionTest is a server execution test placed in Tests/ folder -->
<Compile Remove="Tests\ProtectedBrowserStorageInjectionTest.cs" />
<!-- EnhancedNavigationTestUtil is used by Infrastructure and Tests that are not excluded -->
<Compile Include="ServerRenderingTests\EnhancedNavigationTestUtil.cs" />
</ItemGroup>

<ItemGroup>
<Reference Include="Microsoft.AspNetCore" />
<Reference Include="Microsoft.AspNetCore.Authentication.Core" />
Expand Down
Loading