diff --git a/src/js/internal/sql/shared.ts b/src/js/internal/sql/shared.ts index 94e82acef85..192c6ed892e 100644 --- a/src/js/internal/sql/shared.ts +++ b/src/js/internal/sql/shared.ts @@ -908,6 +908,10 @@ abstract class BaseSQLAdapter { + const { port, server, sockets } = await neverAnsweringServer(); + let passwordCalls = 0; + const errors: unknown[] = []; + const sql = new SQL({ + adapter: "postgres", + hostname: "127.0.0.1", + port, + username: "u", + database: "d", + max: 2, + connectionTimeout: 0, + password: () => { + passwordCalls++; + try { + sql.flush(); + } catch (e) { + errors.push(e); + } + try { + sql.connect().catch(() => {}); + } catch (e) { + errors.push(e); + } + return ""; + }, + }); + try { + sql.connect().catch(() => {}); + // the pool-start fill loop runs synchronously inside connect(), invoking + // password() once per pool slot + expect(passwordCalls).toBe(2); + expect(errors).toEqual([]); + } finally { + // force an immediate close even with waiters queued + await sql.close({ timeout: "0" }); + for (const socket of sockets) socket.destroy(); + server.close(); + } +});