starlog/scripts/test-local.ps1
2026-03-19 16:37:57 +08:00

75 lines
1.9 KiB
PowerShell

param(
[switch]$SkipRace,
[switch]$SkipFuzz
)
$ErrorActionPreference = "Stop"
if (Get-Variable -Name PSNativeCommandUseErrorActionPreference -ErrorAction SilentlyContinue) {
$PSNativeCommandUseErrorActionPreference = $false
}
function Invoke-Go {
param(
[string[]]$GoArgs,
[switch]$CaptureOutput
)
if ($CaptureOutput) {
$output = & go @GoArgs 2>&1
return @{
Code = $LASTEXITCODE
Output = $output
}
}
& go @GoArgs
if ($LASTEXITCODE -ne 0) {
throw "go $(($GoArgs) -join ' ') failed with exit code $LASTEXITCODE"
}
}
function Run-Step {
param(
[string]$Name,
[scriptblock]$Script
)
Write-Host "==> $Name"
& $Script
Write-Host "OK: $Name"
}
Run-Step "Unit Tests" {
Invoke-Go -GoArgs @("test", "./...")
}
if (-not $SkipRace) {
Write-Host "==> Race Precheck"
$raceResult = Invoke-Go -GoArgs @("test", "-race", "fmt") -CaptureOutput
if ($raceResult.Code -ne 0) {
$raceText = ($raceResult.Output | Out-String)
if ($raceText -match "runtime/race: package testmain: cannot find package") {
Write-Warning "Race environment issue detected: runtime/race cannot build testmain."
Write-Warning "Skip race on this machine. CI race-linux job remains the source of truth."
} else {
Write-Output $raceText
throw "Race precheck failed."
}
} else {
Run-Step "Race Tests" {
Invoke-Go -GoArgs @("test", "-race", "./...")
}
}
}
Run-Step "Benchmark Smoke" {
Invoke-Go -GoArgs @("test", ".", "-run", "^$", "-bench", "Benchmark", "-benchmem", "-benchtime=100x")
}
if (-not $SkipFuzz) {
Run-Step "Fuzz Smoke (Text/JSON)" {
Invoke-Go -GoArgs @("test", ".", "-run", "^$", "-fuzz=FuzzTextAndJSONFormatter", "-fuzztime=2s")
}
Run-Step "Fuzz Smoke (Keyword)" {
Invoke-Go -GoArgs @("test", ".", "-run", "^$", "-fuzz=FuzzKeywordHighlight", "-fuzztime=2s")
}
}
Write-Host "All selected checks completed."