test(harness): seedPeer helpers — peer pair + unreachable peer
This commit is contained in:
@@ -0,0 +1,57 @@
|
|||||||
|
import crypto from 'node:crypto';
|
||||||
|
import type { SpawnedInstance } from './twoInstanceHarness.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Install matching federation_peers rows on both instances pointing at each other,
|
||||||
|
* with a single shared HMAC secret. Returns the secret for tests that need to sign
|
||||||
|
* raw S2S requests directly.
|
||||||
|
*/
|
||||||
|
export async function peerInstances(
|
||||||
|
a: SpawnedInstance,
|
||||||
|
b: SpawnedInstance,
|
||||||
|
): Promise<string> {
|
||||||
|
const sharedSecret = crypto.randomBytes(32).toString('hex');
|
||||||
|
|
||||||
|
const seedOn = async (target: SpawnedInstance, peerOrigin: string, peerInstanceName: string) => {
|
||||||
|
const res = await fetch(`${target.origin}/api/admin/test/seed-peer`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
origin: peerOrigin,
|
||||||
|
hmacSecret: sharedSecret,
|
||||||
|
status: 'active',
|
||||||
|
instanceName: peerInstanceName,
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
if (!res.ok) {
|
||||||
|
const txt = await res.text();
|
||||||
|
throw new Error(`seed-peer failed on ${target.origin}: ${res.status} ${txt}`);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
await seedOn(a, b.origin, b.domain);
|
||||||
|
await seedOn(b, a.origin, a.domain);
|
||||||
|
|
||||||
|
return sharedSecret;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Seed an unreachable peer pointing at a guaranteed-unbound port. Returns the origin string.
|
||||||
|
* Used by tests #9 and #17 to provoke `error: 'unreachable'` without spawning a real instance.
|
||||||
|
*/
|
||||||
|
export async function seedUnreachablePeer(target: SpawnedInstance): Promise<string> {
|
||||||
|
const fakeOrigin = 'http://127.0.0.1:1';
|
||||||
|
const sharedSecret = crypto.randomBytes(32).toString('hex');
|
||||||
|
const res = await fetch(`${target.origin}/api/admin/test/seed-peer`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: { 'Content-Type': 'application/json' },
|
||||||
|
body: JSON.stringify({
|
||||||
|
origin: fakeOrigin,
|
||||||
|
hmacSecret: sharedSecret,
|
||||||
|
status: 'active',
|
||||||
|
instanceName: 'unreachable.test',
|
||||||
|
}),
|
||||||
|
});
|
||||||
|
if (!res.ok) throw new Error(`seedUnreachablePeer failed: ${res.status}`);
|
||||||
|
return fakeOrigin;
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user