fix(api): отклонять некорректное подтверждение PATCH

This commit is contained in:
Denozordec committed 2026-10-10 03:15:59 +07:00
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()))
}
})
+3 -1
View File
@@ -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: результат изменения неизвестен"))
}
})
})