fix: dispose races, tunnel guards, retry on stale

This commit is contained in:
smartass
2026-06-12 01:48:25 +05:00
parent 1fecb1cce4
commit 32143566d4
15 changed files with 412 additions and 61 deletions
+19
View File
@@ -84,6 +84,7 @@ vi.mock('mysql2/promise', () => ({
}))
import type { ConnectionConfig } from '../../../src/config/types.js'
import { DriverDisposedError } from '../../../src/db/driver.js'
import { createMysqlDriver } from '../../../src/db/mysql.js'
const config = (extra: Partial<ConnectionConfig> = {}): ConnectionConfig => ({
@@ -314,4 +315,22 @@ describe('createMysqlDriver', () => {
await driver.dispose()
expect(mysqlState.state.pools.every((pool) => pool.ended)).toBe(true)
})
it('rejects queries after dispose with DriverDisposedError', async () => {
const driver = createMysqlDriver(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 = createMysqlDriver(target())
const disposing = driver.dispose()
const racing = driver.query({ sql: 'select 1', database: 'late', rowLimit: 1 })
await disposing
await expect(racing).rejects.toBeInstanceOf(DriverDisposedError)
expect(mysqlState.state.pools).toHaveLength(0)
})
})