mirror of
https://seed.radicle.dev/rad:z4V1sjrXqjvFdnCUbxPFqd5p4DtH5.git
synced 2026-10-29 08:10:59 +08:00
80 lines
2.4 KiB
TypeScript
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();
|
|
}
|