Private/CuiTests/Test-CuiAdm003.ps1
|
# Copyright (c) 2026 Jeffrey Snover. All rights reserved. # Licensed under the MIT License. See LICENSE file in the project root. function Test-CuiAdm003 { [CmdletBinding()] param( [Parameter(Mandatory)][string]$BaseUrl, [Parameter()][int]$TimeoutSec = 15, [Parameter()][hashtable]$AuthHeaders = @{} ) Set-StrictMode -Version Latest $Sw = [System.Diagnostics.Stopwatch]::StartNew() $Checks = [System.Collections.Generic.List[PSObject]]::new() $BaseUrl = $BaseUrl.TrimEnd('/') # Check 1: POST /api/admin/errors — submit a test error report $ErrSw = [System.Diagnostics.Stopwatch]::StartNew() $SubmitOk = $false try { $ErrBody = @{ error = 'CUI test error — safe to ignore' context = @{ source = 'cui-test'; timestamp = (Get-Date -Format 'o') } } | ConvertTo-Json -Depth 3 -Compress $ErrResp = Invoke-WebRequest -Uri "$BaseUrl/api/admin/errors" -Method POST ` -Body $ErrBody -ContentType 'application/json' -TimeoutSec $TimeoutSec ` -UseBasicParsing -ErrorAction Stop -Headers $AuthHeaders $SubmitOk = $ErrResp.StatusCode -eq 200 } catch { } $ErrSw.Stop() $Checks.Add((New-CuiCheckResult -Check 'Submit error report' -Pass $SubmitOk ` -Detail $(if ($SubmitOk) { 'Error submitted' } else { 'Submit failed' }) -Ms $ErrSw.ElapsedMilliseconds)) # Check 2: GET /api/admin/health — verify errorCount is present (errors are visible) $hr = Invoke-RemoteCheck -BaseUrl $BaseUrl -Path '/api/admin/health' -TimeoutSec $TimeoutSec $HealthOk = $hr.Success -and ($null -ne $hr.Body) $HasErrorCount = $false if ($HealthOk -and $hr.Body.PSObject.Properties['errorCount']) { $HasErrorCount = $true } $Checks.Add((New-CuiCheckResult -Check 'Admin health shows errors' -Pass ($HealthOk -and $HasErrorCount) ` -Detail $(if ($HasErrorCount) { "errorCount=$($hr.Body.errorCount)" } elseif ($HealthOk) { 'Health loaded but no errorCount (may need admin)' } else { "Failed: $($hr.Error)" }) -Ms $hr.ResponseMs)) $Sw.Stop() New-CuiTestResult -CuiId 'CUI-ADM-003' -Domain 'Admin' -Priority 'P1' ` -DurationMs $Sw.ElapsedMilliseconds -Details $Checks.ToArray() } |