102 lines
3.6 KiB
PowerShell
102 lines
3.6 KiB
PowerShell
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
Describe "Get-PSHostProcessInfo tests" -Tag CI {
|
|
BeforeAll {
|
|
$si = [System.Diagnostics.ProcessStartInfo]::new()
|
|
$si.FileName = "pwsh"
|
|
$si.Arguments = "-noexit"
|
|
$si.RedirectStandardInput = $true
|
|
$si.RedirectStandardOutput = $true
|
|
$si.RedirectStandardError = $true
|
|
$pwsh = [System.Diagnostics.Process]::Start($si)
|
|
|
|
if ($IsWindows) {
|
|
$si.FileName = "powershell"
|
|
$powershell = [System.Diagnostics.Process]::Start($si)
|
|
}
|
|
}
|
|
|
|
AfterAll {
|
|
$pwsh | Stop-Process
|
|
|
|
if ($IsWindows) {
|
|
$powershell | Stop-Process
|
|
}
|
|
}
|
|
|
|
It "Should return own self" {
|
|
(Get-PSHostProcessInfo).ProcessId | Should -Contain $PID
|
|
}
|
|
|
|
It "Should return own self window title" {
|
|
$expected = (Get-Process -Id $PID).MainWindowTitle
|
|
(Get-PSHostProcessInfo -Id $PID).MainWindowTitle | Should -BeExactly $expected
|
|
}
|
|
|
|
It "Should list info for other PowerShell hosted processes" {
|
|
# Creation of the named pipe is async
|
|
Wait-UntilTrue {
|
|
Get-PSHostProcessInfo | Where-Object { $_.ProcessId -eq $pwsh.Id }
|
|
} | Should -BeTrue
|
|
$pshosts = Get-PSHostProcessInfo
|
|
$pshosts.Count | Should -BeGreaterOrEqual 1
|
|
$pshosts.ProcessId | Should -Contain $pwsh.Id
|
|
}
|
|
|
|
It "Should list Windows PowerShell process" -Skip:(!$IsWindows) {
|
|
# Creation of the named pipe is async
|
|
Wait-UntilTrue {
|
|
Get-PSHostProcessInfo | Where-Object { $_.ProcessId -eq $powershell.Id }
|
|
} | Should -BeTrue
|
|
$psProcess = Get-PSHostProcessInfo | Where-Object { $_.ProcessName -eq "powershell" }
|
|
$psProcess.Count | Should -BeGreaterOrEqual 1
|
|
$psProcess.ProcessId | Should -Contain $powershell.id
|
|
}
|
|
|
|
It "Verifies named pipe filepath get method" {
|
|
$pipeFilePath = (Get-PSHostProcessInfo -Id $pid).GetPipeNameFilePath()
|
|
$pipeFilePath | Should -Exist
|
|
}
|
|
|
|
It "Verifies named pipe filepath is removed on process exit" {
|
|
$aliveFile = Join-Path -Path $TestDrive -ChildPath 'AliveFileXXZZ.txt'
|
|
"" | Out-File -FilePath $aliveFile
|
|
$testfilePath = Join-Path -Path $TestDrive -ChildPath 'TestScriptXXZZ.ps1'
|
|
@'
|
|
param (
|
|
[string] $LiveFilePath
|
|
)
|
|
|
|
$count = 0
|
|
while ((Test-Path -Path $LiveFilePath) -and ($count++ -lt 60))
|
|
{
|
|
Start-Sleep -Milliseconds 500
|
|
}
|
|
|
|
exit
|
|
'@ | Out-File -FilePath $testfilePath
|
|
|
|
# Create PowerShell process to monitor.
|
|
$psFileName = $IsWindows ? 'pwsh.exe' : 'pwsh'
|
|
$psPath = Join-Path -Path $PSHOME -ChildPath $psFileName
|
|
$psProc = Start-Process -FilePath $psPath -ArgumentList "-File $testfilePath -LiveFilePath $aliveFile" -PassThru
|
|
Wait-UntilTrue -sb {
|
|
(Get-PSHostProcessInfo -Id $psProc.Id) -ne $null
|
|
} -TimeoutInMilliseconds 5000 -IntervalInMilliseconds 250
|
|
|
|
# Verify named pipe file path.
|
|
$psNamedPipePath = (Get-PSHostProcessInfo -Id $psProc.Id).GetPipeNameFilePath()
|
|
$psNamedPipePath | Should -Exist
|
|
|
|
# Signal PowerShell test process to exit normally.
|
|
Remove-Item -Path $aliveFile -Force -ErrorAction Ignore
|
|
Wait-UntilTrue -sb {
|
|
(Test-Path -Path $psNamedPipePath) -eq $false
|
|
} -TimeoutInMilliseconds 5000 -IntervalInMilliseconds 250
|
|
|
|
# Verify named pipe file path is removed.
|
|
$psNamedPipePath | Should -Not -Exist
|
|
}
|
|
}
|