fix: dispose races, tunnel guards, retry on stale
This commit is contained in:
1 parent
1fecb1cce4
commit
32143566d4
15 files changed
+412
-61
No files matched your search
@@ -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)
|
||||
})
|
||||
})
|
||||
Reference in new issue
Block a user