fix: restore existing WeChat instance and add M6 validation tools
This commit is contained in:
@@ -0,0 +1,37 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string]$Executable,
|
||||
[Parameter(Mandatory=$true)][string]$OutputDirectory,
|
||||
[ValidateSet(8,24,72)][int]$Hours = 72,
|
||||
[ValidateRange(1,3600)][int]$SampleSeconds = 60
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$exe = (Resolve-Path $Executable).Path
|
||||
$directory = [IO.Path]::GetFullPath($OutputDirectory)
|
||||
if (Test-Path $directory) { throw 'Use a new output directory; endurance evidence is never overwritten.' }
|
||||
[IO.Directory]::CreateDirectory($directory) | Out-Null
|
||||
$utf8 = New-Object Text.UTF8Encoding($false)
|
||||
$started = [DateTimeOffset]::UtcNow
|
||||
$info = @{
|
||||
StartedAt=$started.ToString('o')
|
||||
ExpectedFinish=$started.AddHours($Hours).ToString('o')
|
||||
Hours=$Hours
|
||||
SampleSeconds=$SampleSeconds
|
||||
Executable=$exe
|
||||
BinarySha256=(Get-FileHash $exe -Algorithm SHA256).Hash
|
||||
SessionId=[Diagnostics.Process]::GetCurrentProcess().SessionId
|
||||
OperatingSystem=[Environment]::OSVersion.VersionString
|
||||
WritesMessages=$false
|
||||
}
|
||||
[IO.File]::WriteAllText("$directory\run-info.json", ($info | ConvertTo-Json), $utf8)
|
||||
$code = 1
|
||||
try {
|
||||
& $exe endurance --hours $Hours --sample-seconds $SampleSeconds --output "$directory\metrics" |
|
||||
ForEach-Object { [IO.File]::AppendAllText("$directory\console.json", $_ + [Environment]::NewLine, $utf8) }
|
||||
$code = $LASTEXITCODE
|
||||
} catch {
|
||||
[IO.File]::WriteAllText("$directory\launcher-error.txt", $_.Exception.GetType().FullName, $utf8)
|
||||
} finally {
|
||||
[IO.File]::WriteAllText("$directory\exit-code.txt", [string]$code, $utf8)
|
||||
[IO.File]::WriteAllText("$directory\finished-at.txt", [DateTimeOffset]::UtcNow.ToString('o'), $utf8)
|
||||
}
|
||||
exit $code
|
||||
@@ -0,0 +1,39 @@
|
||||
param(
|
||||
[Parameter(Mandatory=$true)][string]$Executable,
|
||||
[Parameter(Mandatory=$true)][string]$OutputDirectory
|
||||
)
|
||||
$ErrorActionPreference = 'Stop'
|
||||
$exe = (Resolve-Path $Executable).Path
|
||||
$directory = [IO.Path]::GetFullPath($OutputDirectory)
|
||||
if (Test-Path $directory) { throw 'Use a new output directory to preserve earlier evidence.' }
|
||||
[IO.Directory]::CreateDirectory($directory) | Out-Null
|
||||
$utf8 = New-Object Text.UTF8Encoding($false)
|
||||
$results = @()
|
||||
$cases = @(
|
||||
@{ Name='recover'; Args=@('recover-ui','--timeout','30') },
|
||||
@{ Name='doctor'; Args=@('doctor','--timeout','30') },
|
||||
@{ Name='inspect'; Args=@('inspect-ui','--output',"$directory\ui-tree.json",'--timeout','30') },
|
||||
@{ Name='smoke'; Args=@('smoke','--output',"$directory\smoke-ui-tree.json",'--timeout','30') },
|
||||
@{ Name='recovery'; Args=@('recovery-smoke','--timeout','60') },
|
||||
@{ Name='listener'; Args=@('listener-smoke','--output',"$directory\listener",'--timeout','60') },
|
||||
@{ Name='stability'; Args=@('stability-smoke','--seconds','30','--sample-seconds','5','--output',"$directory\stability",'--timeout','90') },
|
||||
@{ Name='diagnose'; Args=@('diagnose','--baseline',"$directory\ui-tree.json",'--output',"$directory\diagnostics",'--timeout','60') }
|
||||
)
|
||||
foreach ($case in $cases) {
|
||||
$started = [DateTimeOffset]::UtcNow
|
||||
$arguments = $case.Args
|
||||
$lines = & $exe @arguments
|
||||
$code = $LASTEXITCODE
|
||||
[IO.File]::WriteAllText("$directory\$($case.Name).json", ($lines -join [Environment]::NewLine), $utf8)
|
||||
$results += @{ Name=$case.Name; ExitCode=$code; StartedAt=$started; FinishedAt=[DateTimeOffset]::UtcNow }
|
||||
}
|
||||
$summary = @{
|
||||
BinarySha256=(Get-FileHash $exe -Algorithm SHA256).Hash
|
||||
SessionId=[Diagnostics.Process]::GetCurrentProcess().SessionId
|
||||
OperatingSystem=[Environment]::OSVersion.VersionString
|
||||
Results=$results
|
||||
Passed=(@($results | Where-Object { $_.ExitCode -ne 0 }).Count -eq 0)
|
||||
}
|
||||
[IO.File]::WriteAllText("$directory\validation-summary.json", ($summary | ConvertTo-Json -Depth 8), $utf8)
|
||||
if (!$summary.Passed) { exit 2 }
|
||||
exit 0
|
||||
Reference in New Issue
Block a user