fix(api): сохранять большие идентификаторы серверов без округления
This commit is contained in:
1 parent
90e6c7be25
commit
d3d8afaa0c
13 files changed
+1086
-19
No files matched your search
@@ -6,10 +6,10 @@ import { initDatabase } from "../db/bootstrap.js"
|
||||
import { buildApp } from "../index.js"
|
||||
|
||||
try {
|
||||
for (const id of ["srv1", "1abc", "", "0", "-1", "1.5", "9007199254740993", "2147483648"]) assert.equal(await getEnabledServerById(id), null)
|
||||
for (const id of ["srv1", "1abc", "", "0", "-1", "1.5", "9007199254740993", "9007199254740992"]) assert.equal(await getEnabledServerById(id), null)
|
||||
const own = process.env.MMAPP_OWN_TEST_DB
|
||||
if (own) {
|
||||
assert(/^mm_accept_152_\d+$/.test(own))
|
||||
assert(/^mm_accept_(152|156)_\d+$/.test(own))
|
||||
assert.equal((await pool.query("SELECT current_database() AS name")).rows[0].name, own)
|
||||
await initDatabase()
|
||||
const id = Number((await pool.query("INSERT INTO servers (name,host,enabled) VALUES ('disabled-network-fixture','127.0.0.1',false) RETURNING id")).rows[0].id)
|
||||
@@ -50,7 +50,13 @@ try {
|
||||
assert.equal(contacts, 0)
|
||||
await pool.query("UPDATE servers SET enabled=true WHERE id=$1", [id])
|
||||
assert.equal((await getEnabledServerById(id))?.id, id)
|
||||
for (const largeId of [2147483648, Number.MAX_SAFE_INTEGER]) {
|
||||
await pool.query("INSERT INTO servers (id,name,host,enabled) VALUES ($1,'large-id-fixture','127.0.0.1',true)", [largeId])
|
||||
assert.equal((await getEnabledServerById(String(largeId)))?.id, largeId)
|
||||
}
|
||||
assert.equal(contacts, 0)
|
||||
console.log("network-disabled-server.test.ts: 33 API/SQL checks for three types, zero RouterOS contacts, enabled positive control passed")
|
||||
console.log("network-disabled-server.test.ts: real bigint IDs above int32 and MAX_SAFE_INTEGER passed without rounding")
|
||||
} finally { MikrotikClient.fromServer = original; await app.close() }
|
||||
} else console.log("network-disabled-server.test.ts: invalid IDs passed; own SQL/disabled API checks skipped (MMAPP_OWN_TEST_DB required)")
|
||||
} finally { await closePool() }
|
||||
@@ -264,7 +264,7 @@ export async function listWireGuardInterfaces(opts?: {
|
||||
let serverRows: ServerRow[]
|
||||
if (opts?.serverId) {
|
||||
const id = parseDbServerId(opts.serverId)
|
||||
if (id === null || !Number.isSafeInteger(id) || id > 2147483647) {
|
||||
if (id === null) {
|
||||
return { interfaces: [], failures: [{ serverId: String(opts.serverId), error: "Некорректный serverId" }] }
|
||||
}
|
||||
const row = (await db.select().from(servers).where(and(eq(servers.id, id), eq(servers.enabled, true))).limit(1))[0]
|
||||
@@ -295,7 +295,7 @@ export async function countWireGuardInterfaces():Promise<number|undefined>{retur
|
||||
|
||||
export async function getEnabledServerById(serverId: string | number) {
|
||||
const id = parseDbServerId(serverId)
|
||||
if (id === null || !Number.isSafeInteger(id) || id > 2147483647) return null
|
||||
if (id === null) return null
|
||||
return (await db.select().from(servers).where(and(eq(servers.id, id), eq(servers.enabled, true))).limit(1))[0] ?? null
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user