mirror of
https://github.com/actions/runner-images-sangeeth.git
synced 2025-12-15 14:26:48 +00:00
[Windows] Improve Pester tests coverage for MSYS2 (#3595)
* Add ShouldReturnZeroExitCodeWithParam function and a new set of tests for MSYS2 tools * Change get-command -> Get-Command * Remove elevated user, return original path after msys installation and tests, resolve nitpicks * Add BeforeEach and AfterEach blocks These blocks change the path before each test and return the original path after each test * Change get-command -> Get-Command
This commit is contained in:
@@ -96,6 +96,42 @@ function ShouldReturnZeroExitCode {
|
||||
}
|
||||
}
|
||||
|
||||
# Pester Assert to check exit code of command with given parameter, the assertion performed up to 3 checks (without '-', with 1 and 2 '-') until succeeded
|
||||
function ShouldReturnZeroExitCodeWithParam {
|
||||
param (
|
||||
[Parameter(Mandatory)] [string] $ActualValue,
|
||||
[switch] $Negate,
|
||||
[string] $CallParameter = "version",
|
||||
[string] $CallerSessionState
|
||||
)
|
||||
|
||||
$delimiterCharacter = ""
|
||||
|
||||
while ($delimiterCharacter.Length -le 2)
|
||||
{
|
||||
$callParameterWithDelimeter = $delimiterCharacter + $CallParameter
|
||||
$commandToCheck = "$ActualValue $callParameterWithDelimeter"
|
||||
[bool]$succeeded = (ShouldReturnZeroExitCode -ActualValue $commandToCheck).Succeeded
|
||||
|
||||
if ($succeeded)
|
||||
{
|
||||
break
|
||||
}
|
||||
$delimiterCharacter += '-'
|
||||
}
|
||||
if ($Negate) { $succeeded = -not $succeeded }
|
||||
|
||||
if (-not $succeeded)
|
||||
{
|
||||
$failureMessage = "Tool '$ActualValue' has not returned 0 exit code for any of these flags: '$CallParameter' or '-$CallParameter' or '--$CallParameter'"
|
||||
}
|
||||
|
||||
return [PSCustomObject] @{
|
||||
Succeeded = $succeeded
|
||||
FailureMessage = $failureMessage
|
||||
}
|
||||
}
|
||||
|
||||
# Pester Assert to match output of command
|
||||
function ShouldMatchCommandOutput {
|
||||
Param(
|
||||
@@ -130,5 +166,6 @@ function ShouldMatchCommandOutput {
|
||||
|
||||
If (Get-Command -Name Add-ShouldOperator -ErrorAction SilentlyContinue) {
|
||||
Add-ShouldOperator -Name ReturnZeroExitCode -InternalName ShouldReturnZeroExitCode -Test ${function:ShouldReturnZeroExitCode}
|
||||
Add-ShouldOperator -Name ReturnZeroExitCodeWithParam -InternalName ShouldReturnZeroExitCodeWithParam -Test ${function:ShouldReturnZeroExitCodeWithParam}
|
||||
Add-ShouldOperator -Name MatchCommandOutput -InternalName ShouldMatchCommandOutput -Test ${function:ShouldMatchCommandOutput}
|
||||
}
|
||||
@@ -88,6 +88,7 @@ foreach ($arch in $archs)
|
||||
pacman.exe -Q | grep ^${arch}-
|
||||
}
|
||||
|
||||
$env:PATH = $origPath
|
||||
Write-Host "`nMSYS2 installation completed"
|
||||
|
||||
Invoke-PesterTests -TestFile "MSYS2"
|
||||
|
||||
@@ -1,23 +1,78 @@
|
||||
$toolsetContent = (Get-ToolsetContent).MsysPackages
|
||||
$archs = $toolsetContent.mingw.arch
|
||||
|
||||
BeforeAll {
|
||||
$msys2BinDir = "C:\msys64\usr\bin"
|
||||
$msys2mingwDir = "C:\msys64\mingw64\bin"
|
||||
$msys2Dir = "C:\msys64\usr\bin"
|
||||
$originalPath = $env:PATH
|
||||
}
|
||||
|
||||
Describe "MSYS2" {
|
||||
It "<ToolName>" -TestCases @(
|
||||
Describe "MSYS2 packages" {
|
||||
BeforeEach {
|
||||
$env:PATH = "$msys2Dir;$env:PATH"
|
||||
}
|
||||
|
||||
It "msys2Dir exists" {
|
||||
$msys2Dir | Should -Exist
|
||||
}
|
||||
|
||||
$TestCases = @(
|
||||
@{ ToolName = "bash.exe" }
|
||||
@{ ToolName = "tar.exe" }
|
||||
@{ ToolName = "make.exe" }
|
||||
) {
|
||||
Join-Path $msys2BinDir $ToolName | Should -Exist
|
||||
)
|
||||
|
||||
It "<ToolName> is installed in <msys2Dir>" -TestCases $TestCases {
|
||||
(Get-Command "$ToolName").Source | Should -BeLike "$msys2Dir*"
|
||||
}
|
||||
|
||||
It "<ToolName>" -TestCases @(
|
||||
@{ ToolName = "gcc.exe" }
|
||||
@{ ToolName = "cmake.exe" }
|
||||
@{ ToolName = "g++.exe" }
|
||||
@{ ToolName = "clang-tidy.exe" }
|
||||
) {
|
||||
Join-Path $msys2mingwDir $ToolName | Should -Exist
|
||||
It "<ToolName> is avaialable" -TestCases $TestCases {
|
||||
"$ToolName" | Should -ReturnZeroExitCodeWithParam
|
||||
}
|
||||
|
||||
AfterEach {
|
||||
$env:PATH = $originalPath
|
||||
}
|
||||
}
|
||||
|
||||
foreach ($arch in $archs) {
|
||||
Describe "$arch arch packages" {
|
||||
$archPackages = $toolsetContent.mingw | Where-Object { $_.arch -eq $arch }
|
||||
$tools = $archPackages.runtime_packages.name
|
||||
|
||||
if ($arch -eq "mingw-w64-i686")
|
||||
{
|
||||
$ExecDir = "C:\msys64\mingw32\bin"
|
||||
}
|
||||
else
|
||||
{
|
||||
$ExecDir = "C:\msys64\mingw64\bin"
|
||||
}
|
||||
|
||||
foreach ($tool in $tools) {
|
||||
Context "$tool package"{
|
||||
$executables = ($archPackages.runtime_packages | Where-Object { $_.name -eq $tool }).executables | ForEach-Object {
|
||||
@{
|
||||
ExecName = $_
|
||||
ExecDir = $ExecDir
|
||||
}
|
||||
}
|
||||
|
||||
BeforeEach {
|
||||
$env:PATH = "$ExecDir;$env:PATH"
|
||||
}
|
||||
|
||||
It "<ExecName> is installed in <ExecDir>" -TestCases $executables {
|
||||
(Get-Command "$ExecName").Source | Should -BeLike "$ExecDir*"
|
||||
}
|
||||
|
||||
It "<ExecName> is available" -TestCases $executables {
|
||||
"$ExecName" | Should -ReturnZeroExitCodeWithParam
|
||||
}
|
||||
|
||||
AfterEach {
|
||||
$env:PATH = $originalPath
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -303,8 +303,6 @@
|
||||
"environment_vars": [
|
||||
"TOOLSET_JSON_PATH={{user `toolset_json_path`}}"
|
||||
],
|
||||
"elevated_user": "SYSTEM",
|
||||
"elevated_password": "",
|
||||
"scripts": [
|
||||
"{{ template_dir }}/scripts/Installers/Install-Msys2.ps1"
|
||||
]
|
||||
|
||||
@@ -274,8 +274,6 @@
|
||||
"environment_vars": [
|
||||
"TOOLSET_JSON_PATH={{user `toolset_json_path`}}"
|
||||
],
|
||||
"elevated_user": "SYSTEM",
|
||||
"elevated_password": "",
|
||||
"scripts": [
|
||||
"{{ template_dir }}/scripts/Installers/Install-Msys2.ps1"
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user