mirror of
https://github.com/block/buzz.git
synced 2026-08-18 06:50:31 +02:00
+1








14fba21e57
Signed-off-by: tlongwell-block <109685178+tlongwell-block@users.noreply.github.com> Signed-off-by: npub1jh9wn95s0472h86ahapupaf7m6kx4v9sx2n0atj2hltcfer8k06s5n3pyf <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co> Signed-off-by: Tyler Longwell <tlongwell@block.xyz> Signed-off-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co> Signed-off-by: npub17jjz49l9jjmhhk7cac63j8yt9z555n9cw8vk7v5jz4vzw4ppld5qgj57cc <f4a42a97e594b77bdbd8ee35191c8b28a94a4cb871d96f32921558275421fb68@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Eva <011987e296fd5006292d2f930b574be47c7801048d1983c46c425d3c95f0cffd@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Mari <95cae996907d7cab9f5dbf43c0f53edeac6ab0b032a6feae4abfd784e467b3f5@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Sami <f4a42a97e594b77bdbd8ee35191c8b28a94a4cb871d96f32921558275421fb68@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Max <d8473ee32b973aa31a21a65adddcc4b69cc2a8a4dee8121ecd51926e0cddbc02@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Quinn <96f056ad5f2305c8ddf637dc65d048aa4c12d7daeb8867690e34fca46b0ef64c@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Dawn <c6237ef84fa537c78dcee78efd2d4e59f728859c7f194da42ac51ededfa0be05@sprout-oss.stage.blox.sqprod.co> Co-authored-by: Tyler Longwell <tlongwell@block.xyz> Co-authored-by: Sami <sami@sprout-oss.stage.blox.sqprod.co> Co-authored-by: npub1t2tgm7d8f995uqvmnm8h88sg3wnpp9a5xysjf6dg3tjmgt3ltulqdp8ehr <5a968df9a7494b4e019b9ecf739e088ba61097b4312124e9a88ae5b42e3f5f3e@sprout-oss.stage.blox.sqprod.co>
83 lines
2.9 KiB
TypeScript
83 lines
2.9 KiB
TypeScript
import { request } from "@playwright/test";
|
|
|
|
const tylerPubkey =
|
|
"e5ebc6cdb579be112e336cc319b5989b4bb6af11786ea90dbe52b5f08d741b34";
|
|
const isCi = Boolean(process.env.CI);
|
|
// Multi-tenant: the relay resolves each request's tenant from its Host header
|
|
// against the communities host map and fails closed (404) on an unmapped host.
|
|
// The seed maps host 'localhost:3000' (matching the relay's RELAY_URL) — and
|
|
// `localhost` != `127.0.0.1` to normalize_host — so this readiness check must
|
|
// hit `localhost:3000`, not `127.0.0.1:3000`, or every /query 404s. This also
|
|
// matches the rest of the desktop e2e suite (e2eBridge.ts / bridge.ts), which
|
|
// already default to localhost.
|
|
const relayBaseUrl = process.env.BUZZ_E2E_RELAY_URL ?? "http://localhost:3000";
|
|
const seedTimeoutMs = Number.parseInt(
|
|
process.env.BUZZ_E2E_SEED_TIMEOUT_MS ?? (isCi ? "60000" : "25000"),
|
|
10,
|
|
);
|
|
const requestTimeoutMs = Number.parseInt(
|
|
process.env.BUZZ_E2E_SEED_REQUEST_TIMEOUT_MS ?? (isCi ? "5000" : "2000"),
|
|
10,
|
|
);
|
|
const retryDelayMs = Number.parseInt(
|
|
process.env.BUZZ_E2E_SEED_RETRY_DELAY_MS ?? "1000",
|
|
10,
|
|
);
|
|
|
|
function delay(ms: number) {
|
|
return new Promise((resolve) => {
|
|
setTimeout(resolve, ms);
|
|
});
|
|
}
|
|
|
|
export async function assertRelaySeeded() {
|
|
const context = await request.newContext();
|
|
const deadline = Date.now() + seedTimeoutMs;
|
|
let lastFailure = "no checks attempted";
|
|
|
|
try {
|
|
while (Date.now() < deadline) {
|
|
try {
|
|
// The setup script inserts test data directly into the DB tables.
|
|
// The relay reconciles these at startup by emitting kind:39000/39002
|
|
// events. Query kind:39000 (channel metadata) via the HTTP bridge
|
|
// and check for the expected "general" channel.
|
|
const response = await context.post(`${relayBaseUrl}/query`, {
|
|
headers: {
|
|
"X-Pubkey": tylerPubkey,
|
|
"Content-Type": "application/json",
|
|
},
|
|
data: [{ kinds: [39000], limit: 200 }],
|
|
timeout: requestTimeoutMs,
|
|
});
|
|
|
|
if (!response.ok()) {
|
|
lastFailure = `HTTP ${response.status()} from POST /query`;
|
|
} else {
|
|
const events = (await response.json()) as Array<{
|
|
tags: string[][];
|
|
}>;
|
|
const hasGeneral = events.some((event) =>
|
|
event.tags.some((tag) => tag[0] === "name" && tag[1] === "general"),
|
|
);
|
|
if (hasGeneral) {
|
|
return;
|
|
}
|
|
lastFailure = `seed data: got ${events.length} channels but no "general" — relay may still be reconciling`;
|
|
}
|
|
} catch (error) {
|
|
lastFailure =
|
|
error instanceof Error ? error.message : "unknown relay check error";
|
|
}
|
|
|
|
await delay(retryDelayMs);
|
|
}
|
|
|
|
throw new Error(
|
|
`Relay test data was not ready after ${seedTimeoutMs}ms. Last check: ${lastFailure}. Start the relay and run scripts/setup-desktop-test-data.sh.`,
|
|
);
|
|
} finally {
|
|
await context.dispose();
|
|
}
|
|
}
|