@clickup/ent-framework
Version:
A PostgreSQL graph-database-alike library with microsharding and row-level security
107 lines (94 loc) • 2.99 kB
text/typescript
import range from "lodash/range";
import { MASTER } from "../../abstract/Shard";
import { mapJoin } from "../../internal/misc";
import { PgClient, type PgClientOptions } from "../PgClient";
import { testCluster } from "./test-utils";
let options: PgClientOptions;
beforeEach(async () => {
options = (await testCluster.globalShard().client(MASTER)).options;
});
test("custom Pool implementation is type safe", async () => {
const master = await testCluster.shardByNo(2).client(MASTER);
expect(master.pool().some()).toEqual("some");
});
test("sub-pools are distinct", async () => {
const master = await testCluster.shardByNo(2).client(MASTER);
const client = new PgClient(master.options);
const defaultPool = client.pool();
const subPoolA = client.pool({ name: "a" });
const subPoolB = client.pool({ name: "b" });
expect(subPoolA).toBe(client.pool({ name: "a", max: 42 }));
expect(subPoolA).not.toBe(subPoolB);
expect(subPoolA).not.toBe(defaultPool);
let conn;
try {
conn = await client.acquireConn({ name: "a" });
expect(subPoolA.totalCount).toEqual(1);
expect(subPoolB.totalCount).toEqual(0);
expect(defaultPool.totalCount).toEqual(0);
} finally {
conn?.release();
}
await client.end();
expect(subPoolA.totalCount).toEqual(0);
});
test("acquireConn does not leak when release() is called", async () => {
await mapJoin(range(1000), async (i) => {
let conn;
try {
const shard = testCluster.shardByNo(2);
const master = await shard.client(MASTER);
conn = await master.acquireConn();
const res = await conn.query("SELECT $1 AS i", [i]);
expect(res.rows[0].i).toEqual(i.toString());
} finally {
// If we comment this out, it will blow up.
conn?.release();
}
});
});
test("static role=master", async () => {
const client = new PgClient({
...options,
role: "master",
maxReplicationLagMs: undefined,
});
await client.query({
query: ["SELECT 1"],
isWrite: true,
annotations: [],
op: "",
table: "",
});
expect(client.options.maxReplicationLagMs).toBeLessThan(10000);
expect(await client.timelineManager.currentPos()).toEqual(BigInt(1));
expect(client.role()).toEqual("master");
});
test("static role=replica", async () => {
const client = new PgClient({
...options,
role: "replica",
maxReplicationLagMs: 20000,
});
await client.query({
query: ["SELECT 1"],
isWrite: false,
annotations: [],
op: "",
table: "",
});
expect(await client.timelineManager.currentPos()).toEqual(BigInt(0));
expect(client.role()).toEqual("replica");
});
test("dynamic role=unknown", async () => {
const client = new PgClient({ ...options, role: "unknown" });
await client.query({
query: ["SELECT 1"],
isWrite: false,
annotations: [],
op: "",
table: "",
});
expect(await client.timelineManager.currentPos()).toBeGreaterThan(BigInt(1));
expect(client.role()).toEqual("master");
});