Files
radicle-explorer/tests/support/globalSetup.ts
T
Sebastian Martinez 1ef0f9dfd1 Add issue embeds
Signed-off-by: Sebastian Martinez <me@sebastinez.dev>
2023-09-27 16:40:49 +02:00

80 lines
2.4 KiB
TypeScript

import * as FsSync from "node:fs";
import * as Path from "node:path";
import {
assertRadInstalled,
promptWorkspaceRemoval,
removeWorkspace,
tmpDir,
} from "@tests/support/support.js";
import {
createCobsFixture,
createMarkdownFixture,
createSourceBrowsingFixture,
defaultHttpdPort,
gitOptions,
startPalmHttpd,
} from "@tests/support/fixtures.js";
import { createPeerManager } from "@tests/support/peerManager.js";
import { killAllProcesses } from "@tests/support/process.js";
export default async function globalSetup(): Promise<() => void> {
try {
await assertRadInstalled();
} catch (error) {
console.error(error);
console.log("");
console.log("To download the required test binaries, run:");
console.log(" 👉 ./scripts/install-binaries");
console.log("");
process.exit(1);
}
if (!process.env.SKIP_FIXTURE_CREATION) {
console.log("Setting up global test environment");
if (!process.env.CI) {
await promptWorkspaceRemoval();
}
await removeWorkspace();
// Workaround for fixing MaxListenersExceededWarning.
// Since every prefixOutput stream adds stream listeners that don't autoClose.
// TODO: We still seem to have some descriptors left open when running vitest, which we should handle.
const peerManager = await createPeerManager({
dataDir: Path.resolve(Path.join(tmpDir, "peers")),
outputLog: FsSync.createWriteStream(
Path.join(tmpDir, "peerManager.log"),
).setMaxListeners(16),
});
const palm = await peerManager.startPeer({
name: "palm",
gitOptions: gitOptions["alice"],
});
await palm.startHttpd(defaultHttpdPort);
await palm.startNode({ policy: "track", scope: "all", alias: "palm" });
try {
await createSourceBrowsingFixture(peerManager, palm);
console.log("Creating source-browsing fixture");
await createMarkdownFixture(palm);
console.log("Creating markdown fixture");
await createCobsFixture(palm);
console.log("Creating cobs fixture");
} catch (error) {
console.log("");
console.log("Not able to create the required fixtures.");
console.log("Make sure you are not using binaries compiled for release.");
console.log("");
console.log(error);
console.log("");
process.exit(1);
}
console.log("Running tests");
await palm.stopNode();
} else {
await startPalmHttpd(defaultHttpdPort);
}
return () => killAllProcesses();
}