35 lines
956 B
TypeScript
35 lines
956 B
TypeScript
import fs from "node:fs";
|
|
import os from "node:os";
|
|
import path from "node:path";
|
|
|
|
import { describe, expect, it } from "vitest";
|
|
|
|
import { acquireRelayLock, RelayLockError } from "./relay-lock.js";
|
|
|
|
const newLockPath = () =>
|
|
path.join(
|
|
os.tmpdir(),
|
|
`clawdis-relay-lock-test-${process.pid}-${Math.random().toString(16).slice(2)}.sock`,
|
|
);
|
|
|
|
describe("relay-lock", () => {
|
|
it("prevents concurrent relay instances and releases cleanly", async () => {
|
|
const lockPath = newLockPath();
|
|
|
|
const release1 = await acquireRelayLock(lockPath);
|
|
expect(fs.existsSync(lockPath)).toBe(true);
|
|
|
|
await expect(acquireRelayLock(lockPath)).rejects.toBeInstanceOf(
|
|
RelayLockError,
|
|
);
|
|
|
|
await release1();
|
|
expect(fs.existsSync(lockPath)).toBe(false);
|
|
|
|
// After release, lock can be reacquired.
|
|
const release2 = await acquireRelayLock(lockPath);
|
|
await release2();
|
|
expect(fs.existsSync(lockPath)).toBe(false);
|
|
});
|
|
});
|