Skip to content

Commit

Permalink
Update e2e test infrastructure
Browse files Browse the repository at this point in the history
  • Loading branch information
IvanZosimov committed Apr 19, 2023
1 parent b72f430 commit 180a159
Show file tree
Hide file tree
Showing 7 changed files with 92 additions and 112 deletions.
48 changes: 28 additions & 20 deletions .github/workflows/e2e-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:
3.0.x
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 2.2.402, 3.1.404, 3.0
run: __tests__/verify-dotnet.ps1 -Patterns "^2.2.402$", "^3.1.404$", "^3.0"

test-setup-full-version:
runs-on: ${{ matrix.operating-system }}
Expand Down Expand Up @@ -62,7 +62,7 @@ jobs:
NUGET_AUTH_TOKEN: NOTATOKEN
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 3.1.201, 2.2.402 -CheckNugetConfig
run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$", "^2.2.402$" -CheckNugetConfig

test-setup-without-patch-version:
runs-on: ${{ matrix.operating-system }}
Expand All @@ -87,7 +87,7 @@ jobs:
dotnet-version: '2.2'
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 3.1, 2.2
run: __tests__/verify-dotnet.ps1 -Patterns "^3.1", "^2.2"

test-setup-prerelease-version:
runs-on: ${{ matrix.operating-system }}
Expand All @@ -107,7 +107,7 @@ jobs:
dotnet-version: '3.1.100-preview1-014459'
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 3.1.100-preview1-014459
run: __tests__/verify-dotnet.ps1 -Patterns "3.1.100-preview1-014459"

test-setup-latest-patch-version:
runs-on: ${{ matrix.operating-system }}
Expand All @@ -131,7 +131,7 @@ jobs:
dotnet-version: 2.2.X
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 2.2, 3.1
run: __tests__/verify-dotnet.ps1 -Patterns "^2.2", "^3.1"

test-setup-with-wildcard:
runs-on: ${{ matrix.operating-system }}
Expand All @@ -155,7 +155,7 @@ jobs:
dotnet-version: 2.2.*
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 3.1, 2.2
run: __tests__/verify-dotnet.ps1 -Patterns "^3.1", "^2.2"

test-setup-global-json-specified-and-version:
runs-on: ${{ matrix.operating-system }}
Expand All @@ -181,7 +181,7 @@ jobs:
global-json-file: ./subdirectory/global.json
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 2.2.207, 3.1
run: __tests__/verify-dotnet.ps1 -Patterns "^2.2", "^3.1"

test-setup-with-dotnet-quality:
runs-on: ${{ matrix.operating-system }}
Expand All @@ -203,7 +203,7 @@ jobs:
dotnet-quality: 'preview'
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 7.0 -ContainedPattern "preview"
run: __tests__/verify-dotnet.ps1 -Patterns "^7\.0\.\d+-"

