/* oxlint-disable executor/no-promise-reject -- boundary: simulate the Postgres.js driver's rejected promises */ import { describe, expect, it } from "@effect/vitest";import { Effect } from "effect"; import { directDatabaseUrl, waitForDatabaseConnection } from "../../scripts/database-connection"; describe("deployment database connection", () => { it.effect("waits for admission before allowing deployment work", () => Effect.promise(async () => { let remainingFailures = 2; const waits: number[] = []; const logs: string[] = []; const queries: string[] = []; await waitForDatabaseConnection( { unsafe: (query) => { queries.push(query); return remainingFailures-- > 0 ? Promise.reject({ code: "53300", detail: "private connection data" }) : Promise.resolve([]); }, }, { log: (line) => logs.push(line), sleep: async (ms) => { waits.push(ms); }, }, ); expect(queries).toEqual(["SELECT 1", "SELECT 1", "SELECT 1"]); expect(waits).toEqual([10_000, 10_000]); expect(logs).toHaveLength(2); expect(logs.join()).not.toContain("private connection data"); }), ); it.effect("fails after the bounded admission budget", () => Effect.promise(async () => { const failure = { code: "53300" }; let attempts = 0; const waits: number[] = []; await expect( waitForDatabaseConnection( { unsafe: () => { attempts += 1; return Promise.reject(failure); }, }, { log: () => {}, sleep: async (ms) => { waits.push(ms); }, }, ), ).rejects.toBe(failure); expect(attempts).toBe(7); expect(waits).toEqual(Array(6).fill(10_000)); }), ); it.effect("fails immediately for authentication, transport and SQL errors", () => Effect.promise(async () => { for (const code of ["28P01", "CONNECT_TIMEOUT", "CONNECTION_CLOSED", "42601", "40001"]) { const failure = { code }; const waits: number[] = []; await expect( waitForDatabaseConnection( { unsafe: () => Promise.reject(failure) }, { log: () => {}, sleep: async (ms) => { waits.push(ms); }, }, ), ).rejects.toBe(failure); expect(waits).toEqual([]); } }), ); it("keeps PlanetScale deployment traffic on the direct endpoint", () => { const direct = "postgres://example:secret@region.pg.psdb.cloud:5432/database"; expect(directDatabaseUrl(direct)).toBe(direct); expect(directDatabaseUrl("postgres://localhost:25432/postgres")).toContain(":25432"); expect(() => directDatabaseUrl(direct.replace(":5432", ":6432"))).toThrow("direct endpoint"); expect(() => directDatabaseUrl("invalid-secret")).toThrow("valid PostgreSQL URL"); expect(() => directDatabaseUrl("https://localhost/database")).toThrow("protocol"); });});
/* oxlint-disable executor/no-promise-reject -- boundary: simulate the Postgres.js driver's rejected promises */
import { describe, expect, it } from "@effect/vitest";
import { Effect } from "effect";
import { directDatabaseUrl, waitForDatabaseConnection } from "../../scripts/database-connection";
describe("deployment database connection", () => {
it.effect("waits for admission before allowing deployment work", () =>
Effect.promise(async () => {
let remainingFailures = 2;
const waits: number[] = [];
const logs: string[] = [];
const queries: string[] = [];
await waitForDatabaseConnection(
{
unsafe: (query) => {
queries.push(query);
return remainingFailures-- > 0
? Promise.reject({ code: "53300", detail: "private connection data" })
: Promise.resolve([]);
},
},
{
log: (line) => logs.push(line),
sleep: async (ms) => {
waits.push(ms);
},
},
);
expect(queries).toEqual(["SELECT 1", "SELECT 1", "SELECT 1"]);
expect(waits).toEqual([10_000, 10_000]);
expect(logs).toHaveLength(2);
expect(logs.join()).not.toContain("private connection data");
}),
);
it.effect("fails after the bounded admission budget", () =>
Effect.promise(async () => {
const failure = { code: "53300" };
let attempts = 0;
const waits: number[] = [];
await expect(
waitForDatabaseConnection(
{
unsafe: () => {
attempts += 1;
return Promise.reject(failure);
},
},
{
log: () => {},
sleep: async (ms) => {
waits.push(ms);
},
},
),
).rejects.toBe(failure);
expect(attempts).toBe(7);
expect(waits).toEqual(Array(6).fill(10_000));
}),
);
it.effect("fails immediately for authentication, transport and SQL errors", () =>
Effect.promise(async () => {
for (const code of ["28P01", "CONNECT_TIMEOUT", "CONNECTION_CLOSED", "42601", "40001"]) {
const failure = { code };
const waits: number[] = [];
await expect(
waitForDatabaseConnection(
{ unsafe: () => Promise.reject(failure) },
{
log: () => {},
sleep: async (ms) => {
waits.push(ms);
},
},
),
).rejects.toBe(failure);
expect(waits).toEqual([]);
}
}),
);
it("keeps PlanetScale deployment traffic on the direct endpoint", () => {
const direct = "postgres://example:secret@region.pg.psdb.cloud:5432/database";
expect(directDatabaseUrl(direct)).toBe(direct);
expect(directDatabaseUrl("postgres://localhost:25432/postgres")).toContain(":25432");
expect(() => directDatabaseUrl(direct.replace(":5432", ":6432"))).toThrow("direct endpoint");
expect(() => directDatabaseUrl("invalid-secret")).toThrow("valid PostgreSQL URL");
expect(() => directDatabaseUrl("https://localhost/database")).toThrow("protocol");
});
});