fix: dispose races, tunnel guards, retry on stale

This commit is contained in:
smartass committed 2026-06-12 01:48:25 +05:00
1 parent 1fecb1cce4
commit 32143566d4
15 files changed
+412 -61

No files matched your search

+21
View File
@@ -51,6 +51,7 @@ vi.mock('pg', async () => {
})
import type { ConnectionConfig } from '../../../src/config/types.js'
import { DriverDisposedError } from '../../../src/db/driver.js'
import { createPostgresDriver } from '../../../src/db/postgres.js'
const config = (extra: Partial<ConnectionConfig> = {}): ConnectionConfig => ({
@@ -284,4 +285,24 @@ describe('createPostgresDriver', () => {
await driver.dispose()
expect(pgState.state.pools.every((pool) => pool.ended)).toBe(true)
})
it('rejects queries after dispose with DriverDisposedError', async () => {
const driver = createPostgresDriver(target())
await driver.query({ sql: 'select 1', rowLimit: 1 })
await driver.dispose()
await expect(driver.query({ sql: 'select 1', rowLimit: 1 })).rejects.toBeInstanceOf(
DriverDisposedError
)
})
it('dispose racing a query creates no new pool into the cleared map', async () => {
const driver = createPostgresDriver(target())
// Mark disposed first, then a late query must not allocate a fresh pool.
const disposing = driver.dispose()
const racing = driver.query({ sql: 'select 1', database: 'late', rowLimit: 1 })
await disposing
await expect(racing).rejects.toBeInstanceOf(DriverDisposedError)
// No pool was ever created for 'late'.
expect(pgState.state.pools).toHaveLength(0)
})
})