Fork Horse repository, listed by its owner. Publisher snapshot.

packages/forkhorse-gatekeeper/test/host-connection.test.ts

Snapshot at 34e3175

Containing directory

1,863 bytes · typescriptView raw
1import assert from "node:assert/strict";
2import { test } from "node:test";
3import { hostConnection } from "../src/host-connection.ts";
4import type { SidebarUi } from "../src/ui-types.ts";
5
6test("host getter reacquires on a healthy port and replaces only a failed host session", async () => {
7  let connects = 0,
8    disposed = 0,
9    failed = false;
10  const ui = {} as SidebarUi;
11  const connection = hostConnection(() => {
12    connects++;
13    const generation = connects;
14    return {
15      host: {
16        get ui() {
17          if (generation === 1 && failed)
18            return Promise.reject(new Error("Peer closed MessagePort connection."));
19          return Promise.resolve(ui);
20        },
21      },
22      dispose() {
23        disposed++;
24      },
25    };
26  });
27  assert.equal(await connection.acquireUi(), ui);
28  assert.equal(await connection.acquireUi(), ui);
29  assert.equal(connects, 1);
30  failed = true;
31  assert.equal(await connection.acquireUi(), ui);
32  assert.equal(connects, 2);
33  assert.equal(disposed, 1);
34  assert.equal(await connection.acquireUi(), ui);
35  assert.equal(connects, 2);
36  connection.dispose();
37  assert.equal(disposed, 2);
38});
39
40for (const dispose of [false, true])
41  test(`a late getter rejection cannot renew a ${dispose ? "disposed" : "retired"} connection`, async () => {
42    let connects = 0,
43      active = true,
44      reject!: (error: Error) => void;
45    const pending = new Promise<SidebarUi>((_resolve, fail) => {
46      reject = fail;
47    });
48    const connection = hostConnection(() => {
49      connects++;
50      return { host: { ui: pending }, dispose() {} };
51    });
52    const acquiring = connection.acquireUi(() => active);
53    if (dispose) connection.dispose();
54    else active = false;
55    reject(new Error("Late closed port"));
56    await assert.rejects(acquiring, /Late closed port/);
57    assert.equal(connects, 1);
58  });
59