fix(ui): сохранять каталог устройств диагностики при отказе
This commit is contained in:
1 parent
6fa8e5bfd1
commit
cba3db1508
7 files changed
+78
-46
No files matched your search
@@ -3,3 +3,6 @@ import assert from "node:assert/strict"
|
||||
import { readProbeOutput } from "./probe-response"
|
||||
test("Диагностика требует подтверждённый string output",()=>{for(const raw of [null,{},[],{output:null},{output:1},{output:"ok",error:"fail"}])assert.throws(()=>readProbeOutput(raw));assert.equal(readProbeOutput({output:""}),"");assert.equal(readProbeOutput({output:"PING"}),"PING")})
|
||||
test("Диагностика отклоняет legacy error и oversized output",()=>{assert.throws(()=>readProbeOutput({output:" error: отказ"}),/отказ/);assert.throws(()=>readProbeOutput({output:"x".repeat(1024*1024+1)}))})
|
||||
|
||||
import { probeServersSchema } from "./probe-response"
|
||||
test("Каталог диагностики требует уникальные id и достоверный status/enabled",()=>{const row={id:1,name:"Тест",host:"192.0.2.1",type:"exit-node",enabled:true,status:null};assert.equal(probeServersSchema.safeParse([row]).success,true);for(const rows of [[row,row],[{...row,id:0}],[{...row,status:"active"}],[{...row,enabled:"yes"}]])assert.equal(probeServersSchema.safeParse(rows).success,false)})
|
||||
@@ -6,3 +6,10 @@ export function readProbeOutput(raw: unknown): string {
|
||||
if (/^error:/i.test(result.data.output.trimStart())) throw new Error(result.data.output.trim())
|
||||
return result.data.output
|
||||
}
|
||||
|
||||
export const probeServersSchema = z.array(z.object({
|
||||
id: z.number().int().positive(), name: z.string(), host: z.string().min(1), enabled: z.boolean(),
|
||||
status: z.enum(["online", "offline", "degraded", "unknown"]).nullable(),
|
||||
site: z.string().optional(), country: z.string().optional(), asn: z.string().optional(),
|
||||
type: z.enum(["jump-host", "exit-node", "home-router"]), latency: z.number().finite().nonnegative().nullable().optional(),
|
||||
})).refine(rows => new Set(rows.map(row => row.id)).size === rows.length, "Повторяющийся идентификатор устройства")
|
||||
Reference in new issue
Block a user