mirror of
https://github.com/zoriya/flood.git
synced 2025-12-05 23:06:20 +00:00
72 lines
2.0 KiB
JavaScript
72 lines
2.0 KiB
JavaScript
const chalk = require('chalk');
|
|
const crypto = require('node:crypto');
|
|
const fs = require('node:fs');
|
|
const os = require('node:os');
|
|
const path = require('node:path');
|
|
const {spawn} = require('node:child_process');
|
|
|
|
const temporaryRuntimeDirectory = path.resolve(os.tmpdir(), `flood.test.${crypto.randomBytes(12).toString('hex')}`);
|
|
|
|
console.log(chalk.cyan(`Temporary runtime directory: ${temporaryRuntimeDirectory}\n`));
|
|
|
|
const rTorrentSession = path.join(temporaryRuntimeDirectory, '.session');
|
|
const rTorrentSocket = path.join(temporaryRuntimeDirectory, 'rtorrent.sock');
|
|
|
|
fs.mkdirSync(rTorrentSession, {recursive: true});
|
|
|
|
fs.writeFileSync(
|
|
`${temporaryRuntimeDirectory}/rtorrent.rc`,
|
|
`
|
|
execute.nothrow = rm,-rf,${rTorrentSession}/rtorrent.lock
|
|
directory.default.set = "${temporaryRuntimeDirectory}"
|
|
session.path.set = "${rTorrentSession}"
|
|
network.scgi.open_local = "${rTorrentSocket}"
|
|
`,
|
|
);
|
|
|
|
let argv = [];
|
|
argv.push('--rundir', temporaryRuntimeDirectory);
|
|
argv.push('--auth', 'none');
|
|
argv.push('--rtsocket', rTorrentSocket);
|
|
argv.push('--allowedpath', temporaryRuntimeDirectory);
|
|
argv.push('--rtorrent');
|
|
argv.push('--rtconfig', `${temporaryRuntimeDirectory}/rtorrent.rc`);
|
|
argv.push('--test');
|
|
argv = argv.concat(process.argv.slice(2));
|
|
|
|
let floodProcess;
|
|
|
|
const startFlood = () => {
|
|
if (floodProcess != null) {
|
|
return;
|
|
}
|
|
|
|
floodProcess = spawn('npm', ['run', 'start:development:server', '--'].concat(argv), {
|
|
cwd: path.join(__dirname, '..'),
|
|
stdio: 'inherit',
|
|
});
|
|
};
|
|
|
|
const closeProcesses = () => {
|
|
floodProcess.on('close', () => {
|
|
if (process.env.CI !== 'true') {
|
|
// TODO: This leads to test flakiness caused by ENOENT error
|
|
// NeDB provides no method to close database connection
|
|
fs.rmdirSync(temporaryRuntimeDirectory, {recursive: true});
|
|
}
|
|
});
|
|
|
|
floodProcess.kill('SIGTERM');
|
|
process.kill(Number(fs.readFileSync(`${temporaryRuntimeDirectory}/rtorrent.pid`).toString()));
|
|
};
|
|
|
|
startFlood();
|
|
|
|
process.on('SIGINT', () => {
|
|
process.exit();
|
|
});
|
|
|
|
process.on('exit', () => {
|
|
closeProcesses();
|
|
});
|