fix: dispose races, tunnel guards, retry on stale
This commit is contained in:
@@ -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)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user