Files
triggerdotdev--trigger.dev/apps/webapp/test/v3/runOpsMigration/distinctDbSentinel.server.test.ts
T
2026-07-13 13:32:57 +08:00

65 lines
2.2 KiB
TypeScript

import { heteroPostgresTest } from "@internal/testcontainers";
import { PrismaClient } from "@trigger.dev/database";
import { describe, expect, vi } from "vitest";
import { probeDistinctDatabases } from "~/v3/runOpsMigration/distinctDbSentinel.server";
// Spinning up two separate postgres clusters and probing each can exceed the 5s default.
vi.setConfig({ testTimeout: 60_000 });
function urlWithDatabase(uri: string, database: string): string {
const url = new URL(uri);
url.pathname = `/${database}`;
return url.toString();
}
describe("probeDistinctDatabases", () => {
heteroPostgresTest(
"reports distinct for two separate physical clusters",
async ({ uri14, uri17 }) => {
const result = await probeDistinctDatabases(uri14, uri17);
expect(result).toEqual({ distinct: true });
}
);
heteroPostgresTest(
"reports NOT distinct, citing the same physical database, when both URLs point at it",
async ({ uri14 }) => {
const result = await probeDistinctDatabases(uri14, uri14);
expect(result.distinct).toBe(false);
if (result.distinct === false) {
expect(result.reason).toMatch(/same physical database/i);
}
}
);
heteroPostgresTest(
"reports distinct for two databases in the SAME cluster",
async ({ postgresContainer14, uri14 }) => {
const otherDb = `sentinel_other_${Date.now()}`;
const admin = new PrismaClient({
datasources: {
db: { url: urlWithDatabase(postgresContainer14.getConnectionUri(), "postgres") },
},
});
try {
await admin.$executeRawUnsafe(`CREATE DATABASE "${otherDb}"`);
} finally {
await admin.$disconnect();
}
const otherUrl = urlWithDatabase(uri14, otherDb);
const result = await probeDistinctDatabases(uri14, otherUrl);
expect(result).toEqual({ distinct: true });
}
);
heteroPostgresTest(
"fails closed to NOT distinct when a probe cannot reach a database",
async ({ uri14 }) => {
const unreachable = "postgresql://nobody:nobody@127.0.0.1:1/does_not_exist";
const result = await probeDistinctDatabases(uri14, unreachable);
expect(result.distinct).toBe(false);
}
);
});