Files
Blockline/tests/Run-Dedicated.ps1
T

37 lines
2.4 KiB
PowerShell
Raw Normal View History

2026-09-12 11:01:37 +02:00
param([string]$ServerDirectory = (Split-Path -Parent $PSScriptRoot))
$ErrorActionPreference = 'Stop'
$projectRoot = Split-Path -Parent $PSScriptRoot
Set-Location -LiteralPath $projectRoot
$engine = Join-Path $projectRoot 'tools/godot/Godot_v4.5-stable_win64_console.exe'
& $engine --headless --path . --log-file ./tests/dedicated.log --script tests/dedicated.gd
if ($LASTEXITCODE -ne 0) { throw 'Dedicated-Integration fehlgeschlagen.' }
$serverExe = Join-Path $ServerDirectory 'Start-Server.exe'
$server = $null
$clients = @()
try {
$server = Start-Process -FilePath $serverExe -WorkingDirectory $ServerDirectory -ArgumentList '--port=27988 --bots=8 --discovery=false --run-for=32' -WindowStyle Hidden -PassThru -RedirectStandardOutput tests/dedicated-server.log -RedirectStandardError tests/dedicated-server-error.log
$deadline = [DateTime]::UtcNow.AddSeconds(180)
do {
Start-Sleep -Milliseconds 200
if ($server.HasExited) { throw 'Server wurde vorzeitig beendet. Siehe tests/dedicated-server*.log.' }
$ready = Select-String -Path tests/dedicated-server.log -Pattern 'SERVER READY' -Quiet
} until ($ready -or [DateTime]::UtcNow -gt $deadline)
if (-not $ready) { throw 'Server wurde nicht bereit.' }
foreach ($index in 1..8) {
$clients += Start-Process -FilePath $engine -ArgumentList "--headless --path . --log-file ./tests/dedicated-client-$index.log --script tests/dedicated_client.gd" -WindowStyle Hidden -PassThru
}
foreach ($client in $clients) {
if (-not $client.WaitForExit(30000)) { throw 'Dedicated-Client Timeout.' }
if ($client.ExitCode -ne 0) { throw 'Dedicated-Client fehlgeschlagen.' }
}
if (-not $server.WaitForExit(45000)) { throw 'Dedicated-Server Timeout.' }
if ($server.ExitCode -ne 0) { throw 'Dedicated-Server fehlgeschlagen.' }
if (Get-ChildItem tests -Filter 'dedicated*.log' | Select-String -Pattern 'SCRIPT ERROR|FAIL |SERVER START ERROR') { throw 'Dedicated-Protokolle enthalten Fehler.' }
Get-ChildItem tests -Filter 'dedicated-client-*.log' | Select-String 'DEDICATED CLIENT'
Get-Content tests/dedicated-server.log | Select-String 'SERVER READY|SERVER STATUS|SERVER STOP'
Write-Output 'Dedicated EXE mit acht echten Clients erfolgreich getestet.'
} finally {
foreach ($client in $clients) { if (-not $client.HasExited) { $client.Kill() } }
if ($server -and -not $server.HasExited) { $server.Kill() }
}