@peerbit/test-utils 2.3.18 → 2.3.19-000e3f1

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.
@@ -1,33 +1,404 @@
1
1
  import { yamux } from "@chainsafe/libp2p-yamux";
2
2
  import { DirectBlock } from "@peerbit/blocks";
3
+ import { createStore } from "@peerbit/any-store";
3
4
  import { keychain } from "@peerbit/keychain";
5
+ import { DefaultCryptoKeychain } from "@peerbit/keychain";
6
+ import { PreHash, SignatureWithKey } from "@peerbit/crypto";
4
7
  import { TestSession as SSession, listenFast, transportsFast, } from "@peerbit/libp2p-test-utils";
5
8
  import {} from "@peerbit/program";
6
- import { DirectSub } from "@peerbit/pubsub";
9
+ import { FanoutTree, TopicControlPlane, TopicRootControlPlane } from "@peerbit/pubsub";
7
10
  import { waitForNeighbour as waitForPeersStreams, } from "@peerbit/stream";
8
11
  import {} from "libp2p";
9
12
  import path from "path";
10
13
  import {} from "peerbit";
11
14
  import { Peerbit } from "peerbit";
15
+ import { InMemoryNetwork, InMemorySession } from "./inmemory-libp2p.js";
16
+ class NoopIndices {
17
+ store = createStore();
18
+ async init(_properties) {
19
+ throw new Error("NoopIndices: indexing disabled for this session (pass `indexer` to enable).");
20
+ }
21
+ async scope(_name) {
22
+ return this;
23
+ }
24
+ async start() {
25
+ await this.store.open();
26
+ }
27
+ async stop() {
28
+ await this.store.close();
29
+ }
30
+ async drop() {
31
+ await this.store.clear();
32
+ }
33
+ }
34
+ class SimTopicControlPlane extends TopicControlPlane {
35
+ constructor(c, opts, mockCrypto = true) {
36
+ super(c, opts);
37
+ if (mockCrypto) {
38
+ this.sign = async () => new SignatureWithKey({
39
+ signature: new Uint8Array([0]),
40
+ publicKey: this.publicKey,
41
+ prehash: PreHash.NONE,
42
+ });
43
+ }
44
+ }
45
+ async verifyAndProcess(message) {
46
+ const from = message.header.signatures.publicKeys[0];
47
+ if (!this.peers.has(from.hashcode())) {
48
+ this.updateSession(from, Number(message.header.session));
49
+ }
50
+ return true;
51
+ }
52
+ }
53
+ class SimFanoutTree extends FanoutTree {
54
+ constructor(c, opts, mockCrypto = true) {
55
+ super(c, opts);
56
+ if (mockCrypto) {
57
+ this.sign = async () => new SignatureWithKey({
58
+ signature: new Uint8Array([0]),
59
+ publicKey: this.publicKey,
60
+ prehash: PreHash.NONE,
61
+ });
62
+ }
63
+ }
64
+ async verifyAndProcess(message) {
65
+ const from = message.header.signatures.publicKeys[0];
66
+ if (!this.peers.has(from.hashcode())) {
67
+ this.updateSession(from, Number(message.header.session));
68
+ }
69
+ return true;
70
+ }
71
+ }
72
+ class SimDirectBlock extends DirectBlock {
73
+ constructor(c, opts, mockCrypto = true) {
74
+ super(c, opts);
75
+ if (mockCrypto) {
76
+ this.sign = async () => new SignatureWithKey({
77
+ signature: new Uint8Array([0]),
78
+ publicKey: this.publicKey,
79
+ prehash: PreHash.NONE,
80
+ });
81
+ }
82
+ }
83
+ async verifyAndProcess(message) {
84
+ const from = message.header.signatures.publicKeys[0];
85
+ if (!this.peers.has(from.hashcode())) {
86
+ this.updateSession(from, Number(message.header.session));
87
+ }
88
+ return true;
89
+ }
90
+ }
91
+ const mulberry32 = (seed) => {
92
+ let t = seed >>> 0;
93
+ return () => {
94
+ t += 0x6d2b79f5;
95
+ let x = t;
96
+ x = Math.imul(x ^ (x >>> 15), x | 1);
97
+ x ^= x + Math.imul(x ^ (x >>> 7), x | 61);
98
+ return ((x ^ (x >>> 14)) >>> 0) / 4294967296;
99
+ };
100
+ };
101
+ const parseSimPeerIndex = (peerId) => {
102
+ const s = String(peerId?.toString?.() ?? "");
103
+ const m = s.match(/sim-(\d+)/);
104
+ if (!m)
105
+ return 0;
106
+ const n = Number(m[1]);
107
+ return Number.isFinite(n) ? Math.max(0, Math.floor(n)) : 0;
108
+ };
109
+ const int = (rng, maxExclusive) => Math.floor(rng() * maxExclusive);
110
+ const buildRandomGraph = (n, targetDegree, rng) => {
111
+ if (n <= 0)
112
+ throw new Error("nodes must be > 0");
113
+ if (targetDegree < 0)
114
+ throw new Error("degree must be >= 0");
115
+ if (targetDegree >= n) {
116
+ throw new Error("degree must be < nodes for a simple graph");
117
+ }
118
+ const adj = Array.from({ length: n }, () => new Set());
119
+ const degree = new Uint16Array(n);
120
+ const connect = (a, b) => {
121
+ if (a === b)
122
+ return false;
123
+ if (adj[a].has(b))
124
+ return false;
125
+ if (degree[a] >= targetDegree || degree[b] >= targetDegree)
126
+ return false;
127
+ adj[a].add(b);
128
+ adj[b].add(a);
129
+ degree[a] += 1;
130
+ degree[b] += 1;
131
+ return true;
132
+ };
133
+ // Seed connectivity (line or ring).
134
+ if (targetDegree >= 2 && n >= 3) {
135
+ for (let i = 0; i < n; i++)
136
+ connect(i, (i + 1) % n);
137
+ }
138
+ else if (targetDegree >= 1 && n >= 2) {
139
+ for (let i = 0; i < n - 1; i++)
140
+ connect(i, i + 1);
141
+ }
142
+ const available = [];
143
+ const pos = new Int32Array(n).fill(-1);
144
+ for (let i = 0; i < n; i++) {
145
+ if (degree[i] < targetDegree) {
146
+ pos[i] = available.length;
147
+ available.push(i);
148
+ }
149
+ }
150
+ const removeAvailable = (id) => {
151
+ const p = pos[id];
152
+ if (p < 0)
153
+ return;
154
+ const last = available.pop();
155
+ if (last !== id) {
156
+ available[p] = last;
157
+ pos[last] = p;
158
+ }
159
+ pos[id] = -1;
160
+ };
161
+ const maxAttempts = n * Math.max(1, targetDegree) * 200;
162
+ let attempts = 0;
163
+ while (available.length > 1 && attempts < maxAttempts) {
164
+ attempts++;
165
+ const a = available[int(rng, available.length)];
166
+ const b = available[int(rng, available.length)];
167
+ if (a === b)
168
+ continue;
169
+ if (!connect(a, b))
170
+ continue;
171
+ if (degree[a] >= targetDegree)
172
+ removeAvailable(a);
173
+ if (degree[b] >= targetDegree)
174
+ removeAvailable(b);
175
+ }
176
+ return adj.map((s) => [...s]);
177
+ };
178
+ const runWithConcurrency = async (tasks, concurrency) => {
179
+ if (tasks.length === 0)
180
+ return [];
181
+ const results = new Array(tasks.length);
182
+ let next = 0;
183
+ const workers = Array.from({ length: Math.min(concurrency, tasks.length) }, async () => {
184
+ for (;;) {
185
+ const i = next++;
186
+ if (i >= tasks.length)
187
+ return;
188
+ results[i] = await tasks[i]();
189
+ }
190
+ });
191
+ await Promise.all(workers);
192
+ return results;
193
+ };
12
194
  export class TestSession {
13
195
  session;
14
196
  _peers;
15
197
  connectedGroups;
16
- constructor(session, peers) {
198
+ inMemory;
199
+ constructor(session, peers, opts) {
17
200
  this.session = session;
18
201
  this._peers = peers;
202
+ this.inMemory = opts?.inMemory;
19
203
  this.wrapPeerStartForReconnect();
20
204
  }
21
205
  get peers() {
22
206
  return this._peers;
23
207
  }
208
+ async configureFanoutShardRoots() {
209
+ if (!this.connectedGroups)
210
+ return;
211
+ // Build a view of direct underlay adjacency from the original dial-groups.
212
+ // This is used to pick "universally reachable" routers in sparse topologies
213
+ // (e.g. a line) so that sharded pubsub roots are directly dialable.
214
+ const adjacency = new Map();
215
+ const addAdj = (a, b) => {
216
+ let sa = adjacency.get(a);
217
+ if (!sa) {
218
+ sa = new Set();
219
+ adjacency.set(a, sa);
220
+ }
221
+ sa.add(b);
222
+ };
223
+ for (const groupSet of this.connectedGroups) {
224
+ const peers = [...groupSet];
225
+ for (let i = 0; i < peers.length; i++) {
226
+ for (let j = i + 1; j < peers.length; j++) {
227
+ const a = peers[i];
228
+ const b = peers[j];
229
+ addAdj(a, b);
230
+ addAdj(b, a);
231
+ }
232
+ }
233
+ }
234
+ // `connect(groups)` is sometimes used to form sparse topologies by passing
235
+ // overlapping "dial groups" (e.g. [[a,b],[b,c]] for a line). For shard-root
236
+ // resolution we must instead configure candidates consistently per connected
237
+ // component; otherwise a peer that appears in multiple groups would have its
238
+ // candidate set overwritten and pubsub/rpc can deadlock.
239
+ const mergedComponents = [];
240
+ for (const groupSet of this.connectedGroups) {
241
+ const intersections = [];
242
+ for (let i = 0; i < mergedComponents.length; i++) {
243
+ const existing = mergedComponents[i];
244
+ for (const peer of groupSet) {
245
+ if (existing.has(peer)) {
246
+ intersections.push(i);
247
+ break;
248
+ }
249
+ }
250
+ }
251
+ if (intersections.length === 0) {
252
+ mergedComponents.push(new Set(groupSet));
253
+ continue;
254
+ }
255
+ const union = new Set(groupSet);
256
+ intersections.sort((a, b) => b - a); // splice from end
257
+ for (const idx of intersections) {
258
+ for (const peer of mergedComponents[idx])
259
+ union.add(peer);
260
+ mergedComponents.splice(idx, 1);
261
+ }
262
+ mergedComponents.push(union);
263
+ }
264
+ const peerIndex = new Map();
265
+ for (let i = 0; i < this._peers.length; i++) {
266
+ peerIndex.set(this._peers[i], i);
267
+ }
268
+ for (const groupSet of mergedComponents) {
269
+ const group = [...groupSet].sort((a, b) => (peerIndex.get(a) ?? 0) - (peerIndex.get(b) ?? 0));
270
+ if (group.length === 0)
271
+ continue;
272
+ // Prefer routers that are directly connected to every peer in this component
273
+ // (e.g. the center node in a line). This avoids picking a root that some peers
274
+ // cannot dial directly, which can cause fanout join timeouts in sparse graphs.
275
+ const universalRouters = group.filter((p) => {
276
+ const n = adjacency.get(p);
277
+ if (!n)
278
+ return false;
279
+ for (const other of group) {
280
+ if (other === p)
281
+ continue;
282
+ if (!n.has(other))
283
+ return false;
284
+ }
285
+ return true;
286
+ });
287
+ // Keep a small deterministic router set so shard roots are always hosted.
288
+ // If no universally reachable peers exist, fall back to a bounded prefix.
289
+ const routers = universalRouters.length > 0
290
+ ? universalRouters.slice(0, 8)
291
+ : group.slice(0, Math.min(8, Math.max(1, Math.ceil(Math.log2(Math.max(1, group.length))))));
292
+ const routerHashes = routers
293
+ .map((p) => p?.services?.pubsub?.publicKeyHash ??
294
+ p?.identity?.publicKey?.hashcode?.())
295
+ .filter((x) => typeof x === "string" && x.length > 0);
296
+ if (routerHashes.length === 0)
297
+ continue;
298
+ for (const peer of group) {
299
+ const servicesAny = peer.services;
300
+ // Prefer the pubsub service helper so we also disable its auto-candidate
301
+ // mode (otherwise it can keep gossiping/expanding candidates and shard-root
302
+ // resolution can diverge in sparse topologies).
303
+ try {
304
+ servicesAny?.pubsub?.setTopicRootCandidates?.(routerHashes);
305
+ }
306
+ catch {
307
+ // ignore
308
+ }
309
+ // Also update the shared topic-root control plane directly for any
310
+ // services that are not wired through pubsub.
311
+ const fanoutPlane = servicesAny?.fanout?.topicRootControlPlane;
312
+ const pubsubPlane = servicesAny?.pubsub?.topicRootControlPlane;
313
+ const planes = [...new Set([fanoutPlane, pubsubPlane].filter(Boolean))];
314
+ for (const plane of planes) {
315
+ try {
316
+ plane.setTopicRootCandidates(routerHashes);
317
+ }
318
+ catch {
319
+ // ignore
320
+ }
321
+ }
322
+ }
323
+ // Ensure subsequent root resolution (and root hosting) uses the updated
324
+ // candidate set rather than any earlier auto-candidate cached mapping.
325
+ for (const peer of group) {
326
+ try {
327
+ peer?.services?.pubsub?.shardRootCache?.clear?.();
328
+ }
329
+ catch {
330
+ // ignore
331
+ }
332
+ }
333
+ // Bring up shard roots on router peers.
334
+ await Promise.all(routers.map(async (peer) => {
335
+ try {
336
+ await peer?.services?.pubsub?.hostShardRootsNow?.();
337
+ }
338
+ catch {
339
+ // ignore
340
+ }
341
+ }));
342
+ // If programs were opened before `connect()`, they may have subscribed under the
343
+ // initial local-only shard mapping. After updating candidates, force a best-effort
344
+ // reconcile so pubsub overlay joins + subscription announcements converge.
345
+ await Promise.all(group.map(async (peer) => {
346
+ try {
347
+ const pubsub = peer?.services?.pubsub;
348
+ pubsub?.shardRootCache?.clear?.();
349
+ await pubsub?.reconcileShardOverlays?.();
350
+ }
351
+ catch {
352
+ // ignore
353
+ }
354
+ }));
355
+ }
356
+ }
24
357
  async connect(groups) {
25
358
  await this.session.connect(groups?.map((x) => x.map((y) => y)));
26
359
  this.connectedGroups = groups
27
360
  ? groups.map((group) => new Set(group))
28
361
  : [new Set(this._peers)];
362
+ await this.configureFanoutShardRoots();
29
363
  return;
30
364
  }
365
+ /**
366
+ * Connect peers in a sparse random graph (bounded degree) to enable large-n sims.
367
+ *
368
+ * Returns the adjacency list (by index within each group).
369
+ */
370
+ async connectRandomGraph(opts) {
371
+ const groups = opts.groups ?? [this._peers];
372
+ const degree = Math.max(0, Math.floor(opts.degree));
373
+ const seed = Math.max(0, Math.floor(opts.seed ?? 1));
374
+ const concurrency = Math.max(1, Math.floor(opts.concurrency ?? 100));
375
+ const rng = mulberry32(seed);
376
+ const out = [];
377
+ for (const group of groups) {
378
+ const n = group.length;
379
+ if (n === 0) {
380
+ out.push([]);
381
+ continue;
382
+ }
383
+ const d = Math.min(degree, Math.max(0, n - 1));
384
+ const graph = buildRandomGraph(n, d, rng);
385
+ out.push(graph);
386
+ const tasks = [];
387
+ for (let a = 0; a < graph.length; a++) {
388
+ for (const b of graph[a]) {
389
+ if (b <= a)
390
+ continue;
391
+ const pa = group[a];
392
+ const pb = group[b];
393
+ tasks.push(() => pa.dial(pb));
394
+ }
395
+ }
396
+ await runWithConcurrency(tasks, concurrency);
397
+ }
398
+ this.connectedGroups = groups.map((group) => new Set(group));
399
+ await this.configureFanoutShardRoots();
400
+ return out;
401
+ }
31
402
  wrapPeerStartForReconnect() {
32
403
  const patchedKey = Symbol.for("@peerbit/test-session.reconnect-on-start");
33
404
  for (const peer of this._peers) {
@@ -72,8 +443,17 @@ export class TestSession {
72
443
  target: "neighbor",
73
444
  timeout: 10_000,
74
445
  }),
446
+ other.services.fanout.waitFor(peerHash, {
447
+ target: "neighbor",
448
+ timeout: 10_000,
449
+ }),
75
450
  ]);
76
451
  }));
