mirror of
https://github.com/PowerShell/PowerShell
synced 2026-06-08 12:12:50 +00:00
75 lines
2.8 KiB
PowerShell
75 lines
2.8 KiB
PowerShell
# Copyright (c) Microsoft Corporation.
|
|
# Licensed under the MIT License.
|
|
|
|
Describe "Wait-Process" {
|
|
|
|
BeforeAll {
|
|
$pingCommandPath = (Get-Command -CommandType Application ping)[0].Definition
|
|
|
|
$startProcessArgs = @{
|
|
FilePath = $pingCommandPath
|
|
PassThru = $true
|
|
}
|
|
$nc = $IsWindows ? "-n" : "-c"
|
|
|
|
function longPing { Start-Process @startProcessArgs -ArgumentList "$nc 10 localhost" }
|
|
function shortPing { Start-Process @startProcessArgs -ArgumentList "$nc 2 localhost" }
|
|
}
|
|
|
|
BeforeEach {
|
|
$Processes = @( 1..3 | ForEach-Object { longPing } ) + ($shortPing = shortPing)
|
|
}
|
|
|
|
AfterEach {
|
|
Stop-Process -InputObject $Processes
|
|
}
|
|
|
|
It "Should wait until all processes have exited" {
|
|
Wait-Process -InputObject $Processes
|
|
|
|
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
|
}
|
|
|
|
It "Should return after all processes have exited, even if some exit before the wait starts." {
|
|
Wait-UntilTrue -sb { $shortPing.HasExited -eq $true } -IntervalInMilliseconds 100
|
|
Wait-Process -InputObject $Processes
|
|
|
|
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
|
}
|
|
|
|
It "Should return immediately if all processes have exited before the wait starts" {
|
|
Wait-UntilTrue -sb { $Processes.HasExited -NotContains $false } -IntervalInMilliseconds 100
|
|
Wait-Process -InputObject $Processes
|
|
|
|
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
|
}
|
|
|
|
It "Should return immediately if at least one process has exited before the wait starts" {
|
|
Wait-UntilTrue -sb { $shortPing.HasExited -eq $true } -IntervalInMilliseconds 100
|
|
Wait-Process -InputObject $Processes -Any
|
|
|
|
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be 1
|
|
$Processes.Where({$_.HasExited -eq $false}).Count | Should -Be ($Processes.Count - 1)
|
|
}
|
|
|
|
It "Should wait until any one process has exited" {
|
|
Wait-Process -InputObject $Processes -Any
|
|
|
|
$Processes.Where({$_.HasExited -eq $true}).Count | Should -Be 1
|
|
$Processes.Where({$_.HasExited -eq $false}).Count | Should -Be ($Processes.Count - 1)
|
|
}
|
|
|
|
It "Should passthru all processes when all processes have exited" {
|
|
$PassThruProcesses = Wait-Process -InputObject $Processes -PassThru
|
|
|
|
$PassThruProcesses.Where({$_.HasExited -eq $true}).Count | Should -Be $Processes.Count
|
|
}
|
|
|
|
It "Should passthru all processes when any one process has exited" {
|
|
$PassThruProcesses = Wait-Process -InputObject $Processes -Any -PassThru
|
|
|
|
$PassThruProcesses.Where({$_.HasExited -eq $true}).Count | Should -Be 1
|
|
$PassThruProcesses.Where({$_.HasExited -eq $false}).Count | Should -Be ($Processes.Count - 1)
|
|
}
|
|
}
|