test-dotnet-version-output-during-single-version-installation:
runs-on: ${{ matrix.operating-system }}
Expand Down Expand Up @@ -262,7 +262,7 @@ jobs:
test-proxy:
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/dotnet/core/runtime-deps:3.0-bionic
image: ubuntu:latest
options: --dns 127.0.0.1
services:
squid-proxy:
Expand All @@ -275,22 +275,29 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Clear tool cache
run: rm -rf "/usr/share/dotnet"
- name: Install curl
- name: Install Powershell
run: |
apt update
apt -y install curl
- name: Setup dotnet 3.1.201
apt-get update
apt-get install -y wget apt-transport-https software-properties-common
wget -q "https://packages.microsoft.com/config/ubuntu/$(lsb_release -rs)/packages-microsoft-prod.deb"
dpkg -i packages-microsoft-prod.deb
rm packages-microsoft-prod.deb
apt-get update
apt-get install -y powershell
- name: Clear toolcache
shell: pwsh
run: __tests__/clear-toolcache.ps1 ${{ runner.os }}
- name: Setup dotnet 6.0
uses: ./
with:
dotnet-version: 3.1.201
dotnet-version: 6.0
source-url: https://api.nuget.org/v3/index.json
env:
NUGET_AUTH_TOKEN: NOTATOKEN
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 3.1.201 -CheckNugetConfig
run: |
__tests__/verify-dotnet.ps1 -Patterns "^6.0" -CheckNugetConfig
test-bypass-proxy:
runs-on: ubuntu-latest
Expand All @@ -300,8 +307,9 @@ jobs:
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Clear tool cache
run: rm -rf "/usr/share/dotnet"
- name: Clear toolcache
shell: pwsh
run: __tests__/clear-toolcache.ps1 ${{ runner.os }}
- name: Setup dotnet 3.1.201
uses: ./
with:
Expand All @@ -311,4 +319,4 @@ jobs:
NUGET_AUTH_TOKEN: NOTATOKEN
- name: Verify dotnet
shell: pwsh
run: __tests__/verify-dotnet.ps1 -Patterns 3.1.201 -CheckNugetConfig
run: __tests__/verify-dotnet.ps1 -Patterns "^3.1.201$" -CheckNugetConfig
8 changes: 3 additions & 5 deletions .github/workflows/test-dotnet.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ jobs:
fail-fast: false
matrix:
operating-system: [ubuntu-latest, windows-latest, macOS-latest]
dotnet-version: ['2.1', '2.2', '3.0', '3.1', '5.0']
dotnet-version: ['2.1', '2.2', '3.0', '3.1', '5.0', '6.0', '7.0']
steps:
- name: Checkout
uses: actions/checkout@v3
Expand All @@ -29,9 +29,7 @@ jobs:
uses: ./
with:
dotnet-version: ${{ matrix.dotnet-version }}
- name: Check installed version
- name: Verify installed version
shell: pwsh
run: |
$version = & dotnet --version
Write-Host "Installed version: $version"
if (-not $version.StartsWith("${{ matrix.dotnet-version }}")) { throw "Unexpected version" }
__tests__/verify-dotnet.ps1 -Patterns "^${{ matrix.dotnet-version }}"
4 changes: 2 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,8 @@ global.json
lib/
node_modules/
__tests__/runner/*
__tests__/sample-csproj/bin/
__tests__/sample-csproj/obj/
__tests__/e2e-test-csproj/bin/
__tests__/e2e-test-csproj/obj/

# Rest of the file pulled from https://github.com/github/gitignore/blob/master/Node.gitignore
# Logs
Expand Down
8 changes: 6 additions & 2 deletions __tests__/e2e-test-csproj/Test.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System;

namespace test_csproj
{
Expand All @@ -7,8 +8,11 @@ public class Test
{
[TestMethod]
public void TestMethod()
{
Assert.AreEqual((1 + 1), 2);
{
Console.WriteLine("TestMethod");
int calculatedResult = 1000 / 25;
int expectedResult = 40;
Assert.AreEqual(calculatedResult, expectedResult);
}
}
}
2 changes: 1 addition & 1 deletion __tests__/e2e-test-csproj/test.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@

<PropertyGroup>
<TargetFramework>$(TEST_TARGET_FRAMEWORK)</TargetFramework>

<IsPackable>false</IsPackable>
</PropertyGroup>

<ItemGroup>
<!-- These packages will be downloaded over the network for testing proxy settings -->
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0-preview-20170810-02" />
<PackageReference Include="MSTest.TestAdapter" Version="1.1.18" />
<PackageReference Include="MSTest.TestFramework" Version="1.1.18" />
Expand Down
90 changes: 52 additions & 38 deletions __tests__/verify-dotnet.ps1
Original file line number Diff line number Diff line change
@@ -1,57 +1,68 @@
<#
.DESCRIPTION
Verifies that installed on the machine .NET SDK versions match the input patterns.
Optionally checks that the nuget.config file is generated correctly.
.PARAMETER Patterns
Specifies the regular expression patterns that should be matched with the installed
on the machine .NET SDK versions. The number of patterns should be equal to the number
of installed .NET versions.
.PARAMETER CheckNugetConfig
Switches the check for the existence of the nuget.config file.
.EXAMPLE
PS> .\verify-dotnet.ps1 -Paterns "^3.1.200$", "^6.0" -CheckNugetConfig
#>

param(
[ValidateNotNullOrEmpty()]
[Parameter(Mandatory=$true)]
[string[]]$Patterns,
[ValidateNotNullOrEmpty()]
[string]$ContainedPattern,
[switch]$CheckNugetConfig
)

if ($CheckNugetConfig.IsPresent) {
if (!(Test-Path "../nuget.config"))
{
throw "The nuget.config file is not generated correctly."
}
}
$PatternsList = [System.Collections.ArrayList]($Patterns)

if (!$Patterns.Count)
{
throw "At least 1 dotnet-version pattern should be supplied to script."
if ($CheckNugetConfig.IsPresent -and !(Test-Path "../nuget.config")) {
throw "The nuget.config file is not generated correctly."
}

Write-Host "Those patterns were supplied to the script: $($Patterns -join ', ')."
$PatternsCount = $PatternsList.Count

Write-Host "Those patterns were supplied to the script: $($PatternsList -join ', ')."
$dotnet = Get-Command dotnet | Select-Object -First 1 | ForEach-Object { $_.Path }
Write-Host "Found: '$dotnet'"

# SDKs are listed on multiple lines with the path afterwards in square brackets
$versions = & $dotnet --list-sdks | ForEach-Object { $_.SubString(0, $_.IndexOf('[')).Trim() }
Write-Host "Installed versions: $($versions -join ', ')."
$InstalledVersionCount = 0
foreach($pattern in $Patterns)
$Versions = & $dotnet --list-sdks | ForEach-Object { $_.SubString(0, $_.IndexOf('[')).Trim() }
Write-Host "Found installed versions: $($Versions -join ', ')."
$InstalledVersionCount = $Versions.Count

foreach($version in $Versions)
{
foreach ($version in $versions)
foreach($pattern in $PatternsList)
{
if ($ContainedPattern)
{
if ($version.StartsWith($pattern.ToString()) -and $version.Contains($ContainedPattern))
{
$InstalledVersionCount++
}
}
elseif ($version.StartsWith($pattern.ToString()))
{
$InstalledVersionCount++
}
if ($version -match $pattern)
{
$PatternsList.Remove($pattern)
$InstalledVersionCount--
break
}
}
}
if ( $InstalledVersionCount -ne $Patterns.Count)

if ( $InstalledVersionCount -ne 0)
{
throw "An unexpected version of Dotnet is found on the machine, please check the script's dotnet-version patterns."
throw "An unexpected version of Dotnet is found on the machine, please check the correctness of the -Patterns input."
}

Write-Host "Changing directory to the ./__tests__/e2e-test-csproj"
Set-Location ./__tests__/e2e-test-csproj
$workingDir = Get-Location
$testProjectDir = "./__tests__/e2e-test-csproj"
Set-Location $testProjectDir

$targetFrameworkVersionMapping = @{
$targetFrameworkVersionMap = @{
"1.0" = "netcoreapp1.0";
"1.1" = "netcoreapp1.1";
"2.0" = "netcoreapp2.0";
Expand All @@ -64,14 +75,17 @@ $targetFrameworkVersionMapping = @{
"7.0" = "net7.0";
}

foreach ($version in $versions)
foreach ($version in $Versions)
{
# Creating temporary global.json file inside e2e-test-csproj dir and setting exact version of .NET inside allows to override default behavior of .NET and run build and tests on that exact version.
Write-Host "Creating temporary global.json file for $version .NET version."
& $dotnet new globaljson --sdk-version $version --force
Write-Host "The global.json file for the version $version is created. Currently used .NET version is: $(& $dotnet --version)"
Write-Host "The global.json file for the version $version is created. Currently used .NET version is: $(& $dotnet --version)."

# Environment variable TEST_TARGET_FRAMEWORK is used inside the test.csproj file to target required framework version
$version -match "^(?<key>\d+\.\d+)"
Write-Host "Setting the TEST_TARGET_FRAMEWORK environment variable to $($targetFrameworkVersionMapping[$Matches.key])"
[Environment]::SetEnvironmentVariable('TEST_TARGET_FRAMEWORK', $($targetFrameworkVersionMapping[$Matches.key]))
Write-Host "Setting the TEST_TARGET_FRAMEWORK environment variable to $($targetFrameworkVersionMap[$Matches.key])"
[Environment]::SetEnvironmentVariable('TEST_TARGET_FRAMEWORK', $($targetFrameworkVersionMap[$Matches.key]))

Write-Host "Building test C# project with $version .NET version."
& $dotnet build --no-cache
Expand All @@ -89,8 +103,8 @@ foreach ($version in $versions)

Write-Host "Tests are completed successfully!"

Write-Host "Removing temprary global.json file."
Write-Host "Removing temporary global.json file."
Remove-Item ./global.json
}

Set-Location ../..
Set-Location $workingDir
44 changes: 0 additions & 44 deletions __tests__/verify-dotnet.sh

This file was deleted.

0 comments on commit 180a159

Please sign in to comment.