param( [Parameter(Mandatory = $true)] [string]$Name, [Parameter(Mandatory = $true)] [string[]]$HarnessArgs ) $ErrorActionPreference = 'Stop' $Root = Resolve-Path (Join-Path $PSScriptRoot '..\..') $Dumpcap = 'C:\Program Files\Wireshark\dumpcap.exe' $Harness = Join-Path $Root 'src\MxTraceHarness\bin\Release\net481\MxTraceHarness.exe' $CaptureDir = Join-Path $Root "captures\$Name" New-Item -ItemType Directory -Force $CaptureDir | Out-Null $Pcap = Join-Path $CaptureDir 'loopback.pcapng' $Log = Join-Path $CaptureDir 'harness.log' $DumpOut = Join-Path $CaptureDir 'dumpcap.stdout.txt' $DumpErr = Join-Path $CaptureDir 'dumpcap.stderr.txt' if (Test-Path $Pcap) { Remove-Item -LiteralPath $Pcap -Force } if (Test-Path $Log) { Remove-Item -LiteralPath $Log -Force } $FullHarnessArgs = @($HarnessArgs + @("--log=$Log", "--client=MxProtoTraceHarness-$Name")) "harness=$Harness" | Out-File -Encoding UTF8 (Join-Path $CaptureDir 'command.txt') ("args=" + ($FullHarnessArgs -join ' ')) | Out-File -Encoding UTF8 -Append (Join-Path $CaptureDir 'command.txt') $Dump = Start-Process -FilePath $Dumpcap ` -ArgumentList @('-i', '\Device\NPF_Loopback', '-w', $Pcap, '-q') ` -PassThru ` -WindowStyle Hidden ` -RedirectStandardOutput $DumpOut ` -RedirectStandardError $DumpErr Start-Sleep -Seconds 2 try { $Process = Start-Process -FilePath $Harness ` -ArgumentList $FullHarnessArgs ` -Wait ` -PassThru ` -NoNewWindow ` -RedirectStandardOutput (Join-Path $CaptureDir 'stdout.txt') ` -RedirectStandardError (Join-Path $CaptureDir 'stderr.txt') "exit_code=$($Process.ExitCode)" | Out-File -Encoding UTF8 (Join-Path $CaptureDir 'exit.txt') } finally { if (-not $Dump.HasExited) { Stop-Process -Id $Dump.Id -Force -ErrorAction SilentlyContinue } Wait-Process -Id $Dump.Id -Timeout 10 -ErrorAction SilentlyContinue | Out-Null } Get-ChildItem $CaptureDir | Select-Object Name, Length, LastWriteTime