fix(api): отклонять некорректное подтверждение PATCH
This commit is contained in:
1 parent
89bde27f19
commit
cd8613fab6
9 files changed
+191
-11
No files matched your search
@@ -59,3 +59,25 @@ test("RouterOS complete response: success, explicit HTTP rejection and body surv
|
||||
await new Promise<void>((resolve, reject) => server.close(error => error ? reject(error) : resolve()))
|
||||
}
|
||||
})
|
||||
|
||||
test("RouterOS nonempty malformed JSON cannot confirm PATCH; explicit empty success stays valid", async () => {
|
||||
const server = createServer((req, res) => {
|
||||
req.resume()
|
||||
req.on("end", () => {
|
||||
res.writeHead(200, { "content-type": "application/json" })
|
||||
res.end(req.url?.endsWith("/empty") ? "" : "{broken acknowledgement")
|
||||
})
|
||||
})
|
||||
await new Promise<void>(resolve => server.listen(0, "127.0.0.1", resolve))
|
||||
const address = server.address()
|
||||
assert.ok(address && typeof address !== "string")
|
||||
const client = new MikrotikClient({ host: "127.0.0.1", port: address.port, useSsl: false, verifySsl: false, username: "fixture", password: "fixture" })
|
||||
try {
|
||||
for (const method of ["get", "post", "put", "patch"] as const) {
|
||||
await assert.rejects(method === "get" ? client.get("/malformed", 500) : client[method]("/malformed", {}, 500), /JSON|подтверждение/)
|
||||
}
|
||||
assert.deepEqual(await client.patch("/empty", {}, 500), {})
|
||||
} finally {
|
||||
await new Promise<void>((resolve, reject) => server.close(error => error ? reject(error) : resolve()))
|
||||
}
|
||||
})
|
||||
@@ -375,7 +375,9 @@ function rosPatch(
|
||||
resolve({})
|
||||
return
|
||||
}
|
||||
try { resolve(JSON.parse(buf)) } catch { resolve({}) }
|
||||
try { resolve(JSON.parse(buf)) } catch {
|
||||
reject(new Error("Некорректное JSON-подтверждение RouterOS: результат изменения неизвестен"))
|
||||
}
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
Reference in new issue
Block a user