Files
runner-images/images/macos/scripts/tests/Toolcache.Tests.ps1
2025-10-16 12:56:38 +02:00

233 lines
9.1 KiB
PowerShell

Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1"
Import-Module "$PSScriptRoot/Helpers.psm1" -DisableNameChecking
$arch = Get-Architecture
$os = Get-OSVersion
Describe "Toolcache" {
$toolcacheDirectory = Join-Path $env:HOME "hostedtoolcache"
[array]$packages += (Get-ToolsetContent).toolcache | ForEach-Object {
return [PSCustomObject] @{
ToolName = ($_.name).ToLower()
Arch = $arch
Versions = $_.arch.$arch | Where-Object{ $_ } | ForEach-Object { $_.versions.Replace(".*", "") }
}
}
Context "Python" {
$pythonDirectory = Join-Path $toolcacheDirectory "Python"
$pythonPackage = $packages | Where-Object { $_.ToolName -eq "python" } | Select-Object -First 1
$testCase = @{ PythonDirectory = $pythonDirectory }
It "Toolcache directory exists" -TestCases $testCase {
param ( [string] $PythonDirectory )
$PythonDirectory | Should -Exist
}
It "Toolcache directory contains at least one version of Python" -TestCases $testCase {
param ( [string] $PythonDirectory )
(Get-ChildItem -Path $PythonDirectory -Directory).Count | Should -BeGreaterThan 0
}
$pythonPackage.Versions | Where-Object { $_ } | ForEach-Object {
Context "$_" {
$versionDirectory = Get-ChildItem -Path $pythonDirectory -Directory -Filter "$_*" | Select-Object -First 1
$pythonBinPath = Join-Path $versionDirectory.FullName $pythonPackage.Arch "python"
$testCase = @{ PythonVersion = $_; PythonBinPath = $pythonBinPath }
It "Version" -TestCases $testCase {
param (
[string] $PythonVersion,
[string] $PythonBinPath
)
$result = Get-CommandResult "$PythonBinPath --version"
$result.Output | Should -BeLike "*$PythonVersion*"
$result.ExitCode | Should -Be 0
}
It "Run test script" -TestCases $testCase {
param ( [string] $PythonBinPath )
"$PythonBinPath -c 'import sys;print(sys.version)'" | Should -ReturnZeroExitCode
}
}
}
}
Context "Ruby" {
$rubyDirectory = Join-Path $toolcacheDirectory "Ruby"
$rubyPackage = $packages | Where-Object { $_.ToolName -eq "Ruby" } | Select-Object -First 1
$testCase = @{ RubyDirectory = $rubyDirectory }
It "Toolcache directory exists" -TestCases $testCase {
param ( [string] $RubyDirectory )
$RubyDirectory | Should -Exist
}
It "Toolcache directory contains at least one version of Ruby" -TestCases $testCase {
param ( [string] $RubyDirectory )
(Get-ChildItem -Path $RubyDirectory -Directory).Count | Should -BeGreaterThan 0
}
$rubyPackage.Versions | Where-Object { $_ } | ForEach-Object {
Context "$_" {
$versionDirectory = Get-ChildItem -Path $rubyDirectory -Directory -Filter "$_*" | Select-Object -First 1
$rubyBinPath = Join-Path $versionDirectory.FullName $rubyPackage.Arch "bin" "ruby"
$testCase = @{ RubyVersion = $_; RubyBinPath = $rubyBinPath }
It "Version" -TestCases $testCase {
param (
[string] $RubyVersion,
[string] $RubyBinPath
)
$result = Get-CommandResult "$RubyBinPath --version"
$result.Output | Should -BeLike "*$RubyVersion*"
$result.ExitCode | Should -Be 0
}
It "Run test script" -TestCases $testCase {
param ( [string] $RubyBinPath )
"$RubyBinPath -e 'puts RUBY_VERSION'" | Should -ReturnZeroExitCode
}
}
}
}
Context "PyPy" -Skip:(-not $os.IsVenturaX64) {
$pypyDirectory = Join-Path $toolcacheDirectory "PyPy"
$pypyPackage = $packages | Where-Object { $_.ToolName -eq "pypy" } | Select-Object -First 1
$testCase = @{ PypyDirectory = $pypyDirectory }
It "Toolcache directory exists" -TestCases $testCase {
param ( [string] $PypyDirectory )
$PypyDirectory | Should -Exist
}
It "Toolcache directory contains at least one version of PyPy" -TestCases $testCase {
param ( [string] $PypyDirectory )
(Get-ChildItem -Path $PypyDirectory -Directory).Count | Should -BeGreaterThan 0
}
$pypyPackage.Versions | Where-Object { $_ } | ForEach-Object {
Context "$_" {
$versionDirectory = Get-ChildItem -Path $pypyDirectory -Directory -Filter "$_*" | Select-Object -First 1
$binFilename = If ($_.StartsWith("3")) { "pypy3" } else { "pypy" }
$pypyBinPath = Join-Path $versionDirectory.FullName $pypyPackage.Arch "bin" $binFilename
$testCase = @{ PypyVersion = $_; PypyBinPath = $pypyBinPath }
It "Version" -TestCases $testCase {
param (
[string] $PypyVersion,
[string] $PypyBinPath
)
$result = Get-CommandResult "$PypyBinPath --version"
$result.Output | Should -BeLike "*$PypyVersion*"
$result.ExitCode | Should -Be 0
}
It "Run test script" -TestCases $testCase {
param ( [string] $PypyBinPath )
"$PypyBinPath -c 'import sys;print(sys.version)'" | Should -ReturnZeroExitCode
}
}
}
}
Context "Node" {
$nodeDirectory = Join-Path $toolcacheDirectory "node"
$nodePackage = $packages | Where-Object { $_.ToolName -eq "node" } | Select-Object -First 1
$testCase = @{ NodeDirectory = $nodeDirectory }
It "Toolcache directory exists" -TestCases $testCase {
param ( [string] $NodeDirectory )
$NodeDirectory | Should -Exist
}
It "Toolcache directory contains at least one version of Node" -TestCases $testCase {
param ( [string] $NodeDirectory )
(Get-ChildItem -Path $NodeDirectory -Directory).Count | Should -BeGreaterThan 0
}
$nodePackage.Versions | Where-Object { $_ } | ForEach-Object {
Context "$_" {
$versionDirectory = Get-ChildItem -Path $nodeDirectory -Directory -Filter "$_*" | Select-Object -First 1
$nodeBinPath = Join-Path $versionDirectory.FullName $nodePackage.Arch "bin" "node"
$npmBinPath = Join-Path $versionDirectory.FullName $nodePackage.Arch "bin" "npm"
$testCase = @{ NodeVersion = $_; NodeBinPath = $nodeBinPath; NpmBinPath = $npmBinPath }
It "Version Node" -TestCases $testCase {
param (
[string] $NodeVersion,
[string] $NodeBinPath
)
$result = Get-CommandResult "$NodeBinPath --version"
$result.Output | Should -BeLike "*$NodeVersion*"
$result.ExitCode | Should -Be 0
}
It "Version Npm" -TestCases $testCase {
param ( [string] $NpmBinPath )
"$NpmBinPath --version" | Should -ReturnZeroExitCode
}
It "Run test script" -TestCases $testCase {
param ( [string] $NodeBinPath )
"$NodeBinPath -e 'console.log(process.version)'" | Should -ReturnZeroExitCode
}
}
}
}
Context "Go" {
$goDirectory = Join-Path $toolcacheDirectory "go"
$goPackage = $packages | Where-Object { $_.ToolName -eq "go" } | Select-Object -First 1
$testCase = @{ GoDirectory = $goDirectory }
It "Toolcache directory exists" -TestCases $testCase {
param ( [string] $GoDirectory )
$GoDirectory | Should -Exist
}
It "Toolcache directory contains at least one version of Go" -TestCases $testCase {
param ( [string] $GoDirectory )
(Get-ChildItem -Path $GoDirectory -Directory).Count | Should -BeGreaterThan 0
}
$goPackage.Versions | Where-Object { $_ } | ForEach-Object {
Context "$_" {
$versionDirectory = Get-ChildItem -Path $goDirectory -Directory -Filter "$_*" | Select-Object -First 1
$goBinPath = Join-Path $versionDirectory.FullName $goPackage.Arch "bin" "go"
$testCase = @{ GoVersion = $_; GoBinPath = $goBinPath }
It "Version Go" -TestCases $testCase {
param (
[string] $GoVersion,
[string] $GoBinPath
)
$result = Get-CommandResult "$GoBinPath version"
$result.Output | Should -BeLike "*$GoVersion*"
$result.ExitCode | Should -Be 0
}
}
}
}
}