93 lines · 3.1 KB · TypeScript
RawDownload
/* 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");  });});