mirror of
https://github.com/stablyai/orca.git
synced 2026-11-15 18:37:24 +00:00
* refactor(relay): group route, forwarding and connection owners * refactor(relay): use explicit defining-owner type imports
42 lines
1.4 KiB
TypeScript
42 lines
1.4 KiB
TypeScript
import { afterAll, beforeAll, describe, expect, it, vi } from 'vitest'
|
|
import pg from 'pg'
|
|
import { openRelayDatabase, type RelayDatabase } from './database.js'
|
|
|
|
const databaseUrl = process.env.ORCA_RELAY_TEST_POSTGRES_URL
|
|
const describePostgres = databaseUrl ? describe : describe.skip
|
|
|
|
describePostgres('PostgreSQL session terminated by the server', () => {
|
|
let database: RelayDatabase
|
|
let admin: pg.Client
|
|
|
|
beforeAll(async () => {
|
|
// One pooled client: the next caller gets the terminated one unless it was destroyed.
|
|
database = await openRelayDatabase({ databaseUrl, dataDir: '', poolMax: 1 })
|
|
admin = new pg.Client({ connectionString: databaseUrl })
|
|
await admin.connect()
|
|
})
|
|
|
|
afterAll(async () => {
|
|
await admin.end()
|
|
await database.close()
|
|
})
|
|
|
|
it('serves the next caller a live session after pg_terminate_backend', async () => {
|
|
vi.spyOn(console, 'warn').mockImplementation(() => undefined)
|
|
try {
|
|
const failure = await database
|
|
.transaction(async (tx) => {
|
|
const [row] = await tx.query('SELECT pg_backend_pid() AS pid')
|
|
await admin.query('SELECT pg_terminate_backend($1)', [row?.pid])
|
|
await tx.query('SELECT 1')
|
|
})
|
|
.catch((error: unknown) => error)
|
|
expect(failure).toBeInstanceOf(Error)
|
|
|
|
await expect(database.query('SELECT 1 AS ok')).resolves.toEqual([{ ok: 1 }])
|
|
} finally {
|
|
vi.restoreAllMocks()
|
|
}
|
|
})
|
|
})
|