real-debrid-downloader/tests/package-log.test.ts

83 lines
2.6 KiB
TypeScript

import fs from "node:fs";
import os from "node:os";
import path from "node:path";
import { afterEach, describe, expect, it } from "vitest";
import { ensurePackageLog, getPackageLogPath, initPackageLogs, logPackageEvent, shutdownPackageLogs } from "../src/main/package-log";
const tempDirs: string[] = [];
afterEach(() => {
shutdownPackageLogs();
for (const dir of tempDirs.splice(0)) {
fs.rmSync(dir, { recursive: true, force: true });
}
});
describe("package-log", () => {
it("creates a persistent package log file", () => {
const baseDir = fs.mkdtempSync(path.join(os.tmpdir(), "rd-plog-"));
tempDirs.push(baseDir);
initPackageLogs(baseDir);
const logPath = ensurePackageLog({
packageId: "pkg-1",
name: "Test Paket",
outputDir: "C:\\downloads\\Test Paket",
extractDir: "C:\\extract\\Test Paket"
});
expect(logPath).not.toBeNull();
expect(fs.existsSync(logPath!)).toBe(true);
const content = fs.readFileSync(logPath!, "utf8");
expect(content).toContain("Paket-Log Start");
expect(content).toContain("Test Paket");
});
it("writes detail events into the package log", async () => {
const baseDir = fs.mkdtempSync(path.join(os.tmpdir(), "rd-plog-"));
tempDirs.push(baseDir);
initPackageLogs(baseDir);
ensurePackageLog({
packageId: "pkg-2",
name: "Detail Paket",
outputDir: "C:\\downloads\\Detail Paket",
extractDir: "C:\\extract\\Detail Paket"
});
logPackageEvent("pkg-2", "INFO", "Passwort-Versuch", {
archive: "episode.part1.rar",
attempt: "1/3",
password: "\"secret\""
});
await new Promise((resolve) => setTimeout(resolve, 350));
const logPath = getPackageLogPath("pkg-2");
expect(logPath).not.toBeNull();
const content = fs.readFileSync(logPath!, "utf8");
expect(content).toContain("Passwort-Versuch");
expect(content).toContain("archive=episode.part1.rar");
expect(content).toContain("password=\"secret\"");
});
it("keeps traversal-like package ids inside the package log directory", () => {
const baseDir = fs.mkdtempSync(path.join(os.tmpdir(), "rd-plog-"));
tempDirs.push(baseDir);
initPackageLogs(baseDir);
const logPath = ensurePackageLog({
packageId: "..\\..\\outside",
name: "Traversal Paket",
outputDir: "C:\\downloads\\Traversal Paket",
extractDir: "C:\\extract\\Traversal Paket"
});
expect(logPath).not.toBeNull();
const logsDir = path.resolve(path.join(baseDir, "package-logs"));
const resolvedLogPath = path.resolve(logPath!);
expect(resolvedLogPath === logsDir || resolvedLogPath.startsWith(`${logsDir}${path.sep}`)).toBe(true);
});
});