agent-comms 8.3.1 → 8.4.1
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/README.md +27 -16
- package/dist/bridges/user/web/frontend/mesh-client.js +1 -1
- package/dist/bridges/user/web/frontend/mesh-client.js.map +1 -1
- package/dist/bridges/user/web/server.d.ts +1 -1
- package/dist/bridges/user/web/server.d.ts.map +1 -1
- package/dist/bridges/user/web/server.js +6 -12
- package/dist/bridges/user/web/server.js.map +1 -1
- package/dist/bridges/user/web/test/lan-web-server.integration.test.js +30 -1
- package/dist/bridges/user/web/test/lan-web-server.integration.test.js.map +1 -1
- package/dist/bridges/user/web/test/orpc-router.integration.test.js +15 -1
- package/dist/bridges/user/web/test/orpc-router.integration.test.js.map +1 -1
- package/dist/bridges/user/web/test/web-access.unit.test.js +127 -2
- package/dist/bridges/user/web/test/web-access.unit.test.js.map +1 -1
- package/dist/bridges/user/web/web-access.d.ts +9 -6
- package/dist/bridges/user/web/web-access.d.ts.map +1 -1
- package/dist/bridges/user/web/web-access.js +70 -22
- package/dist/bridges/user/web/web-access.js.map +1 -1
- package/dist/core/coordinator-role.d.ts +68 -0
- package/dist/core/coordinator-role.d.ts.map +1 -0
- package/dist/core/coordinator-role.js +161 -0
- package/dist/core/coordinator-role.js.map +1 -0
- package/dist/core/delivery-engine.d.ts.map +1 -1
- package/dist/core/delivery-engine.js +2 -0
- package/dist/core/delivery-engine.js.map +1 -1
- package/dist/core/election-sessions.d.ts +31 -0
- package/dist/core/election-sessions.d.ts.map +1 -0
- package/dist/core/election-sessions.js +59 -0
- package/dist/core/election-sessions.js.map +1 -0
- package/dist/core/loopback-address.d.ts +6 -0
- package/dist/core/loopback-address.d.ts.map +1 -0
- package/dist/core/loopback-address.js +21 -0
- package/dist/core/loopback-address.js.map +1 -0
- package/dist/core/mesh-store-options.d.ts +2 -0
- package/dist/core/mesh-store-options.d.ts.map +1 -1
- package/dist/core/mesh-store.d.ts +8 -2
- package/dist/core/mesh-store.d.ts.map +1 -1
- package/dist/core/mesh-store.js +41 -46
- package/dist/core/mesh-store.js.map +1 -1
- package/dist/core/peer-lifecycle.d.ts +18 -10
- package/dist/core/peer-lifecycle.d.ts.map +1 -1
- package/dist/core/peer-lifecycle.js +50 -9
- package/dist/core/peer-lifecycle.js.map +1 -1
- package/dist/core/pending-connection.d.ts +24 -0
- package/dist/core/pending-connection.d.ts.map +1 -0
- package/dist/core/pending-connection.js +25 -0
- package/dist/core/pending-connection.js.map +1 -0
- package/dist/core/stale-agent-checker.d.ts +4 -2
- package/dist/core/stale-agent-checker.d.ts.map +1 -1
- package/dist/core/stale-agent-checker.js +5 -4
- package/dist/core/stale-agent-checker.js.map +1 -1
- package/dist/core/transport-events.d.ts +2 -0
- package/dist/core/transport-events.d.ts.map +1 -1
- package/dist/core/transport-events.js +8 -0
- package/dist/core/transport-events.js.map +1 -1
- package/dist/core/transport.d.ts +22 -2
- package/dist/core/transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport-options.d.ts +14 -0
- package/dist/core/wire-mesh-transport-options.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport-options.js +23 -1
- package/dist/core/wire-mesh-transport-options.js.map +1 -1
- package/dist/core/wire-mesh-transport.d.ts +7 -5
- package/dist/core/wire-mesh-transport.d.ts.map +1 -1
- package/dist/core/wire-mesh-transport.js +53 -52
- package/dist/core/wire-mesh-transport.js.map +1 -1
- package/dist/core/ws-dial.d.ts +3 -1
- package/dist/core/ws-dial.d.ts.map +1 -1
- package/dist/core/ws-dial.js +15 -0
- package/dist/core/ws-dial.js.map +1 -1
- package/dist/test/agent-comms-version-gossip.integration.test.js +2 -0
- package/dist/test/agent-comms-version-gossip.integration.test.js.map +1 -1
- package/dist/test/agent-self-gossip.integration.test.js +2 -0
- package/dist/test/agent-self-gossip.integration.test.js.map +1 -1
- package/dist/test/become-coordinator-actual-port.integration.test.js +2 -0
- package/dist/test/become-coordinator-actual-port.integration.test.js.map +1 -1
- package/dist/test/coordinator-claim-sessions.integration.test.d.ts +5 -0
- package/dist/test/coordinator-claim-sessions.integration.test.d.ts.map +1 -0
- package/dist/test/coordinator-claim-sessions.integration.test.js +276 -0
- package/dist/test/coordinator-claim-sessions.integration.test.js.map +1 -0
- package/dist/test/coordinator-election.integration.test.d.ts +5 -0
- package/dist/test/coordinator-election.integration.test.d.ts.map +1 -0
- package/dist/test/coordinator-election.integration.test.js +182 -0
- package/dist/test/coordinator-election.integration.test.js.map +1 -0
- package/dist/test/coordinator-failover.unit.test.d.ts +1 -1
- package/dist/test/coordinator-failover.unit.test.js +171 -68
- package/dist/test/coordinator-failover.unit.test.js.map +1 -1
- package/dist/test/coordinator-role.unit.test.d.ts +5 -0
- package/dist/test/coordinator-role.unit.test.d.ts.map +1 -0
- package/dist/test/coordinator-role.unit.test.js +296 -0
- package/dist/test/coordinator-role.unit.test.js.map +1 -0
- package/dist/test/data-sync-frame-handling.integration.test.js +2 -0
- package/dist/test/data-sync-frame-handling.integration.test.js.map +1 -1
- package/dist/test/delivery-engine-delivery.unit.test.js +3 -0
- package/dist/test/delivery-engine-delivery.unit.test.js.map +1 -1
- package/dist/test/delivery-engine-directed-notify.unit.test.js +3 -0
- package/dist/test/delivery-engine-directed-notify.unit.test.js.map +1 -1
- package/dist/test/delivery-engine-own-agent.unit.test.js +3 -0
- package/dist/test/delivery-engine-own-agent.unit.test.js.map +1 -1
- package/dist/test/delivery-engine.unit.test.js +12 -0
- package/dist/test/delivery-engine.unit.test.js.map +1 -1
- package/dist/test/gossip-directory-aggregation.integration.test.js +2 -0
- package/dist/test/gossip-directory-aggregation.integration.test.js.map +1 -1
- package/dist/test/gossip-listener-addresses.integration.test.js +2 -0
- package/dist/test/gossip-listener-addresses.integration.test.js.map +1 -1
- package/dist/test/hosted-rooms-gossip.integration.test.js +2 -0
- package/dist/test/hosted-rooms-gossip.integration.test.js.map +1 -1
- package/dist/test/hub-mode-session.integration.test.js +2 -0
- package/dist/test/hub-mode-session.integration.test.js.map +1 -1
- package/dist/test/hub-session-dispatch.unit.test.js +2 -0
- package/dist/test/hub-session-dispatch.unit.test.js.map +1 -1
- package/dist/test/listener-policy.integration.test.js +2 -0
- package/dist/test/listener-policy.integration.test.js.map +1 -1
- package/dist/test/loopback-address.unit.test.d.ts +5 -0
- package/dist/test/loopback-address.unit.test.d.ts.map +1 -0
- package/dist/test/loopback-address.unit.test.js +28 -0
- package/dist/test/loopback-address.unit.test.js.map +1 -0
- package/dist/test/mesh-graph-trace.integration.test.js +2 -0
- package/dist/test/mesh-graph-trace.integration.test.js.map +1 -1
- package/dist/test/mesh-store-orchestration.unit.test.js +23 -6
- package/dist/test/mesh-store-orchestration.unit.test.js.map +1 -1
- package/dist/test/peer-lifecycle.unit.test.js +35 -15
- package/dist/test/peer-lifecycle.unit.test.js.map +1 -1
- package/dist/test/presence-readvertise.integration.test.js +49 -0
- package/dist/test/presence-readvertise.integration.test.js.map +1 -1
- package/dist/test/query-version.integration.test.js +2 -0
- package/dist/test/query-version.integration.test.js.map +1 -1
- package/dist/test/room-join-admission.integration.test.js +3 -0
- package/dist/test/room-join-admission.integration.test.js.map +1 -1
- package/dist/test/room-router.unit.test.js +2 -0
- package/dist/test/room-router.unit.test.js.map +1 -1
- package/dist/test/room-send-retry-queue.integration.test.js +3 -0
- package/dist/test/room-send-retry-queue.integration.test.js.map +1 -1
- package/dist/test/stale-agent-checker.unit.test.js +5 -0
- package/dist/test/stale-agent-checker.unit.test.js.map +1 -1
- package/dist/test/test-transport.d.ts +3 -0
- package/dist/test/test-transport.d.ts.map +1 -1
- package/dist/test/test-transport.js +19 -0
- package/dist/test/test-transport.js.map +1 -1
- package/dist/test/wire-mesh-transport-gateway-trust.integration.test.js +2 -0
- package/dist/test/wire-mesh-transport-gateway-trust.integration.test.js.map +1 -1
- package/dist/test/wire-mesh-transport-hub.integration.test.js +2 -0
- package/dist/test/wire-mesh-transport-hub.integration.test.js.map +1 -1
- package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.js +10 -26
- package/dist/test/wire-mesh-transport-shutdown-unref.integration.test.js.map +1 -1
- package/dist/test/wire-mesh-transport.integration.test.js +51 -51
- package/dist/test/wire-mesh-transport.integration.test.js.map +1 -1
- package/dist/test/wss-remote-connect.integration.test.js +2 -0
- package/dist/test/wss-remote-connect.integration.test.js.map +1 -1
- package/package.json +2 -2
|
@@ -1,15 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* PeerLifecycle's
|
|
2
|
+
* PeerLifecycle's failover decisions, exercised against fakes with a real CoordinatorRole: which disconnects contest the vacated well-known port (agent-comms#285), what a peer that loses the bind race does instead, how the elected coordinator role is recovered when its holder departs (agent-comms#341), and who retires a departed peer's own agent record. The real-socket counterparts live in coordinator-failover.integration.test.ts and coordinator-election.integration.test.ts.
|
|
3
3
|
*/
|
|
4
|
-
import { test, expect } from "vitest";
|
|
4
|
+
import { afterEach, test, expect, vi } from "vitest";
|
|
5
|
+
import { deviceIdFromHex } from "wire-mesh-core/domain/device-id";
|
|
5
6
|
import { PeerLifecycle } from "../core/peer-lifecycle.js";
|
|
7
|
+
import { CoordinatorRole } from "../core/coordinator-role.js";
|
|
8
|
+
import { ROOM_REQUEST_TIMEOUT_MS } from "../core/request-timeouts.js";
|
|
6
9
|
const COORDINATOR_PORT = 19_876;
|
|
7
10
|
const SELF_DATA_PORT = 41_001;
|
|
8
11
|
const COORDINATOR_DATA_PORT = 41_002;
|
|
9
12
|
const SURVIVOR_DATA_PORT = 41_003;
|
|
10
|
-
const
|
|
11
|
-
|
|
12
|
-
const
|
|
13
|
+
const DEVICE_ID_HEX_LENGTH = 64;
|
|
14
|
+
/** Device-ids in ascending order, so which survivor is the lowest is fixed per test: the departing peer sorts first, then this side, then the other survivor, unless a test swaps the last two. */
|
|
15
|
+
const COORDINATOR_ID = "1".repeat(DEVICE_ID_HEX_LENGTH);
|
|
16
|
+
const LOW_ID = "2".repeat(DEVICE_ID_HEX_LENGTH);
|
|
17
|
+
const HIGH_ID = "3".repeat(DEVICE_ID_HEX_LENGTH);
|
|
18
|
+
/** Sorts below every other id here, for a peer this side lists but can never hold an election with. */
|
|
19
|
+
const UNENROLLED_ID = "0".repeat(DEVICE_ID_HEX_LENGTH);
|
|
20
|
+
const UNENROLLED_DATA_PORT = 41_004;
|
|
13
21
|
function peer(id, port, startedAt) {
|
|
14
22
|
return { id, port, startedAt };
|
|
15
23
|
}
|
|
@@ -28,24 +36,24 @@ function agentRecord(id, status) {
|
|
|
28
36
|
subscribedRooms: [],
|
|
29
37
|
};
|
|
30
38
|
}
|
|
39
|
+
function claimFor(holderHex, term) {
|
|
40
|
+
return { type: "coordinator", term, coordinator: deviceIdFromHex(holderHex) };
|
|
41
|
+
}
|
|
31
42
|
function makeHarness(options = {}) {
|
|
43
|
+
const selfId = options.selfId ?? LOW_ID;
|
|
32
44
|
const calls = {
|
|
33
45
|
becomeCoordinator: [],
|
|
34
46
|
connectToCoordinator: [],
|
|
35
47
|
connectToPeer: [],
|
|
36
48
|
broadcasts: [],
|
|
49
|
+
claims: [],
|
|
37
50
|
};
|
|
38
|
-
const
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
roomStatusNotifications: [],
|
|
45
|
-
staleCheckerStarts: 0,
|
|
46
|
-
roleChanges: 0,
|
|
47
|
-
errors: [],
|
|
48
|
-
};
|
|
51
|
+
const peerInfo = new Map();
|
|
52
|
+
const agents = new Map();
|
|
53
|
+
const roomStatusNotifications = [];
|
|
54
|
+
const errors = [];
|
|
55
|
+
const notEnrolled = new Set(options.notEnrolled);
|
|
56
|
+
let gains = 0;
|
|
49
57
|
let isCoordinator = options.isCoordinator ?? false;
|
|
50
58
|
const transport = {
|
|
51
59
|
dataPort: SELF_DATA_PORT,
|
|
@@ -73,6 +81,12 @@ function makeHarness(options = {}) {
|
|
|
73
81
|
connectToRemote: async () => { },
|
|
74
82
|
broadcast: async () => { },
|
|
75
83
|
broadcastRevocation: async () => { },
|
|
84
|
+
broadcastCoordinatorClaim: async (frame) => {
|
|
85
|
+
calls.claims.push(frame);
|
|
86
|
+
},
|
|
87
|
+
sendCoordinatorClaim: async () => { },
|
|
88
|
+
// Every peer this side still lists has a machine-local session to it unless the test says otherwise; handlePeerDeparture drops a departed peer from peerInfo just as the transport drops its closed session.
|
|
89
|
+
electionPeerIds: () => new Set([...peerInfo.keys()].filter((id) => id !== selfId && !notEnrolled.has(id))),
|
|
76
90
|
sendRoomRequest: async () => ({ result: "ok" }),
|
|
77
91
|
addListener: async () => "listener",
|
|
78
92
|
removeListener: async () => { },
|
|
@@ -80,11 +94,23 @@ function makeHarness(options = {}) {
|
|
|
80
94
|
shutdown: async () => { },
|
|
81
95
|
unref: () => { },
|
|
82
96
|
};
|
|
97
|
+
const role = new CoordinatorRole({
|
|
98
|
+
getPeerId: () => selfId,
|
|
99
|
+
requireTransport: () => transport,
|
|
100
|
+
claimWaitMs: ROOM_REQUEST_TIMEOUT_MS,
|
|
101
|
+
onGained: async () => {
|
|
102
|
+
gains += 1;
|
|
103
|
+
},
|
|
104
|
+
onLost: async () => { },
|
|
105
|
+
onError: (error) => {
|
|
106
|
+
errors.push(error instanceof Error ? error : new Error(String(error)));
|
|
107
|
+
},
|
|
108
|
+
});
|
|
83
109
|
const deps = {
|
|
84
|
-
peerInfo
|
|
85
|
-
agents
|
|
110
|
+
peerInfo,
|
|
111
|
+
agents,
|
|
86
112
|
coordinatorPort: COORDINATOR_PORT,
|
|
87
|
-
getPeerId: () =>
|
|
113
|
+
getPeerId: () => selfId,
|
|
88
114
|
getCoordinatorPeerId: () => transport.coordinatorPeerId,
|
|
89
115
|
requireTransport: () => transport,
|
|
90
116
|
serialise: () => ({
|
|
@@ -99,80 +125,96 @@ function makeHarness(options = {}) {
|
|
|
99
125
|
applyStateSync: () => { },
|
|
100
126
|
applyPatch: async () => { },
|
|
101
127
|
notifyRoomsOfStatus: async (agentId, status) => {
|
|
102
|
-
|
|
128
|
+
roomStatusNotifications.push({ agentId, status });
|
|
103
129
|
},
|
|
104
130
|
broadcastPatch: async (patch) => {
|
|
105
131
|
calls.broadcasts.push(patch);
|
|
106
132
|
},
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
harness.staleCheckerStarts += 1;
|
|
133
|
+
bump: (entity) => {
|
|
134
|
+
entity.version += 1;
|
|
135
|
+
return entity;
|
|
111
136
|
},
|
|
112
137
|
},
|
|
113
|
-
|
|
114
|
-
harness.roleChanges += 1;
|
|
115
|
-
},
|
|
138
|
+
coordinatorRole: role,
|
|
116
139
|
onError: (error) => {
|
|
117
|
-
|
|
140
|
+
errors.push(error);
|
|
118
141
|
},
|
|
119
142
|
};
|
|
120
|
-
|
|
121
|
-
|
|
143
|
+
peerInfo.set(selfId, peer(selfId, SELF_DATA_PORT, "2026-01-01T00:00:02.000Z"));
|
|
144
|
+
peerInfo.set(COORDINATOR_ID, peer(COORDINATOR_ID, COORDINATOR_DATA_PORT, "2026-01-01T00:00:00.000Z"));
|
|
145
|
+
const survivorId = options.survivorId ?? HIGH_ID;
|
|
146
|
+
peerInfo.set(survivorId, peer(survivorId, SURVIVOR_DATA_PORT, "2026-01-01T00:00:01.000Z"));
|
|
147
|
+
return {
|
|
148
|
+
lifecycle: new PeerLifecycle(deps),
|
|
149
|
+
role,
|
|
150
|
+
calls,
|
|
151
|
+
peerInfo,
|
|
152
|
+
agents,
|
|
153
|
+
roomStatusNotifications,
|
|
154
|
+
get gains() {
|
|
155
|
+
return gains;
|
|
156
|
+
},
|
|
157
|
+
errors,
|
|
158
|
+
};
|
|
122
159
|
}
|
|
123
|
-
/**
|
|
124
|
-
function
|
|
125
|
-
harness.
|
|
126
|
-
harness.
|
|
127
|
-
harness.peerInfo.set(SURVIVOR_ID, peer(SURVIVOR_ID, SURVIVOR_DATA_PORT, "2026-01-01T00:00:01.000Z"));
|
|
160
|
+
/** Makes holderHex the elected incumbent at term, as if its claim had just been gossiped to this side. */
|
|
161
|
+
async function electHolder(harness, holderHex, term) {
|
|
162
|
+
await harness.role.handleClaim({ id: holderHex }, claimFor(holderHex, term));
|
|
163
|
+
harness.calls.claims.length = 0;
|
|
128
164
|
}
|
|
129
|
-
|
|
165
|
+
afterEach(() => {
|
|
166
|
+
vi.useRealTimers();
|
|
167
|
+
});
|
|
168
|
+
test("the port holder's own disconnect makes this peer contest the well-known port", async () => {
|
|
130
169
|
const harness = makeHarness({ coordinatorPeerId: COORDINATOR_ID });
|
|
131
|
-
seedMesh(harness);
|
|
132
170
|
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
133
171
|
expect(harness.calls.becomeCoordinator).toEqual([
|
|
134
172
|
{ host: "127.0.0.1", port: COORDINATOR_PORT },
|
|
135
173
|
]);
|
|
136
|
-
expect(harness.staleCheckerStarts).toBe(1);
|
|
137
|
-
expect(harness.roleChanges).toBe(1);
|
|
138
174
|
expect(harness.errors).toEqual([]);
|
|
139
175
|
});
|
|
140
|
-
test("
|
|
176
|
+
test("winning the vacated port does not by itself carry the coordinator duties while another live peer holds the elected role", async () => {
|
|
141
177
|
const harness = makeHarness({ coordinatorPeerId: COORDINATOR_ID });
|
|
142
|
-
|
|
178
|
+
await electHolder(harness, HIGH_ID, 0);
|
|
143
179
|
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
144
|
-
expect(
|
|
145
|
-
expect(harness.
|
|
180
|
+
expect(harness.calls.becomeCoordinator).toHaveLength(1);
|
|
181
|
+
expect(harness.role.isHolder()).toBe(false);
|
|
182
|
+
expect(harness.gains).toBe(0);
|
|
183
|
+
expect(harness.calls.claims).toEqual([]);
|
|
146
184
|
});
|
|
147
|
-
test("
|
|
185
|
+
test("taking over the port keeps this peer's own entry and drops the dead holder's", async () => {
|
|
148
186
|
const harness = makeHarness({ coordinatorPeerId: COORDINATOR_ID });
|
|
149
|
-
|
|
150
|
-
|
|
187
|
+
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
188
|
+
expect([...harness.peerInfo.keys()].sort()).toEqual([LOW_ID, HIGH_ID].sort());
|
|
189
|
+
expect(harness.calls.connectToPeer).toEqual([HIGH_ID]);
|
|
190
|
+
});
|
|
191
|
+
test("an ordinary peer's disconnect contests neither the port nor the elected role", async () => {
|
|
192
|
+
const harness = makeHarness({ coordinatorPeerId: COORDINATOR_ID });
|
|
193
|
+
await electHolder(harness, COORDINATOR_ID, 0);
|
|
194
|
+
await harness.lifecycle.handlePeerDeparture(HIGH_ID);
|
|
151
195
|
expect(harness.calls.becomeCoordinator).toEqual([]);
|
|
152
196
|
expect(harness.calls.connectToCoordinator).toEqual([]);
|
|
153
|
-
expect(harness.
|
|
197
|
+
expect(harness.calls.claims).toEqual([]);
|
|
198
|
+
expect(harness.peerInfo.has(HIGH_ID)).toBe(false);
|
|
154
199
|
});
|
|
155
|
-
test("a peer that already holds the
|
|
200
|
+
test("a peer that already holds the port listener never contests it", async () => {
|
|
156
201
|
const harness = makeHarness({
|
|
157
202
|
isCoordinator: true,
|
|
158
203
|
coordinatorPeerId: COORDINATOR_ID,
|
|
159
204
|
});
|
|
160
|
-
seedMesh(harness);
|
|
161
205
|
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
162
206
|
expect(harness.calls.becomeCoordinator).toEqual([]);
|
|
163
207
|
});
|
|
164
|
-
test("losing the bind race makes this peer rejoin under the new
|
|
208
|
+
test("losing the bind race makes this peer rejoin under the new port holder", async () => {
|
|
165
209
|
const harness = makeHarness({
|
|
166
210
|
coordinatorPeerId: COORDINATOR_ID,
|
|
167
211
|
bindFailure: new Error("listen EADDRINUSE: address already in use"),
|
|
168
212
|
});
|
|
169
|
-
seedMesh(harness);
|
|
170
213
|
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
171
214
|
expect(harness.calls.becomeCoordinator).toHaveLength(1);
|
|
172
215
|
expect(harness.calls.connectToCoordinator).toEqual([
|
|
173
|
-
{ port: COORDINATOR_PORT, peerId:
|
|
216
|
+
{ port: COORDINATOR_PORT, peerId: LOW_ID, dataPort: SELF_DATA_PORT },
|
|
174
217
|
]);
|
|
175
|
-
expect(harness.staleCheckerStarts).toBe(0);
|
|
176
218
|
expect(harness.errors).toEqual([]);
|
|
177
219
|
});
|
|
178
220
|
test("a bind failure that is not a port conflict is reported, not retried as a rejoin", async () => {
|
|
@@ -180,29 +222,87 @@ test("a bind failure that is not a port conflict is reported, not retried as a r
|
|
|
180
222
|
coordinatorPeerId: COORDINATOR_ID,
|
|
181
223
|
bindFailure: new Error("EACCES: permission denied"),
|
|
182
224
|
});
|
|
183
|
-
seedMesh(harness);
|
|
184
225
|
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
185
226
|
expect(harness.calls.connectToCoordinator).toEqual([]);
|
|
186
227
|
expect(harness.errors.map((error) => error.message)).toEqual([
|
|
187
|
-
"PeerLifecycle: could not take over the vacated coordinator
|
|
228
|
+
"PeerLifecycle: could not take over the vacated coordinator port: EACCES: permission denied",
|
|
188
229
|
]);
|
|
189
230
|
});
|
|
190
|
-
test("the
|
|
191
|
-
const harness = makeHarness({
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
231
|
+
test("the elected holder's departure makes the lowest surviving device-id claim the role at a raised term, whether or not it wins the port", async () => {
|
|
232
|
+
const harness = makeHarness({
|
|
233
|
+
coordinatorPeerId: COORDINATOR_ID,
|
|
234
|
+
bindFailure: new Error("listen EADDRINUSE: address already in use"),
|
|
235
|
+
});
|
|
236
|
+
const departedTerm = 3;
|
|
237
|
+
await electHolder(harness, COORDINATOR_ID, departedTerm);
|
|
238
|
+
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
239
|
+
expect(harness.calls.claims).toEqual([claimFor(LOW_ID, departedTerm + 1)]);
|
|
240
|
+
expect(harness.role.isHolder()).toBe(true);
|
|
241
|
+
expect(harness.gains).toBe(1);
|
|
242
|
+
expect(harness.calls.becomeCoordinator).toHaveLength(1);
|
|
243
|
+
});
|
|
244
|
+
test("a lower-id peer this side lists but has no machine-local session to does not hold the lowest survivor back from claiming at once", async () => {
|
|
245
|
+
const harness = makeHarness({ notEnrolled: [UNENROLLED_ID] });
|
|
246
|
+
harness.peerInfo.set(UNENROLLED_ID, peer(UNENROLLED_ID, UNENROLLED_DATA_PORT, "2026-01-01T00:00:03.000Z"));
|
|
247
|
+
await electHolder(harness, COORDINATOR_ID, 0);
|
|
248
|
+
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
249
|
+
expect(harness.calls.claims).toEqual([claimFor(LOW_ID, 1)]);
|
|
250
|
+
expect(harness.role.isHolder()).toBe(true);
|
|
251
|
+
});
|
|
252
|
+
test("a survivor that is not the lowest device-id leaves the claim to the lowest one", async () => {
|
|
253
|
+
vi.useFakeTimers();
|
|
254
|
+
const harness = makeHarness({ selfId: HIGH_ID, survivorId: LOW_ID });
|
|
255
|
+
await electHolder(harness, COORDINATOR_ID, 0);
|
|
256
|
+
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
257
|
+
await harness.role.handleClaim({ id: LOW_ID }, claimFor(LOW_ID, 1));
|
|
258
|
+
harness.calls.claims.length = 0;
|
|
259
|
+
await vi.advanceTimersByTimeAsync(ROOM_REQUEST_TIMEOUT_MS);
|
|
260
|
+
expect(harness.role.isHolder()).toBe(false);
|
|
261
|
+
expect(harness.role.current()).toEqual({ term: 1, holder: LOW_ID });
|
|
262
|
+
expect(harness.calls.claims).toEqual([]);
|
|
263
|
+
});
|
|
264
|
+
test("a survivor claims the role itself once the expected successor's claim never arrives, and retires the departed holder", async () => {
|
|
265
|
+
vi.useFakeTimers();
|
|
266
|
+
const harness = makeHarness({ selfId: HIGH_ID, survivorId: LOW_ID });
|
|
267
|
+
harness.agents.set(COORDINATOR_ID, agentRecord(COORDINATOR_ID, "active"));
|
|
268
|
+
await electHolder(harness, COORDINATOR_ID, 0);
|
|
269
|
+
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
270
|
+
expect(harness.calls.claims).toEqual([]);
|
|
271
|
+
await vi.advanceTimersByTimeAsync(ROOM_REQUEST_TIMEOUT_MS);
|
|
272
|
+
expect(harness.calls.claims).toEqual([claimFor(HIGH_ID, 1)]);
|
|
273
|
+
expect(harness.role.isHolder()).toBe(true);
|
|
274
|
+
expect(harness.agents.get(COORDINATOR_ID)?.status).toBe("offline");
|
|
275
|
+
expect(harness.calls.broadcasts).toEqual([
|
|
276
|
+
{ type: "agent_offline", agentId: COORDINATOR_ID },
|
|
277
|
+
]);
|
|
278
|
+
});
|
|
279
|
+
test("the elected holder retires a departed peer's own agent record", async () => {
|
|
280
|
+
const harness = makeHarness();
|
|
281
|
+
await harness.role.claimIfVacant();
|
|
282
|
+
const running = agentRecord(HIGH_ID, "active");
|
|
283
|
+
harness.agents.set(HIGH_ID, structuredClone(running));
|
|
284
|
+
await harness.lifecycle.handlePeerDeparture(HIGH_ID);
|
|
285
|
+
expect(harness.agents.get(HIGH_ID)?.status).toBe("offline");
|
|
286
|
+
// Above the revision a survivor's snapshot from before the departure would carry.
|
|
287
|
+
expect(harness.agents.get(HIGH_ID)?.version).toBe(running.version + 1);
|
|
196
288
|
expect(harness.roomStatusNotifications).toEqual([
|
|
197
|
-
{ agentId:
|
|
289
|
+
{ agentId: HIGH_ID, status: "offline" },
|
|
198
290
|
]);
|
|
199
291
|
expect(harness.calls.broadcasts).toEqual([
|
|
200
|
-
{ type: "agent_offline", agentId:
|
|
292
|
+
{ type: "agent_offline", agentId: HIGH_ID },
|
|
201
293
|
]);
|
|
202
294
|
});
|
|
203
|
-
test("
|
|
295
|
+
test("holding only the port listener gives no authority to retire a departed peer", async () => {
|
|
296
|
+
const harness = makeHarness({ isCoordinator: true });
|
|
297
|
+
await electHolder(harness, COORDINATOR_ID, 0);
|
|
298
|
+
harness.agents.set(HIGH_ID, agentRecord(HIGH_ID, "active"));
|
|
299
|
+
await harness.lifecycle.handlePeerDeparture(HIGH_ID);
|
|
300
|
+
expect(harness.agents.get(HIGH_ID)?.status).toBe("active");
|
|
301
|
+
expect(harness.calls.broadcasts).toEqual([]);
|
|
302
|
+
});
|
|
303
|
+
test("a peer that takes over the elected role retires the dead holder's own agent record", async () => {
|
|
204
304
|
const harness = makeHarness({ coordinatorPeerId: COORDINATOR_ID });
|
|
205
|
-
|
|
305
|
+
await electHolder(harness, COORDINATOR_ID, 0);
|
|
206
306
|
harness.agents.set(COORDINATOR_ID, agentRecord(COORDINATOR_ID, "active"));
|
|
207
307
|
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
208
308
|
expect(harness.agents.get(COORDINATOR_ID)?.status).toBe("offline");
|
|
@@ -210,14 +310,17 @@ test("a peer that takes over retires the dead coordinator's own agent record", a
|
|
|
210
310
|
{ type: "agent_offline", agentId: COORDINATOR_ID },
|
|
211
311
|
]);
|
|
212
312
|
});
|
|
213
|
-
test("a
|
|
313
|
+
test("a survivor that does not take over the elected role leaves the offline announcement to the new holder, even when it wins the port", async () => {
|
|
314
|
+
vi.useFakeTimers();
|
|
214
315
|
const harness = makeHarness({
|
|
316
|
+
selfId: HIGH_ID,
|
|
317
|
+
survivorId: LOW_ID,
|
|
215
318
|
coordinatorPeerId: COORDINATOR_ID,
|
|
216
|
-
bindFailure: new Error("listen EADDRINUSE: address already in use"),
|
|
217
319
|
});
|
|
218
|
-
|
|
320
|
+
await electHolder(harness, COORDINATOR_ID, 0);
|
|
219
321
|
harness.agents.set(COORDINATOR_ID, agentRecord(COORDINATOR_ID, "active"));
|
|
220
322
|
await harness.lifecycle.handlePeerDeparture(COORDINATOR_ID);
|
|
323
|
+
expect(harness.calls.becomeCoordinator).toHaveLength(1);
|
|
221
324
|
expect(harness.calls.broadcasts).toEqual([]);
|
|
222
325
|
expect(harness.roomStatusNotifications).toEqual([]);
|
|
223
326
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"coordinator-failover.unit.test.js","sourceRoot":"","sources":["../../src/test/coordinator-failover.unit.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"coordinator-failover.unit.test.js","sourceRoot":"","sources":["../../src/test/coordinator-failover.unit.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* CoordinatorRole's election behaviour (agent-comms#341) over an in-memory bus: several roles, each gossiping its claims to every other exactly as WireMeshTransport gossips them over machine-local sessions, so convergence, supersession and the no-echo rule are observable without sockets.
|
|
3
|
+
*/
|
|
4
|
+
export {};
|
|
5
|
+
//# sourceMappingURL=coordinator-role.unit.test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"coordinator-role.unit.test.d.ts","sourceRoot":"","sources":["../../src/test/coordinator-role.unit.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|