chore(tests): проверить backend на PostgreSQL и убрать ожидание idle пула

This commit is contained in:
Denozordec committed 2026-10-12 11:48:44 +07:00
1 parent fdddc52019
commit 7ad66f178b
15 files changed
+1249 -17

No files matched your search

+1
View File
@@ -19,6 +19,7 @@ export function createPool(max = 16): pg.Pool {
connectionString: env.DATABASE_URL,
max,
idleTimeoutMillis: 30_000,
allowExitOnIdle: process.env.NODE_ENV === "test",
connectionTimeoutMillis: 8_000,
statement_timeout: 120_000,
})
+17
View File
@@ -0,0 +1,17 @@
import assert from "node:assert/strict"
import { createPool } from "./index.js"
const original = process.env.NODE_ENV
try {
for (const mode of ["production", "development", "test"]) {
process.env.NODE_ENV = mode
const pool = createPool(1)
assert.equal(pool.options.allowExitOnIdle, mode === "test")
assert.equal(pool.options.idleTimeoutMillis, 30_000)
assert.equal(pool.options.max, 1)
await pool.end()
}
} finally {
if (original === undefined) delete process.env.NODE_ENV
else process.env.NODE_ENV = original
}
console.log("PG pool: tests may exit on idle; production/development retain normal pool lifecycle, no SQL connection")
@@ -0,0 +1,47 @@
import assert from "node:assert/strict"
import { pool, closePool } from "../db/index.js"
import { initDatabase } from "../db/bootstrap.js"
import { readGreBgpRunSnapshots } from "./gre-bgp-snapshot-history.js"
import { buildSignalSnapshotFromCollectors } from "./alert-engine/signals-from-collectors.js"
import { SCHEDULER_RUN_SNAPSHOT_VERSION } from "../types/scheduler-run-snapshot.js"
const name = process.env.MMAPP_OWN_SQL_DB
if (!name) console.log("GRE/BGP SQL: skipped; explicit owned database required")
else {
assert(/^mm_accept_166_\d+$/.test(name))
assert.equal(decodeURIComponent(new URL(process.env.DATABASE_URL!).pathname.slice(1)), name)
assert.equal((await pool.query("SELECT current_database() AS name")).rows[0].name, name)
const prefix = "own-history166-" + Date.now() + "-"
let sequence = 0
const start = Date.now() - 60_000
const old = { v: SCHEDULER_RUN_SNAPSHOT_VERSION, job: "gre_bgp", sampledAt: new Date(start).toISOString(), greWritten: 1, bgpWritten: 1, greTunnels: [{ targetLabel: "old-gre", status: "down" }], bgpPeers: [{ key: "old-peer", state: "Idle" }] }
async function insert(status: "ok" | "error", payload: unknown) {
const id = prefix + sequence++, time = new Date(start + sequence * 1000).toISOString()
await pool.query("INSERT INTO scheduler_runs(id,job_key,started_at,finished_at,status,error,result_json) VALUES($1,'gre_bgp',$2,$2,$3,$4,$5::jsonb)", [id, time, status, status === "error" ? "owned failure" : null, payload === null ? null : JSON.stringify(payload)])
}
try {
await initDatabase()
await insert("ok", old)
await insert("error", { ...old, greWritten: 0, greTunnels: [], bgpPeers: [{ key: "current-peer", state: "Established" }], errors: ["GRE: owned refusal"] })
assert.deepEqual((await readGreBgpRunSnapshots())[0].bgpPeers, [{ key: "current-peer", state: "Established" }])
let signals = await buildSignalSnapshotFromCollectors()
assert.deepEqual(signals.bgpSessions, [{ key: "current-peer", state: "Established", prevState: null }]); assert.deepEqual(signals.greTunnels, [])
for (const payload of [null, "{bad"]) {
await insert("error", payload)
assert((await readGreBgpRunSnapshots())[0].fatalError)
signals = await buildSignalSnapshotFromCollectors()
assert.deepEqual(signals.bgpSessions, []); assert.deepEqual(signals.greTunnels, [])
}
await insert("ok", { ...old, greTunnels: [], bgpPeers: [] })
signals = await buildSignalSnapshotFromCollectors()
assert.deepEqual(signals.bgpSessions, []); assert.deepEqual(signals.greTunnels, [])
await insert("ok", { ...old, greTunnels: [{ targetLabel: "duplicate", status: "up" }, { targetLabel: "duplicate", status: "down" }], bgpPeers: [{ key: "duplicate", state: "Established" }, { key: "duplicate", state: "Idle" }] })
signals = await buildSignalSnapshotFromCollectors()
assert.deepEqual(signals.bgpSessions, [{ key: "duplicate", state: "Unknown", prevState: null }]); assert.deepEqual(signals.greTunnels, [])
console.log("GRE/BGP owned SQL: 6 real rows; newest error/partial, NULL/malformed barrier, empty/deleted and duplicate guards passed")
} finally {
await pool.query("DELETE FROM scheduler_runs WHERE id LIKE $1", [prefix + "%"])
assert.equal((await pool.query("SELECT count(*)::int AS n FROM scheduler_runs WHERE id LIKE $1", [prefix + "%"])).rows[0].n, 0)
await closePool()
}
}