agent-comms 8.15.20 → 8.15.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/marketplace.json +1 -1
- package/.claude-plugin/plugin.json +1 -1
- package/dist/bridges/user/web/test/orpc-router.integration.test.js +2 -3
- package/dist/bridges/user/web/test/orpc-router.integration.test.js.map +1 -1
- package/dist/bridges/user/web/test/web-assets.unit.test.js +2 -2
- package/dist/bridges/user/web/test/web-assets.unit.test.js.map +1 -1
- package/dist/bridges/user/web/test/web-console-route.integration.test.js +2 -2
- package/dist/bridges/user/web/test/web-console-route.integration.test.js.map +1 -1
- package/dist/bridges/user/web/test/web-console-static.unit.test.js +3 -3
- package/dist/bridges/user/web/test/web-console-static.unit.test.js.map +1 -1
- package/dist/test/account-join.integration.test.js +2 -3
- package/dist/test/account-join.integration.test.js.map +1 -1
- package/dist/test/account-ledger-helpers.d.ts.map +1 -1
- package/dist/test/account-ledger-helpers.js +2 -2
- package/dist/test/account-ledger-helpers.js.map +1 -1
- package/dist/test/account-ledger-lock.integration.test.js +2 -2
- package/dist/test/account-ledger-lock.integration.test.js.map +1 -1
- package/dist/test/account-ledger.unit.test.js +3 -3
- package/dist/test/account-ledger.unit.test.js.map +1 -1
- package/dist/test/account-transfer.unit.test.js +2 -2
- package/dist/test/account-transfer.unit.test.js.map +1 -1
- package/dist/test/bridge-mesh-data-directory.integration.test.js +2 -2
- package/dist/test/bridge-mesh-data-directory.integration.test.js.map +1 -1
- package/dist/test/bridge-mesh-version-drift.integration.test.js +2 -4
- package/dist/test/bridge-mesh-version-drift.integration.test.js.map +1 -1
- package/dist/test/bridge-mesh.integration.test.js +2 -4
- package/dist/test/bridge-mesh.integration.test.js.map +1 -1
- package/dist/test/connection-code-ledger-persistence.unit.test.js +2 -2
- package/dist/test/connection-code-ledger-persistence.unit.test.js.map +1 -1
- package/dist/test/connection-code.unit.test.js +2 -4
- package/dist/test/connection-code.unit.test.js.map +1 -1
- package/dist/test/device-membership.unit.test.js +2 -4
- package/dist/test/device-membership.unit.test.js.map +1 -1
- package/dist/test/dm-grant-tool.integration.test.js +2 -3
- package/dist/test/dm-grant-tool.integration.test.js.map +1 -1
- package/dist/test/dm-send-capability-admission.integration.test.js +2 -4
- package/dist/test/dm-send-capability-admission.integration.test.js.map +1 -1
- package/dist/test/dm-send-delegation.unit.test.js +2 -4
- package/dist/test/dm-send-delegation.unit.test.js.map +1 -1
- package/dist/test/dm-send-principal-delegation.integration.test.js +2 -4
- package/dist/test/dm-send-principal-delegation.integration.test.js.map +1 -1
- package/dist/test/filestore.unit.test.js +2 -2
- package/dist/test/filestore.unit.test.js.map +1 -1
- package/dist/test/front-real-bridge-identity-overlap.integration.test.js +2 -4
- package/dist/test/front-real-bridge-identity-overlap.integration.test.js.map +1 -1
- package/dist/test/gateway-trust-recheck.unit.test.js +2 -4
- package/dist/test/gateway-trust-recheck.unit.test.js.map +1 -1
- package/dist/test/gateway-trust.unit.test.js +2 -4
- package/dist/test/gateway-trust.unit.test.js.map +1 -1
- package/dist/test/identity-restart.integration.test.js +4 -6
- package/dist/test/identity-restart.integration.test.js.map +1 -1
- package/dist/test/identity-store-race.integration.test.js +2 -3
- package/dist/test/identity-store-race.integration.test.js.map +1 -1
- package/dist/test/identity-store-wait.unit.test.js +2 -2
- package/dist/test/identity-store-wait.unit.test.js.map +1 -1
- package/dist/test/identity-store.integration.test.js +2 -2
- package/dist/test/identity-store.integration.test.js.map +1 -1
- package/dist/test/machine-identity.unit.test.js +2 -2
- package/dist/test/machine-identity.unit.test.js.map +1 -1
- package/dist/test/machine-membership-trust.integration.test.js +2 -3
- package/dist/test/machine-membership-trust.integration.test.js.map +1 -1
- package/dist/test/mcp-stdout-channel.integration.test.js +2 -2
- package/dist/test/mcp-stdout-channel.integration.test.js.map +1 -1
- package/dist/test/membership-proof.unit.test.js +5 -7
- package/dist/test/membership-proof.unit.test.js.map +1 -1
- package/dist/test/mesh-graph-trace-tool.e2e.test.js +2 -7
- package/dist/test/mesh-graph-trace-tool.e2e.test.js.map +1 -1
- package/dist/test/mesh-smoke.runner.js +4 -0
- package/dist/test/mesh-smoke.runner.js.map +1 -1
- package/dist/test/mesh-store-durable-send.integration.test.js +2 -3
- package/dist/test/mesh-store-durable-send.integration.test.js.map +1 -1
- package/dist/test/naming.integration.test.js +2 -3
- package/dist/test/naming.integration.test.js.map +1 -1
- package/dist/test/petnames.unit.test.js +2 -2
- package/dist/test/petnames.unit.test.js.map +1 -1
- package/dist/test/principal-membership-trust.integration.test.js +2 -3
- package/dist/test/principal-membership-trust.integration.test.js.map +1 -1
- package/dist/test/room-join-admission.integration.test.js +3 -5
- package/dist/test/room-join-admission.integration.test.js.map +1 -1
- package/dist/test/room-lifecycle-bare-name.unit.test.js +2 -4
- package/dist/test/room-lifecycle-bare-name.unit.test.js.map +1 -1
- package/dist/test/room-lifecycle-membership.unit.test.js +2 -4
- package/dist/test/room-lifecycle-membership.unit.test.js.map +1 -1
- package/dist/test/room-lifecycle-remote.unit.test.js +2 -4
- package/dist/test/room-lifecycle-remote.unit.test.js.map +1 -1
- package/dist/test/room-lifecycle.unit.test.js +2 -4
- package/dist/test/room-lifecycle.unit.test.js.map +1 -1
- package/dist/test/room-messaging-durable-send.unit.test.js +2 -4
- package/dist/test/room-messaging-durable-send.unit.test.js.map +1 -1
- package/dist/test/room-protocol-notify.unit.test.js +2 -4
- package/dist/test/room-protocol-notify.unit.test.js.map +1 -1
- package/dist/test/room-protocol.helper.d.ts.map +1 -1
- package/dist/test/room-protocol.helper.js +2 -4
- package/dist/test/room-protocol.helper.js.map +1 -1
- package/dist/test/room-send-retry.integration.test.js +4 -6
- package/dist/test/room-send-retry.integration.test.js.map +1 -1
- package/dist/test/room-token-store.unit.test.js +2 -4
- package/dist/test/room-token-store.unit.test.js.map +1 -1
- package/dist/test/scratch-directory.helper.d.ts +18 -0
- package/dist/test/scratch-directory.helper.d.ts.map +1 -0
- package/dist/test/scratch-directory.helper.js +35 -0
- package/dist/test/scratch-directory.helper.js.map +1 -0
- package/dist/test/scratch-directory.setup.d.ts +2 -0
- package/dist/test/scratch-directory.setup.d.ts.map +1 -0
- package/dist/test/scratch-directory.setup.js +7 -0
- package/dist/test/scratch-directory.setup.js.map +1 -0
- package/dist/test/scratch-directory.unit.test.d.ts +2 -0
- package/dist/test/scratch-directory.unit.test.d.ts.map +1 -0
- package/dist/test/scratch-directory.unit.test.js +78 -0
- package/dist/test/scratch-directory.unit.test.js.map +1 -0
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +4 -6
- package/dist/test/test-transport.js.map +1 -1
- package/dist/test/user-identity.unit.test.js +2 -2
- package/dist/test/user-identity.unit.test.js.map +1 -1
- package/dist/test/user-principal-mints-device-grant.unit.test.js +2 -4
- package/dist/test/user-principal-mints-device-grant.unit.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-messaging-durable-send.unit.test.js","sourceRoot":"","sources":["../../src/test/room-messaging-durable-send.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"room-messaging-durable-send.unit.test.js","sourceRoot":"","sources":["../../src/test/room-messaging-durable-send.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
* Direct, DI-based unit tests for RoomProtocol's handleRoomNotify (P3.8's directed-delivery replacement for informational events, agent-comms#48) -- moved into its own file to stay under the repo's max-lines cap once room-protocol.test.ts and room-protocol-admission.test.ts were already at capacity. Real identities and real minted tokens throughout, matching those two files' own established convention (handleRoomNotify genuinely verifies tokens cryptographically, so an opaque placeholder string fails the mint/verify outright).
|
|
3
3
|
*/
|
|
4
4
|
import { beforeEach, describe, expect, it, vi } from "vitest";
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
|
-
import * as path from "node:path";
|
|
7
|
-
import { tmpdir } from "node:os";
|
|
8
5
|
import { bytesToHex, deviceIdFromHex } from "wire-mesh-core/domain/device-id";
|
|
9
6
|
import { mintCapabilityToken } from "wire-mesh-core/domain/tokens";
|
|
10
7
|
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
@@ -15,6 +12,7 @@ import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
|
15
12
|
import { ownerNamedRoomPath } from "../core/room-path.js";
|
|
16
13
|
import { RoomProtocol } from "../core/room-protocol.js";
|
|
17
14
|
import { randomId } from "../core/random-id.js";
|
|
15
|
+
import { scratchDirectory } from "./scratch-directory.helper.js";
|
|
18
16
|
/** Far longer than any test runs, so a pending join is never expired unless a test says so. */
|
|
19
17
|
const JOIN_DECISION_TIMEOUT_MS = 600_000;
|
|
20
18
|
const TOKEN_TTL_MS = 60_000;
|
|
@@ -63,7 +61,7 @@ async function mintRoomToken(issuerPort, bearerHex, roomPath) {
|
|
|
63
61
|
}
|
|
64
62
|
async function makeHarness() {
|
|
65
63
|
const ids = await makeIdentities();
|
|
66
|
-
const slotDir =
|
|
64
|
+
const slotDir = scratchDirectory("room-protocol-notify-test-");
|
|
67
65
|
const slot = { harness: "test", cwd: "room-protocol-notify", dir: slotDir };
|
|
68
66
|
loadOrCreateIdentity(slot);
|
|
69
67
|
const queueDelivery = vi.fn();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-protocol-notify.unit.test.js","sourceRoot":"","sources":["../../src/test/room-protocol-notify.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9D,OAAO,
|
|
1
|
+
{"version":3,"file":"room-protocol-notify.unit.test.js","sourceRoot":"","sources":["../../src/test/room-protocol-notify.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-protocol.helper.d.ts","sourceRoot":"","sources":["../../src/test/room-protocol.helper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"room-protocol.helper.d.ts","sourceRoot":"","sources":["../../src/test/room-protocol.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,9 +2,6 @@
|
|
|
2
2
|
* The shared DI harness every RoomProtocol unit-test file builds against: real identities and real minted tokens (token verification here is genuinely cryptographic, unlike room-messaging.ts's sending side, which never inspects a token's own structure), a fake transport whose sendRoomRequest each test drives, and a fake delivery engine whose calls each test asserts on. Extracted so the three RoomProtocol test files share one harness rather than each carrying its own copy of it.
|
|
3
3
|
*/
|
|
4
4
|
import { vi } from "vitest";
|
|
5
|
-
import * as fs from "node:fs";
|
|
6
|
-
import * as path from "node:path";
|
|
7
|
-
import { tmpdir } from "node:os";
|
|
8
5
|
import { bytesToHex, deviceIdFromHex } from "wire-mesh-core/domain/device-id";
|
|
9
6
|
import { mintCapabilityToken } from "wire-mesh-core/domain/tokens";
|
|
10
7
|
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
@@ -14,6 +11,7 @@ import { loadOrCreateIdentity } from "../core/identity-store.js";
|
|
|
14
11
|
import { toIdentityPort } from "../core/wire-mesh-identity.js";
|
|
15
12
|
import { RoomProtocol } from "../core/room-protocol.js";
|
|
16
13
|
import { randomId } from "../core/random-id.js";
|
|
14
|
+
import { scratchDirectory } from "./scratch-directory.helper.js";
|
|
17
15
|
/** Far longer than any test runs, so a pending join is never expired unless a test says so. */
|
|
18
16
|
export const JOIN_DECISION_TIMEOUT_MS = 600_000;
|
|
19
17
|
export const TOKEN_TTL_MS = 60_000;
|
|
@@ -90,7 +88,7 @@ export async function makeHarness() {
|
|
|
90
88
|
const systemClock = createSystemClock();
|
|
91
89
|
let clockOffsetMs = 0;
|
|
92
90
|
const clock = { now: () => systemClock.now() + clockOffsetMs };
|
|
93
|
-
const slotDir =
|
|
91
|
+
const slotDir = scratchDirectory("room-protocol-test-");
|
|
94
92
|
const slot = { harness: "test", cwd: "room-protocol", dir: slotDir };
|
|
95
93
|
// saveRoomToken/saveIssuedRoomGrant write into this slot's own persisted identity file, which must already exist on disk -- unrelated to which crypto identity requireIdentity() uses for minting/verifying, purely a filesystem bookkeeping precondition.
|
|
96
94
|
loadOrCreateIdentity(slot);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-protocol.helper.js","sourceRoot":"","sources":["../../src/test/room-protocol.helper.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"room-protocol.helper.js","sourceRoot":"","sources":["../../src/test/room-protocol.helper.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Integration test for issue #28's own acceptance behaviour, re-verified against P3.5's directed fan-out: a room message sent while its recipient is offline must still reach the recipient once it reconnects. Unlike the legacy full-state-sync this replaces, a directed room.send to a disconnected member fails immediately rather than eventually converging, so the fan-out queues it for retry (pendingRoomSends) and flushes that queue the moment the member's connection is (re)established (handlePeerConnected). Replaces downtime-replay.integration.test.ts, whose own scenario relied on deliveryQueues/applyStateSync -- machinery this fan-out no longer uses for message delivery.
|
|
3
3
|
*/
|
|
4
|
-
import * as fs from "node:fs";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
import path from "node:path";
|
|
7
4
|
import { test, expect } from "vitest";
|
|
8
5
|
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
9
6
|
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
@@ -18,6 +15,7 @@ import { loadOrCreateMachineIdentity } from "../core/machine-identity.js";
|
|
|
18
15
|
import { openAccountLedger } from "../core/account-ledger-store.js";
|
|
19
16
|
import { ownerNamedRoomPath } from "../core/room-path.js";
|
|
20
17
|
import { freeLocalPort } from "./hub-helpers.js";
|
|
18
|
+
import { scratchDirectory } from "./scratch-directory.helper.js";
|
|
21
19
|
/** How many polling attempts {@link waitFor} makes before failing. */
|
|
22
20
|
const WAIT_FOR_MAX_ATTEMPTS = 20;
|
|
23
21
|
/** Delay between each {@link waitFor} polling attempt. */
|
|
@@ -41,7 +39,7 @@ async function makePeer(coordinatorPort, identity, slot) {
|
|
|
41
39
|
roomVerbHandlers: store.roomVerbHandlers,
|
|
42
40
|
}));
|
|
43
41
|
const userIdentityOptions = {
|
|
44
|
-
dir:
|
|
42
|
+
dir: scratchDirectory("agent-comms-test-user-identity-"),
|
|
45
43
|
};
|
|
46
44
|
const userIdentity = loadOrCreateUserIdentity(userIdentityOptions);
|
|
47
45
|
store.setIdentity({
|
|
@@ -74,12 +72,12 @@ async function waitFor(what, check) {
|
|
|
74
72
|
}
|
|
75
73
|
async function main() {
|
|
76
74
|
const port = await freeLocalPort();
|
|
77
|
-
const dir =
|
|
75
|
+
const dir = scratchDirectory("agent-comms-send-retry-");
|
|
78
76
|
const slot = { harness: "pi", cwd: "/tmp/project", dir };
|
|
79
77
|
const slotA = {
|
|
80
78
|
harness: "claude-code",
|
|
81
79
|
cwd: "/tmp/a",
|
|
82
|
-
dir:
|
|
80
|
+
dir: scratchDirectory("agent-comms-send-retry-a-"),
|
|
83
81
|
};
|
|
84
82
|
// A is a normal ephemeral bridge that stays up throughout.
|
|
85
83
|
const a = await makePeer(port, loadOrCreateIdentity(slotA), slotA);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-send-retry.integration.test.js","sourceRoot":"","sources":["../../src/test/room-send-retry.integration.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"room-send-retry.integration.test.js","sourceRoot":"","sources":["../../src/test/room-send-retry.integration.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,13 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Unit tests for per-room capability token persistence (core/identity-store).
|
|
3
3
|
*/
|
|
4
|
-
import * as fs from "node:fs";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
|
-
import path from "node:path";
|
|
7
4
|
import { test, expect } from "vitest";
|
|
8
5
|
import { loadOrCreateIdentity, loadRoomTokens, saveRoomToken, deleteRoomToken, releaseIdentityLock, } from "../core/identity-store.js";
|
|
6
|
+
import { scratchDirectory } from "./scratch-directory.helper.js";
|
|
9
7
|
function tempSlot(harness) {
|
|
10
|
-
const dir =
|
|
8
|
+
const dir = scratchDirectory("agent-comms-room-token-test-");
|
|
11
9
|
return { slot: { harness, cwd: "/tmp/project", dir }, dir };
|
|
12
10
|
}
|
|
13
11
|
function buf(bytes) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"room-token-store.unit.test.js","sourceRoot":"","sources":["../../src/test/room-token-store.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"room-token-store.unit.test.js","sourceRoot":"","sources":["../../src/test/room-token-store.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Creates a fresh directory under the system temporary directory and tracks it for removal.
|
|
3
|
+
*
|
|
4
|
+
* Every test that needs a throwaway directory goes through here instead of calling `fs.mkdtempSync` itself, because nothing else removes what a test run leaves in the system temporary directory, and a suite that creates directories per test accumulates them across runs without bound.
|
|
5
|
+
*
|
|
6
|
+
* A tracked directory is removed by `removeScratchDirectory`, by `removeAllScratchDirectories` (run after each test file by `scratch-directory.setup.ts`) or when the process exits, whichever comes first.
|
|
7
|
+
* @param prefix - Prefix of the directory name; `fs.mkdtempSync` appends six random characters.
|
|
8
|
+
* @returns Absolute path of the new, empty directory.
|
|
9
|
+
*/
|
|
10
|
+
export declare function scratchDirectory(prefix: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Removes one directory made by `scratchDirectory`, with everything inside it, and stops tracking it. A directory that is already gone is not an error, so a test that cleans up after itself and the file-level cleanup can both run.
|
|
13
|
+
* @param dir - A path returned by `scratchDirectory`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function removeScratchDirectory(dir: string): void;
|
|
16
|
+
/** Removes every directory `scratchDirectory` has made in this process that is still tracked. */
|
|
17
|
+
export declare function removeAllScratchDirectories(): void;
|
|
18
|
+
//# sourceMappingURL=scratch-directory.helper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-directory.helper.d.ts","sourceRoot":"","sources":["../../src/test/scratch-directory.helper.ts"],"names":[],"mappings":"AAMA;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAIvD;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAGxD;AAED,iGAAiG;AACjG,wBAAgB,2BAA2B,IAAI,IAAI,CAIlD"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import { tmpdir } from "node:os";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
const scratchDirectories = new Set();
|
|
5
|
+
/**
|
|
6
|
+
* Creates a fresh directory under the system temporary directory and tracks it for removal.
|
|
7
|
+
*
|
|
8
|
+
* Every test that needs a throwaway directory goes through here instead of calling `fs.mkdtempSync` itself, because nothing else removes what a test run leaves in the system temporary directory, and a suite that creates directories per test accumulates them across runs without bound.
|
|
9
|
+
*
|
|
10
|
+
* A tracked directory is removed by `removeScratchDirectory`, by `removeAllScratchDirectories` (run after each test file by `scratch-directory.setup.ts`) or when the process exits, whichever comes first.
|
|
11
|
+
* @param prefix - Prefix of the directory name; `fs.mkdtempSync` appends six random characters.
|
|
12
|
+
* @returns Absolute path of the new, empty directory.
|
|
13
|
+
*/
|
|
14
|
+
export function scratchDirectory(prefix) {
|
|
15
|
+
const dir = fs.mkdtempSync(path.join(tmpdir(), prefix));
|
|
16
|
+
scratchDirectories.add(dir);
|
|
17
|
+
return dir;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Removes one directory made by `scratchDirectory`, with everything inside it, and stops tracking it. A directory that is already gone is not an error, so a test that cleans up after itself and the file-level cleanup can both run.
|
|
21
|
+
* @param dir - A path returned by `scratchDirectory`.
|
|
22
|
+
*/
|
|
23
|
+
export function removeScratchDirectory(dir) {
|
|
24
|
+
fs.rmSync(dir, { recursive: true, force: true });
|
|
25
|
+
scratchDirectories.delete(dir);
|
|
26
|
+
}
|
|
27
|
+
/** Removes every directory `scratchDirectory` has made in this process that is still tracked. */
|
|
28
|
+
export function removeAllScratchDirectories() {
|
|
29
|
+
for (const dir of [...scratchDirectories]) {
|
|
30
|
+
removeScratchDirectory(dir);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Backstop for a process that ends without running the file-level cleanup (a test file that throws while loading, a worker stopped between files). The exit event does not run for a process killed by a signal, which is why the file-level cleanup exists as well.
|
|
34
|
+
process.once("exit", removeAllScratchDirectories);
|
|
35
|
+
//# sourceMappingURL=scratch-directory.helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-directory.helper.js","sourceRoot":"","sources":["../../src/test/scratch-directory.helper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,kBAAkB,GAAG,IAAI,GAAG,EAAU,CAAC;AAE7C;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,GAAG,GAAG,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IACxD,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5B,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,EAAE,CAAC,MAAM,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACjD,kBAAkB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,2BAA2B;IACzC,KAAK,MAAM,GAAG,IAAI,CAAC,GAAG,kBAAkB,CAAC,EAAE,CAAC;QAC1C,sBAAsB,CAAC,GAAG,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,qQAAqQ;AACrQ,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,2BAA2B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-directory.setup.d.ts","sourceRoot":"","sources":["../../src/test/scratch-directory.setup.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// Vitest setup file: removes the directories a test file made through `scratchDirectory` once the file's tests have finished. It is registered before the test file's own hooks, and vitest runs after-hooks in reverse order of registration, so this runs after the file's own `afterAll` hooks have shut down whatever was using those directories.
|
|
2
|
+
import { afterAll } from "vitest";
|
|
3
|
+
import { removeAllScratchDirectories } from "./scratch-directory.helper.js";
|
|
4
|
+
afterAll(() => {
|
|
5
|
+
removeAllScratchDirectories();
|
|
6
|
+
});
|
|
7
|
+
//# sourceMappingURL=scratch-directory.setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-directory.setup.js","sourceRoot":"","sources":["../../src/test/scratch-directory.setup.ts"],"names":[],"mappings":"AAAA,uVAAuV;AACvV,OAAO,EAAE,QAAQ,EAAE,MAAM,QAAQ,CAAC;AAClC,OAAO,EAAE,2BAA2B,EAAE,MAAM,+BAA+B,CAAC;AAE5E,QAAQ,CAAC,GAAG,EAAE;IACZ,2BAA2B,EAAE,CAAC;AAChC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-directory.unit.test.d.ts","sourceRoot":"","sources":["../../src/test/scratch-directory.unit.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for the scratch-directory helper every test uses for throwaway directories: creation under the system temporary directory, explicit removal, removal of everything tracked, and the exit backstop that removes what a process leaves behind.
|
|
3
|
+
*/
|
|
4
|
+
import * as childProcess from "node:child_process";
|
|
5
|
+
import * as fs from "node:fs";
|
|
6
|
+
import { tmpdir } from "node:os";
|
|
7
|
+
import * as path from "node:path";
|
|
8
|
+
import { fileURLToPath } from "node:url";
|
|
9
|
+
import { describe, expect, it } from "vitest";
|
|
10
|
+
import { removeAllScratchDirectories, removeScratchDirectory, scratchDirectory, } from "./scratch-directory.helper.js";
|
|
11
|
+
const HELPER_PATH = fileURLToPath(new URL("./scratch-directory.helper.ts", import.meta.url));
|
|
12
|
+
describe("scratchDirectory", () => {
|
|
13
|
+
it("creates an empty directory under the system temporary directory with the given prefix", () => {
|
|
14
|
+
const dir = scratchDirectory("scratch-helper-create-");
|
|
15
|
+
expect(path.dirname(dir)).toBe(tmpdir());
|
|
16
|
+
expect(path.basename(dir)).toMatch(/^scratch-helper-create-.+/);
|
|
17
|
+
expect(fs.readdirSync(dir)).toEqual([]);
|
|
18
|
+
});
|
|
19
|
+
it("gives each call its own directory", () => {
|
|
20
|
+
const first = scratchDirectory("scratch-helper-distinct-");
|
|
21
|
+
const second = scratchDirectory("scratch-helper-distinct-");
|
|
22
|
+
expect(first).not.toBe(second);
|
|
23
|
+
});
|
|
24
|
+
});
|
|
25
|
+
describe("removeScratchDirectory", () => {
|
|
26
|
+
it("removes the directory with everything inside it", () => {
|
|
27
|
+
const dir = scratchDirectory("scratch-helper-remove-");
|
|
28
|
+
fs.mkdirSync(path.join(dir, "nested"));
|
|
29
|
+
fs.writeFileSync(path.join(dir, "nested", "file.txt"), "content");
|
|
30
|
+
removeScratchDirectory(dir);
|
|
31
|
+
expect(fs.existsSync(dir)).toBe(false);
|
|
32
|
+
});
|
|
33
|
+
it("accepts a directory that is already gone", () => {
|
|
34
|
+
const dir = scratchDirectory("scratch-helper-twice-");
|
|
35
|
+
removeScratchDirectory(dir);
|
|
36
|
+
expect(() => {
|
|
37
|
+
removeScratchDirectory(dir);
|
|
38
|
+
}).not.toThrow();
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
describe("removeAllScratchDirectories", () => {
|
|
42
|
+
it("removes every directory still tracked and leaves other directories alone", () => {
|
|
43
|
+
const tracked = scratchDirectory("scratch-helper-all-a-");
|
|
44
|
+
const alsoTracked = scratchDirectory("scratch-helper-all-b-");
|
|
45
|
+
const untracked = fs.mkdtempSync(path.join(tmpdir(), "scratch-helper-untracked-"));
|
|
46
|
+
try {
|
|
47
|
+
removeAllScratchDirectories();
|
|
48
|
+
expect(fs.existsSync(tracked)).toBe(false);
|
|
49
|
+
expect(fs.existsSync(alsoTracked)).toBe(false);
|
|
50
|
+
expect(fs.existsSync(untracked)).toBe(true);
|
|
51
|
+
}
|
|
52
|
+
finally {
|
|
53
|
+
fs.rmSync(untracked, { recursive: true, force: true });
|
|
54
|
+
}
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe("process exit", () => {
|
|
58
|
+
it("removes the directories a process created and never cleaned up", () => {
|
|
59
|
+
const home = scratchDirectory("scratch-helper-exit-");
|
|
60
|
+
const script = [
|
|
61
|
+
`import(${JSON.stringify(HELPER_PATH)}).then((helper) => {`,
|
|
62
|
+
` process.stdout.write(helper.scratchDirectory("scratch-helper-orphan-"));`,
|
|
63
|
+
`});`,
|
|
64
|
+
].join("\n");
|
|
65
|
+
const result = childProcess.spawnSync(process.execPath, ["--import", "tsx", "-e", script], {
|
|
66
|
+
encoding: "utf8",
|
|
67
|
+
env: { ...process.env, TMPDIR: home, TEMP: home, TMP: home },
|
|
68
|
+
});
|
|
69
|
+
expect(result.status).toBe(0);
|
|
70
|
+
const orphan = result.stdout;
|
|
71
|
+
expect(path.dirname(orphan)).toBe(home);
|
|
72
|
+
expect(fs.existsSync(orphan)).toBe(false);
|
|
73
|
+
expect(fs
|
|
74
|
+
.readdirSync(home)
|
|
75
|
+
.filter((name) => name.startsWith("scratch-helper-orphan-"))).toEqual([]);
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
//# sourceMappingURL=scratch-directory.unit.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scratch-directory.unit.test.js","sourceRoot":"","sources":["../../src/test/scratch-directory.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;
|
|
1
|
+
{"version":3,"file":"test-transport.d.ts","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;AAEjc,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AACnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAG5D,OAAO,EAEL,KAAK,cAAc,EACpB,MAAM,uCAAuC,CAAC;AAC/C,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAC;AACxD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AACpE,OAAO,EAEL,KAAK,sBAAsB,EAC5B,MAAM,6BAA6B,CAAC;AAGrC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,msCAAmsC;AACnsC,UAAU,oBAAoB;IAC5B,IAAI,CAAC,EAAE,QAAQ,CAAC,YAAY,CAAC,GAAG,SAAS,CAAC;IAC1C,0BAA0B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChD,6BAA6B,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,mBAAmB,CAAC,EAAE,QAAQ,CAAC,mBAAmB,CAAC,GAAG,SAAS,CAAC;IAChE,kKAAkK;IAClK,sBAAsB,CAAC,EAAE,QAAQ,CAAC,sBAAsB,CAAC,GAAG,SAAS,CAAC;IACtE,4aAA4a;IAC5a,cAAc,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC,KAAK,YAAY,CAAC,GAAG,SAAS,CAAC;IAC9E,6HAA6H;IAC7H,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;IACxC,kLAAkL;IAClL,WAAW,CAAC,EAAE,eAAe,GAAG,SAAS,CAAC;IAC1C,yGAAyG;IACzG,KAAK,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;CAC3B;AAiFD,msCAAmsC;AACnsC,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,YAAY,CAAC,CAGvB;AAED,qcAAqc;AACrc,wBAAsB,wBAAwB,CAC5C,KAAK,EAAE,SAAS,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC;IAAE,IAAI,EAAE,YAAY,CAAC;IAAC,SAAS,EAAE,iBAAiB,CAAA;CAAE,CAAC,CAE/D;AAMD;;GAEG;AACH,wBAAsB,OAAO,CAC3B,SAAS,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,EAC3C,WAAW,EAAE,MAAM,EACnB,SAAS,SAA8B,GACtC,OAAO,CAAC,IAAI,CAAC,CAYf;AAED,qKAAqK;AACrK,wBAAgB,mBAAmB,CACjC,SAAS,GAAE,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAM,GACjD,eAAe,CAiBjB"}
|
|
@@ -1,7 +1,4 @@
|
|
|
1
1
|
/** Wires a real WireMeshTransport plus a persisted identity slot onto a freshly constructed MeshStore -- the same setTransport()/setIdentity() calls every production bridge makes immediately after construction (via createBridgeMesh). MeshStore has no default transport or identity, so every test that constructs one needs this (or an equivalent explicit wiring) before init(), createRoom(), or any other transport- or identity-using method runs. */
|
|
2
|
-
import * as fs from "node:fs";
|
|
3
|
-
import * as path from "node:path";
|
|
4
|
-
import { tmpdir } from "node:os";
|
|
5
2
|
import { WireMeshTransport } from "../core/wire-mesh-transport.js";
|
|
6
3
|
import { deviceIdToHex } from "wire-mesh-core/domain/device-id";
|
|
7
4
|
import { createSystemClock } from "wire-mesh-core/adapters/system-clock";
|
|
@@ -13,6 +10,7 @@ import { loadOrCreateUserIdentity } from "../core/user-identity.js";
|
|
|
13
10
|
import { loadOrCreateMachineIdentity, } from "../core/machine-identity.js";
|
|
14
11
|
import { openAccountLedger } from "../core/account-ledger-store.js";
|
|
15
12
|
import { nanoid } from "../core/nanoid.js";
|
|
13
|
+
import { scratchDirectory } from "./scratch-directory.helper.js";
|
|
16
14
|
/** Short enough to keep generated test identity slots readable, long enough that two concurrent test runs won't collide on the same throwaway cwd. */
|
|
17
15
|
const TEST_IDENTITY_CWD_ID_LENGTH = 8;
|
|
18
16
|
async function wireTransportInternal(store, options) {
|
|
@@ -20,16 +18,16 @@ async function wireTransportInternal(store, options) {
|
|
|
20
18
|
const resolvedSlot = slot ?? {
|
|
21
19
|
harness: "test",
|
|
22
20
|
cwd: nanoid(TEST_IDENTITY_CWD_ID_LENGTH),
|
|
23
|
-
dir:
|
|
21
|
+
dir: scratchDirectory("agent-comms-test-identity-"),
|
|
24
22
|
};
|
|
25
23
|
const identity = identityLoader(resolvedSlot);
|
|
26
24
|
// A fresh throwaway directory per call, matching resolvedSlot's own default: each test MeshStore represents a separate device belonging to a separate person, so it needs its own user-principal identity, never the real machine-wide ~/.agent-comms/user-identity.json a production bridge shares. A caller that needs to know this store's own principal device-id ahead of time (agent-comms#187's own principal-keyed admission tests) passes an explicit userIdentityOptions naming a directory it already loaded itself, rather than this store minting one it can never be told about afterwards.
|
|
27
25
|
const resolvedUserIdentityOptions = userIdentityOptions ?? {
|
|
28
|
-
dir:
|
|
26
|
+
dir: scratchDirectory("agent-comms-test-user-identity-"),
|
|
29
27
|
};
|
|
30
28
|
const userIdentity = loadOrCreateUserIdentity(resolvedUserIdentityOptions);
|
|
31
29
|
const resolvedMachineIdentityOptions = machineIdentityOptions ?? {
|
|
32
|
-
dir:
|
|
30
|
+
dir: scratchDirectory("agent-comms-test-machine-"),
|
|
33
31
|
};
|
|
34
32
|
const machineIdentity = loadOrCreateMachineIdentity(resolvedMachineIdentityOptions);
|
|
35
33
|
// Every real bridge sets peerId to deviceIdToHex(identity.deviceId) before wiring the transport (createBridgeMesh) -- WireMeshTransport's own session bookkeeping is keyed by device-id, so a peer's advertised ID and the identity the other side actually authenticates the connection against must be the same value, or introduction/state-sync never recognises the peer as itself.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"AAAA,icAAic;AAEjc,OAAO,
|
|
1
|
+
{"version":3,"file":"test-transport.js","sourceRoot":"","sources":["../../src/test/test-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
* Unit tests for the persistent user-principal identity (core/user-identity).
|
|
3
3
|
*/
|
|
4
4
|
import * as fs from "node:fs";
|
|
5
|
-
import { tmpdir } from "node:os";
|
|
6
5
|
import path from "node:path";
|
|
7
6
|
import { test, expect, vi, afterEach } from "vitest";
|
|
8
7
|
import { clearLegacyIssuedGrants, loadOrCreateLedgerWriterNonce, loadOrCreateUserIdentity, loadUserDisplayName, saveUserDisplayName, readLegacyIssuedGrants, } from "../core/user-identity.js";
|
|
9
8
|
import { CERTIFICATE_VALIDITY_MS } from "../core/identity.js";
|
|
10
9
|
import { generateWriterNonce } from "../core/account-ledger-crypto.js";
|
|
11
10
|
import { randomId } from "../core/random-id.js";
|
|
11
|
+
import { scratchDirectory } from "./scratch-directory.helper.js";
|
|
12
12
|
// node:fs's linkSync is wrapped (not replaced) so every test gets the real filesystem by default; only the one race test below overrides it, via mockImplementationOnce, to simulate a concurrent writer winning the exclusive create. vi.spyOn cannot target an ESM named export directly ("Module namespace is not configurable"), so the wrap has to happen at vi.mock time instead.
|
|
13
13
|
vi.mock("node:fs", async (importOriginal) => {
|
|
14
14
|
const actual = await importOriginal();
|
|
@@ -22,7 +22,7 @@ class ExistsError extends Error {
|
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
function tempDir() {
|
|
25
|
-
return
|
|
25
|
+
return scratchDirectory("agent-comms-user-identity-test-");
|
|
26
26
|
}
|
|
27
27
|
function identityFile(dir) {
|
|
28
28
|
return path.join(dir, "user-identity.json");
|