fix(api): изолировать ошибки создания клиента устройства
This commit is contained in:
1 parent
c7b4981dff
commit
f99612f6aa
7 files changed
+55
-3
No files matched your search
@@ -22,3 +22,5 @@ assert.equal(partial.servers[0].certificates.length,1);assert.equal(partial.serv
|
||||
for(const value of [{...partial,servers:[partial.servers[0],partial.servers[0]]},{...partial,servers:[{...partial.servers[0],serverId:"2"}]},{...partial,servers:[{...partial.servers[0],error:"failure"}]}])assert.equal(certificatesStateSchema.safeParse(value).success,false)
|
||||
assert.equal(certificateObservedSchema.safeParse({...good,validUntil:null}).success,false)
|
||||
console.log("Certificate observed: unknown/date timezone/invalid calendar, flags, key size, known empty, malformed/duplicate/context, partial devices; no DB/RouterOS")
|
||||
|
||||
const setupFailure=await collectCertificatesState([server,{id:2,name:"bad client"}],srv=>{if(srv.id===2)throw new Error("client setup refused");return async()=>[raw]});assert.equal(setupFailure.servers[0].certificates.length,1);assert.equal(setupFailure.servers[1].error,"client setup refused")
|
||||
@@ -36,6 +36,6 @@ export async function readCertificateServerState(server:ServerContext,read:()=>P
|
||||
}
|
||||
}
|
||||
export async function collectCertificatesState<T extends ServerContext>(servers:T[],makeReader:(server:T)=>()=>Promise<unknown>):Promise<CertificatesState>{
|
||||
const states=await Promise.all(servers.map(server=>readCertificateServerState(server,makeReader(server))))
|
||||
const states=await Promise.all(servers.map(server=>readCertificateServerState(server,()=>makeReader(server)())))
|
||||
return certificatesStateSchema.parse({collectedAt:new Date().toISOString(),servers:states})
|
||||
}
|
||||
@@ -35,3 +35,6 @@ console.log("Containers state: independent devices, malformed/duplicate IDs, unk
|
||||
|
||||
const limitOnly=await readContainerServerState(server,async path=>path==="/container"?[{".id":"*C","memory-high":"52428800"}]:[]);assert.equal(limitOnly.containers[0].memMb,undefined)
|
||||
const modern=await readContainerServerState(server,async path=>path==="/container"?[{...row,envlist:"e,e2",mounts:undefined,mountlists:"m"}]:path==="/container/envs"?[{list:"e",key:"A",value:"1"},{list:"e2",key:"B",value:"2"}]:[{list:"m",src:"/disk",dst:"/data"}]);assert.equal(modern.containers[0].envs.length,2);assert.equal(modern.containers[0].mounts.length,1)
|
||||
|
||||
let factories=0
|
||||
const setupFailure=await collectContainersState([server,{...server,id:2}],srv=>{if(srv.id===2)throw new Error("client setup refused");factories++;return read});assert.equal(setupFailure.servers[0].containers.length,1);assert.equal(setupFailure.servers[1].availability,"error");assert.equal(setupFailure.servers[1].failures[0].error,"client setup refused");assert.equal(factories,1)
|
||||
@@ -53,6 +53,9 @@ export async function readContainerServerState(server: ServerRow, read: Reader):
|
||||
return containerServerStateSchema.parse({ serverId: server.id, collectedAt, availability: "available", containers, failures })
|
||||
}
|
||||
export async function collectContainersState(servers: ServerRow[], makeReader: (server: ServerRow) => Reader): Promise<ContainersState> {
|
||||
const states = await Promise.all(servers.map(server => readContainerServerState(server, makeReader(server))))
|
||||
const states = await Promise.all(servers.map(server => {
|
||||
let reader: Reader | undefined
|
||||
return readContainerServerState(server, path => { reader ??= makeReader(server); return reader(path) })
|
||||
}))
|
||||
return containersStateSchema.parse({ collectedAt: new Date().toISOString(), servers: states })
|
||||
}
|
||||
Reference in new issue
Block a user