452
+ // A stop/start can leave sharded pubsub/fanout in a stale state (old shard-root
453
+ // cache, roots no longer hosted on restarted routers, overlays not rejoined).
454
+ // Re-apply the session's deterministic shard-root configuration so program-level
455
+ // RPC/pubsub resumes working without each test having to manually reconnect.
456
+ await this.configureFanoutShardRoots();
77
457
  };
78
458
  }
79
459
  }
@@ -99,6 +479,10 @@ export class TestSession {
99
479
  await session.connect();
100
480
  // TODO types
101
481
  await waitForPeersStreams(...session.peers.map((x) => x.services.blocks));
482
+ // Sharded pubsub/fanout uses its own DirectStream protocols; ensure those
483
+ // neighbor streams are established before tests start opening programs.
484
+ await waitForPeersStreams(...session.peers.map((x) => x.services.pubsub));
485
+ await waitForPeersStreams(...session.peers.map((x) => x.services.fanout));
102
486
  return session;
103
487
  }
104
488
  static async disconnectedMock(n, options) {
@@ -138,6 +522,10 @@ export class TestSession {
138
522
  await session.connect();
139
523
  // TODO types
140
524
  await waitForPeersStreams(...session.peers.map((x) => x.services.blocks));
525
+ // Sharded pubsub/fanout uses its own DirectStream protocols; ensure those
526
+ // neighbor streams are established before tests start opening programs.
527
+ await waitForPeersStreams(...session.peers.map((x) => x.services.pubsub));
528
+ await waitForPeersStreams(...session.peers.map((x) => x.services.fanout));
141
529
  return session;
142
530
  }
143
531
  static async disconnected(n, options) {
@@ -151,6 +539,27 @@ export class TestSession {
151
539
  const libp2pOptions = {
152
540
  ...(o?.libp2p ?? {}),
153
541
  };
542
+ // `SSession.disconnected(n, opts)` can re-use the same `opts` object across many
543
+ // libp2p peers. Memoizing a single instance in a closure would accidentally
544
+ // share one FanoutTree (and TopicRootControlPlane) across the entire session.
545
+ // That breaks shard-root resolution (everyone would inherit the first peer's
546
+ // candidate set) and can deadlock fanout joins in disconnected tests.
547
+ const perPeer = new WeakMap();
548
+ const getOrCreatePerPeer = (c) => {
549
+ const key = c?.privateKey ?? c;
550
+ let existing = perPeer.get(key);
551
+ if (existing)
552
+ return existing;
553
+ const topicRootControlPlane = new TopicRootControlPlane();
554
+ const fanout = new FanoutTree(c, {
555
+ connectionManager: false,
556
+ topicRootControlPlane,
557
+ });
558
+ existing = { fanout, topicRootControlPlane };
559
+ perPeer.set(key, existing);
560
+ return existing;
561
+ };
562
+ const getOrCreateFanout = (c) => getOrCreatePerPeer(c).fanout;
154
563
  if (useMockSession) {
155
564
  libp2pOptions.transports = libp2pOptions.transports ?? transportsFast();
156
565
  libp2pOptions.addresses = {
@@ -168,7 +577,12 @@ export class TestSession {
168
577
  blocks: (c) => new DirectBlock(c, {
169
578
  directory: blocksDirectory,
170
579
  }),
171
- pubsub: (c) => new DirectSub(c, { canRelayMessage: true }),
580
+ pubsub: (c) => new TopicControlPlane(c, {
581
+ canRelayMessage: true,
582
+ topicRootControlPlane: getOrCreatePerPeer(c).topicRootControlPlane,
583
+ fanout: getOrCreatePerPeer(c).fanout,
584
+ }),
585
+ fanout: (c) => getOrCreateFanout(c),
172
586
  keychain: keychain(),
173
587
  ...libp2pOptions.services,
174
588
  }, /// TODO types
@@ -187,5 +601,85 @@ export class TestSession {
187
601
  ? Peerbit.create({ libp2p: x, directory: options[ix]?.directory })
188
602
  : Peerbit.create({ libp2p: x, directory: options?.directory })))));
189
603
  }
604
+ /**
605
+ * Create a large-n capable Peerbit session using an in-memory libp2p transport shim.
606
+ *
607
+ * This avoids TCP/noise costs and (optionally) skips expensive crypto verification.
608
+ *
609
+ * Notes:
610
+ * - By default this uses a no-op indexer to avoid spinning up sqlite for each peer.
611
+ * - If you pass `degree`, it will connect a bounded-degree random graph automatically.
612
+ */
613
+ static async disconnectedInMemory(n, opts = {}) {
614
+ const mockCrypto = opts.mockCrypto !== false;
615
+ const indexer = opts.indexer ?? (() => new NoopIndices());
616
+ const seed = Math.max(0, Math.floor(opts.seed ?? 1));
617
+ const perPeer = new Map();
618
+ const getOrCreatePerPeer = (c) => {
619
+ const key = c?.peerId?.toString?.() ?? "";
620
+ const existing = perPeer.get(key);
621
+ if (existing)
622
+ return existing;
623
+ const topicRootControlPlane = new TopicRootControlPlane();
624
+ const fanout = new SimFanoutTree(c, {
625
+ connectionManager: false,
626
+ random: mulberry32((seed >>> 0) ^ parseSimPeerIndex(c?.peerId)),
627
+ topicRootControlPlane,
628
+ }, mockCrypto);
629
+ const created = { fanout, topicRootControlPlane };
630
+ perPeer.set(key, created);
631
+ return created;
632
+ };
633
+ const inMemory = await InMemorySession.disconnected(n, {
634
+ start: false,
635
+ basePort: opts.basePort ?? 30_000,
636
+ networkOpts: opts.network,
637
+ services: {
638
+ blocks: (c) => new SimDirectBlock(c, {
639
+ directory: opts.directory ? path.join(opts.directory, "/blocks") : undefined,
640
+ canRelayMessage: true,
641
+ }, mockCrypto),
642
+ pubsub: (c) => new SimTopicControlPlane(c, (() => {
643
+ const { fanout, topicRootControlPlane } = getOrCreatePerPeer(c);
644
+ return {
645
+ canRelayMessage: true,
646
+ topicRootControlPlane,
647
+ fanout,
648
+ };
649
+ })(), mockCrypto),
650
+ fanout: (c) => getOrCreatePerPeer(c).fanout,
651
+ keychain: () =>
652
+ // Avoid libp2p keychain (datastore dependency) for large sims.
653
+ // Peerbit only requires the CryptoKeychain surface in these sessions.
654
+ new DefaultCryptoKeychain({ store: createStore() }),
655
+ },
656
+ });
657
+ const peers = (await Promise.all(inMemory.peers.map((x) => Peerbit.create({
658
+ libp2p: x,
659
+ directory: opts.directory,
660
+ indexer,
661
+ }))));
662
+ const sessionLike = {
663
+ peers: inMemory.peers,
664
+ connect: async (groups) => inMemory.connectFully(groups),
665
+ stop: async () => inMemory.stop(),
666
+ };
667
+ return new TestSession(sessionLike, peers, {
668
+ inMemory: { session: inMemory, network: inMemory.network },
669
+ });
670
+ }
671
+ static async connectedInMemory(n, opts = {}) {
672
+ const session = await TestSession.disconnectedInMemory(n, opts);
673
+ if (opts.degree != null) {
674
+ await session.connectRandomGraph({
675
+ degree: opts.degree,
676
+ seed: opts.seed,
677
+ concurrency: opts.concurrency,
678
+ });
679
+ return session;
680
+ }
681
+ await session.connect();
682
+ return session;
683
+ }
190
684
  }
191
685
  //# sourceMappingURL=session.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"session.js","sourceRoot":"","sources":["../../src/session.ts"],"names":[],"mappings":"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"}