30 lines
1.4 KiB
PowerShell
30 lines
1.4 KiB
PowerShell
param([Parameter(Mandatory=$true)][string]$Executable)
|
|
$ErrorActionPreference='Stop'
|
|
function Command([string]$Argument) {
|
|
$commandProcess=Start-Process -FilePath $Executable -ArgumentList $Argument -WindowStyle Hidden -PassThru
|
|
try {
|
|
$null=$commandProcess.Handle
|
|
$commandProcess.WaitForExit()
|
|
return $commandProcess.ExitCode
|
|
} finally { $commandProcess.Dispose() }
|
|
}
|
|
if ((Command '--status') -ne 3) { throw 'An isolated StayHere test instance is already running' }
|
|
$process=Start-Process -FilePath $Executable -WindowStyle Hidden -PassThru
|
|
$null=$process.Handle
|
|
try {
|
|
$ready=$false
|
|
for($i=0;$i -lt 20;$i++) {
|
|
if((Command '--status') -eq 1){$ready=$true;break}
|
|
Start-Sleep -Milliseconds 50
|
|
}
|
|
if(!$ready){throw 'StayHere did not start enabled'}
|
|
if((Command '--pause') -ne 0 -or (Command '--status') -ne 2){throw 'StayHere pause failed'}
|
|
if((Command '--resume') -ne 0 -or (Command '--status') -ne 1){throw 'StayHere resume failed'}
|
|
if((Command '--exit') -ne 0 -or !$process.WaitForExit(3000)){throw 'StayHere exit failed'}
|
|
if((Command '--status') -ne 3){throw 'StayHere instance remained after exit'}
|
|
Write-Output 'Passed isolated StayHere start/status/pause/resume/exit checks'
|
|
} finally {
|
|
if(!$process.HasExited){$null=Command '--exit';if(!$process.WaitForExit(3000)){$process.Kill()}}
|
|
$process.Dispose()
|
|
}
|