Fix CI Failures caused by moving from WindowsPowerShell to PowerShell 7

Fix CI Failures
This commit is contained in:
Vivian Thiebaut 2022-11-16 12:26:43 -05:00 committed by GitHub
commit e1432f00dd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
12 changed files with 46 additions and 96 deletions

View File

@ -32,8 +32,7 @@ Describe "Tests for authorized_keys file permission" -Tags "CI" {
#skip when the task schedular (*-ScheduledTask) cmdlets does not exist #skip when the task schedular (*-ScheduledTask) cmdlets does not exist
$ts = (get-command get-ScheduledTask -ErrorAction SilentlyContinue) $ts = (get-command get-ScheduledTask -ErrorAction SilentlyContinue)
$skip = $ts -eq $null $skip = $ts -eq $null
$platform = Get-Platform if($IsWindows -and ([Environment]::OSVersion.Version.Major -le 6))
if(($platform -eq [PlatformType]::Windows) -and ([Environment]::OSVersion.Version.Major -le 6))
{ {
#suppress the firewall blocking dialogue on win7 #suppress the firewall blocking dialogue on win7
netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in
@ -43,8 +42,7 @@ Describe "Tests for authorized_keys file permission" -Tags "CI" {
AfterEach { $tI++ } AfterEach { $tI++ }
AfterAll { AfterAll {
$platform = Get-Platform if($IsWindows -and ($psversiontable.BuildVersion.Major -le 6))
if(($platform -eq [PlatformType]::Windows) -and ($psversiontable.BuildVersion.Major -le 6))
{ {
netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in
} }

View File

@ -9,33 +9,6 @@ Add-Type -TypeDefinition @"
} }
"@ "@
function Get-Platform {
# Use the .NET Core APIs to determine the current platform; if a runtime
# exception is thrown, we are on FullCLR, not .NET Core.
try {
$Runtime = [System.Runtime.InteropServices.RuntimeInformation]
$OSPlatform = [System.Runtime.InteropServices.OSPlatform]
$IsLinux = $Runtime::IsOSPlatform($OSPlatform::Linux)
$IsOSX = $Runtime::IsOSPlatform($OSPlatform::OSX)
$IsWindows = $Runtime::IsOSPlatform($OSPlatform::Windows)
} catch {
try {
$IsLinux = $false
$IsOSX = $false
$IsWindows = $true
}
catch { }
}
if($IsOSX) {
[PlatformType]::OSX
} elseif($IsLinux) {
[PlatformType]::Linux
} else {
[PlatformType]::Windows
}
}
function Set-FilePermission function Set-FilePermission
{ {
param( param(
@ -94,8 +67,7 @@ function Set-FilePermission
function Add-PasswordSetting function Add-PasswordSetting
{ {
param([string] $pass) param([string] $pass)
$platform = Get-Platform if ($IsWindows) {
if ($platform -eq [PlatformType]::Windows) {
if (-not($env:DISPLAY)) {$env:DISPLAY = 1} if (-not($env:DISPLAY)) {$env:DISPLAY = 1}
$askpass_util = Join-Path $PSScriptRoot "utilities\askpass_util\askpass_util.exe" $askpass_util = Join-Path $PSScriptRoot "utilities\askpass_util\askpass_util.exe"
$env:SSH_ASKPASS=$askpass_util $env:SSH_ASKPASS=$askpass_util
@ -157,8 +129,8 @@ function Stop-SSHDTestDaemon
{ {
foreach ($ps in $p) { foreach ($ps in $p) {
$pss =$ps.ToString() -split "\s+"; $pss =$ps.ToString() -split "\s+";
$pid = $pss[$pss.length -1] $processid = $pss[$pss.length -1]
Stop-Process -Id $pid -Force -ErrorAction SilentlyContinue Stop-Process -Id $processid -Force -ErrorAction SilentlyContinue
} }
#if still running, wait a little while for task to complete #if still running, wait a little while for task to complete
$num = 0 $num = 0

View File

@ -48,7 +48,7 @@ Describe "Tests for admin and non-admin file based logs" -Tags "CI" {
{ {
Stop-SSHDTestDaemon -Port $port Stop-SSHDTestDaemon -Port $port
} }
if(($platform -eq [PlatformType]::Windows) -and ([Environment]::OSVersion.Version.Major -le 6)) if($IsWindows -and ([Environment]::OSVersion.Version.Major -le 6))
{ {
#suppress the firewall blocking dialogue on win7 #suppress the firewall blocking dialogue on win7
netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in
@ -58,7 +58,7 @@ Describe "Tests for admin and non-admin file based logs" -Tags "CI" {
AfterEach { $tI++ } AfterEach { $tI++ }
AfterAll { AfterAll {
if(($platform -eq [PlatformType]::Windows) -and ($psversiontable.BuildVersion.Major -le 6)) if($IsWindows -and ($psversiontable.BuildVersion.Major -le 6))
{ {
netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in
} }
@ -131,11 +131,11 @@ Describe "Tests for admin and non-admin file based logs" -Tags "CI" {
if($OpenSSHTestInfo["NoLibreSSL"]) if($OpenSSHTestInfo["NoLibreSSL"])
{ {
ssh-keygen.exe -t ed25519 -f $KeyFilePath -Z -P `"`" aes128-ctr ssh-keygen.exe -t ed25519 -f $KeyFilePath -Z -P "" aes128-ctr
} }
else else
{ {
ssh-keygen.exe -t ed25519 -f $KeyFilePath -P `"`" ssh-keygen.exe -t ed25519 -f $KeyFilePath -P ""
} }
Copy-Item "$keyFilePath.pub" $authorizedkeyPath -Force -ErrorAction SilentlyContinue Copy-Item "$keyFilePath.pub" $authorizedkeyPath -Force -ErrorAction SilentlyContinue
Repair-AuthorizedKeyPermission -Filepath $authorizedkeyPath -confirm:$false Repair-AuthorizedKeyPermission -Filepath $authorizedkeyPath -confirm:$false

View File

@ -21,9 +21,8 @@ Describe "Tests for host keys file permission" -Tags "CI" {
$ssouser = $OpenSSHTestInfo["SSOUser"] $ssouser = $OpenSSHTestInfo["SSOUser"]
$script:logNum = 0 $script:logNum = 0
Remove-Item -Path (Join-Path $testDir "*$logName") -Force -ErrorAction SilentlyContinue Remove-Item -Path (Join-Path $testDir "*$logName") -Force -ErrorAction SilentlyContinue
$platform = Get-Platform $skip = $IsWindows -and ([Environment]::OSVersion.Version.Major -le 6) -and ([Environment]::OSVersion.Version.Minor -lt 2)
$skip = ($platform -eq [PlatformType]::Windows) -and ([Environment]::OSVersion.Version.Major -le 6) -and ([Environment]::OSVersion.Version.Minor -lt 2) if($IsWindows -and ($psversiontable.BuildVersion.Major -le 6))
if(($platform -eq [PlatformType]::Windows) -and ($psversiontable.BuildVersion.Major -le 6))
{ {
#suppress the firewall blocking dialogue on win7 #suppress the firewall blocking dialogue on win7
netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in
@ -32,7 +31,7 @@ Describe "Tests for host keys file permission" -Tags "CI" {
AfterEach { $tI++ } AfterEach { $tI++ }
AfterAll { AfterAll {
if(($platform -eq [PlatformType]::Windows) -and ($psversiontable.BuildVersion.Major -le 6)) if($IsWindows -and ($psversiontable.BuildVersion.Major -le 6))
{ {
netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in
} }

View File

@ -25,8 +25,7 @@ Describe "Tests for log file permission" -Tags "CI" {
Remove-Item (Join-Path $testDir "*$logName") -Force -ErrorAction SilentlyContinue Remove-Item (Join-Path $testDir "*$logName") -Force -ErrorAction SilentlyContinue
$platform = Get-Platform if($IsWindows -and ($psversiontable.BuildVersion.Major -le 6))
if(($platform -eq [PlatformType]::Windows) -and ($psversiontable.BuildVersion.Major -le 6))
{ {
#suppress the firewall blocking dialogue on win7 #suppress the firewall blocking dialogue on win7
netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in
@ -84,7 +83,7 @@ Describe "Tests for log file permission" -Tags "CI" {
AfterEach {$tI++;} AfterEach {$tI++;}
AfterAll { AfterAll {
if(($platform -eq [PlatformType]::Windows) -and ($psversiontable.BuildVersion.Major -le 6)) if($IsWindows -and ($psversiontable.BuildVersion.Major -le 6))
{ {
netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in
} }

View File

@ -19,26 +19,11 @@ Enum PlatformType {
function Set-Platform { function Set-Platform {
# Use the .NET Core APIs to determine the current platform; if a runtime # Use the .NET Core APIs to determine the current platform; if a runtime
# exception is thrown, we are on FullCLR, not .NET Core. # exception is thrown, we are on FullCLR, not .NET Core.
try { if($IsMacOS) {
$Runtime = [System.Runtime.InteropServices.RuntimeInformation]
$OSPlatform = [System.Runtime.InteropServices.OSPlatform]
$IsLinux = $Runtime::IsOSPlatform($OSPlatform::Linux)
$IsOSX = $Runtime::IsOSPlatform($OSPlatform::OSX)
$IsWindows = $Runtime::IsOSPlatform($OSPlatform::Windows)
} catch {
try {
$IsLinux = $false
$IsOSX = $false
$IsWindows = $true
}
catch { }
}
if($IsOSX) {
[PlatformType]::OSX [PlatformType]::OSX
} elseif($IsLinux) { } elseif($IsLinux) {
[PlatformType]::Linux [PlatformType]::Linux
} else { } elseif($IsWindows) {
[PlatformType]::Windows [PlatformType]::Windows
} }
} }

View File

@ -15,9 +15,8 @@ Describe "E2E scenarios for port forwarding" -Tags "CI" {
{ {
$null = New-Item $testDir -ItemType directory -Force -ErrorAction SilentlyContinue $null = New-Item $testDir -ItemType directory -Force -ErrorAction SilentlyContinue
} }
$platform = Get-Platform
#skip on ps 2 becase non-interactive cmd require a ENTER before it returns on ps2 #skip on ps 2 becase non-interactive cmd require a ENTER before it returns on ps2
$skip = ($platform -eq [PlatformType]::Windows) -and ($PSVersionTable.PSVersion.Major -le 2) $skip = $IsWindows -and ($PSVersionTable.PSVersion.Major -le 2)
} }
BeforeEach { BeforeEach {

View File

@ -206,7 +206,7 @@ Describe "Tests for scp command" -Tags "CI" {
$equal = @(Compare-Object (Get-ChildItem -Recurse -path $SourceDir) (Get-ChildItem -Recurse -path (join-path $DestinationDir $SourceDirName) ) -Property Name, Length).Length -eq 0 $equal = @(Compare-Object (Get-ChildItem -Recurse -path $SourceDir) (Get-ChildItem -Recurse -path (join-path $DestinationDir $SourceDirName) ) -Property Name, Length).Length -eq 0
$equal | Should Be $true $equal | Should Be $true
if($Options.contains("-p ") -and ($platform -eq [PlatformType]::Windows) -and ($PSVersionTable.PSVersion.Major -gt 2)) if($Options.contains("-p ") -and $IsWindows -and ($PSVersionTable.PSVersion.Major -gt 2))
{ {
$equal = @(Compare-Object (Get-ChildItem -Recurse -path $SourceDir).LastWriteTime.DateTime (Get-ChildItem -Recurse -path (join-path $DestinationDir $SourceDirName) ).LastWriteTime.DateTime).Length -eq 0 $equal = @(Compare-Object (Get-ChildItem -Recurse -path $SourceDir).LastWriteTime.DateTime (Get-ChildItem -Recurse -path (join-path $DestinationDir $SourceDirName) ).LastWriteTime.DateTime).Length -eq 0
$equal | Should Be $true $equal | Should Be $true

View File

@ -36,8 +36,7 @@ Describe "SFTP Test Cases" -Tags "CI" {
Remove-item (Join-Path $rootDirectory "*.$batchFileName") -Force -ErrorAction SilentlyContinue Remove-item (Join-Path $rootDirectory "*.$batchFileName") -Force -ErrorAction SilentlyContinue
Remove-item (Join-Path $rootDirectory "*.log") -Force -ErrorAction SilentlyContinue Remove-item (Join-Path $rootDirectory "*.log") -Force -ErrorAction SilentlyContinue
$platform = Get-Platform $skip = $IsWindows -and ($PSVersionTable.PSVersion.Major -le 2)
$skip = ($platform -eq [PlatformType]::Windows) -and ($PSVersionTable.PSVersion.Major -le 2)
$testData1 = @( $testData1 = @(
@{ @{

View File

@ -27,9 +27,8 @@ Describe "E2E scenarios for ssh client" -Tags "CI" {
$accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($ssouser, $rights, "ContainerInherit,Objectinherit", "None", "Allow") $accessRule = New-Object System.Security.AccessControl.FileSystemAccessRule($ssouser, $rights, "ContainerInherit,Objectinherit", "None", "Allow")
$acl.SetAccessRule($accessRule) $acl.SetAccessRule($accessRule)
Set-Acl -Path $testDir -AclObject $acl Set-Acl -Path $testDir -AclObject $acl
$platform = Get-Platform
#skip on ps 2 becase non-interactive cmd require a ENTER before it returns on ps2 #skip on ps 2 becase non-interactive cmd require a ENTER before it returns on ps2
$skip = ($platform -eq [PlatformType]::Windows) -and ($PSVersionTable.PSVersion.Major -le 2) $skip = $IsWindows -and ($PSVersionTable.PSVersion.Major -le 2)
<#$testData = @( <#$testData = @(
@{ @{
@ -153,8 +152,8 @@ Describe "E2E scenarios for ssh client" -Tags "CI" {
} }
It "$tC.$tI - multiple double quotes in cmdline" { It "$tC.$tI - multiple double quotes in cmdline" {
# actual command line ssh target \"cmd\" /c \"echo hello\" # actual command line ssh target "cmd" /c "echo hello"
$o = ssh test_target `\`"cmd`\`" /c `\`"echo hello`\`" $o = ssh test_target `"cmd`" /c `"echo hello`"
$o | Should Be "hello" $o | Should Be "hello"
} }
@ -220,19 +219,19 @@ Describe "E2E scenarios for ssh client" -Tags "CI" {
} }
It "$tC.$tI - powershell as default shell and double quotes in cmdline" { It "$tC.$tI - powershell as default shell and double quotes in cmdline" {
# actual command line ssh target echo `"hello`" # actual command line ssh target echo `"hello`"
$o = ssh test_target echo ``\`"hello``\`" $o = ssh test_target echo `"hello`"
$o | Should Be "`"hello`"" $o | Should Be "hello"
} }
It "$tC.$tI - multiple commands with double quotes in powershell cmdlet" -skip:$skip { It "$tC.$tI - multiple commands with double quotes in powershell cmdlet" -skip:$skip {
# actual command line ssh target cd "$env:programfiles";pwd # actual command line ssh target cd "$env:programfiles\";pwd
$o = ssh test_target "cd \`"`$env:programfiles\`";pwd" $o = ssh test_target "cd `"`$env:programfiles\`";pwd"
$LASTEXITCODE | Should Be 0 $LASTEXITCODE | Should Be 0
$match = $o -match "Program Files" $match = $o -match "Program Files"
$match.count | Should be 1 $match.count | Should be 1
} }
It "$tC.$tI - multiple commands with double quotes in powershell cmdlet" -skip:$skip { It "$tC.$tI - multiple commands with double quotes in powershell cmdlet" -skip:$skip {
# actual command line ssh target dir "$env:programfiles";cd "$env:programfiles";pwd # actual command line ssh target dir "$env:programfiles\";cd "$env:programfiles\";pwd
$o = ssh test_target "dir \`"`$env:programfiles\`";cd \`"`$env:programfiles\`";pwd" $o = ssh test_target "dir `"`$env:programfiles\`";cd `"`$env:programfiles\`";pwd"
$LASTEXITCODE | Should Be 0 $LASTEXITCODE | Should Be 0
#$o -contains "Program Files" | Should Be $True #$o -contains "Program Files" | Should Be $True
$match = $o -match "Program Files" $match = $o -match "Program Files"
@ -263,8 +262,8 @@ Describe "E2E scenarios for ssh client" -Tags "CI" {
$o | Should Contain "cmd" $o | Should Contain "cmd"
} }
It "$tC.$tI - cmd as default shell and double quotes in cmdline" { It "$tC.$tI - cmd as default shell and double quotes in cmdline" {
# actual command line ssh target echo "\"hello\"" # actual command line ssh target echo "hello"
$o = ssh test_target 'echo "\"hello\""' $o = ssh test_target echo "`"hello`""
$o | Should Be "`"hello`"" $o | Should Be "`"hello`""
} }
It "$tC.$tI - single quotes in powershell cmdlet" -skip:$skip { It "$tC.$tI - single quotes in powershell cmdlet" -skip:$skip {
@ -286,8 +285,8 @@ Describe "E2E scenarios for ssh client" -Tags "CI" {
Remove-ItemProperty -Path $dfltShellRegPath -Name $dfltShellCmdOptionRegKeyName -ErrorAction SilentlyContinue Remove-ItemProperty -Path $dfltShellRegPath -Name $dfltShellCmdOptionRegKeyName -ErrorAction SilentlyContinue
} }
It "$tC.$tI - shellhost as default shell and multiple double quotes in cmdline" { It "$tC.$tI - shellhost as default shell and multiple double quotes in cmdline" {
# actual command line ssh target \"cmd\" /c \"echo \"hello\"\" # actual command line ssh target "cmd" /c "echo "hello""
$o = ssh test_target `\`"cmd`\`" /c `\`"echo \`"hello\`"`\`" $o = ssh test_target `"cmd`" /c `"echo `"hello`"`"
$o | Should Be "`"hello`"" $o | Should Be "`"hello`""
} }
} }

View File

@ -142,7 +142,7 @@ Match User matchuser
{ {
Stop-SSHDTestDaemon -Port $port Stop-SSHDTestDaemon -Port $port
} }
if(($platform -eq [PlatformType]::Windows) -and ([Environment]::OSVersion.Version.Major -le 6)) if($IsWindows -and ([Environment]::OSVersion.Version.Major -le 6))
{ {
#suppress the firewall blocking dialogue on win7 #suppress the firewall blocking dialogue on win7
netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in netsh advfirewall firewall add rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any action=allow dir=in
@ -153,7 +153,7 @@ Match User matchuser
AfterAll { AfterAll {
$PrincipalContext.Dispose() $PrincipalContext.Dispose()
if(($platform -eq [PlatformType]::Windows) -and ($psversiontable.BuildVersion.Major -le 6)) if($IsWindows -and ($psversiontable.BuildVersion.Major -le 6))
{ {
netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in netsh advfirewall firewall delete rule name="sshd" program="$($OpenSSHTestInfo['OpenSSHBinPath'])\sshd.exe" protocol=any dir=in
} }

View File

@ -23,18 +23,18 @@ Describe "E2E scenarios for ssh-shellhost" -Tags "CI" {
} }
It "$tC.$tI - various quote tests" -skip:$skip { It "$tC.$tI - various quote tests" -skip:$skip {
$o = ssh-shellhost -c cmd /c echo hello $o = ssh-shellhost -c cmd /c echo hello
$o | Should Be "hello" $o | Should Be "hello"
$o = ssh-shellhost -c `"cmd /c echo hello`" $o = ssh-shellhost -c "cmd /c echo hello"
$o | Should Be "hello" $o | Should Be "hello"
$o = ssh-shellhost -c cmd /c echo `"hello`" $o = ssh-shellhost -c cmd /c echo "hello"
$o | Should Be "`"hello`"" $o | Should Be "hello"
$o = ssh-shellhost -c `"cmd /c echo `"hello`"`" $o = ssh-shellhost -c "cmd /c echo `"hello`""
$o | Should Be "`"hello`"" $o | Should Be "`\`"hello`\`""
$o = ssh-shellhost -c `"cmd /c echo `"hello`" $o = ssh-shellhost -c "cmd /c echo `"hello"
$o | Should Be "`"hello" $o | Should Be "`\`"hello"
$o = ssh-shellhost -c `"`"cmd`" /c echo `"hello`"`" $o = ssh-shellhost -c "cmd" /c echo "hello"
$o | Should Be "`"hello`"" $o | Should Be "hello"
} }