ken_nogi/PleasanterSystem/dbbackup/test/cleanupStale.test.js
Kenichiro NOGI ed33892f08 chore: 作業中の変更を整理しコミット(複数プロジェクト分)
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-02 11:09:50 +09:00

79 lines
2.7 KiB
JavaScript

"use strict";
const test = require("node:test");
const assert = require("node:assert/strict");
const fs = require("fs");
const os = require("os");
const path = require("path");
const { cleanupStaleLocalFiles } = require("../lib/cleanupStale");
function makeTmpDir() {
return fs.mkdtempSync(path.join(os.tmpdir(), "cleanup-stale-test-"));
}
function fakeLogger() {
const warnings = [];
return { warnings, warn: (msg) => warnings.push(msg) };
}
test("前回実行の残骸dmpファイルを削除する", () => {
const dir = makeTmpDir();
const staleFile = path.join(dir, "[host]postgres-20260715-020002.dmp014");
fs.writeFileSync(staleFile, "dummy");
const logger = fakeLogger();
const removed = cleanupStaleLocalFiles({ outputDir: dir, hostname: "host", logger });
assert.equal(fs.existsSync(staleFile), false);
assert.deepEqual(removed, [staleFile]);
assert.equal(logger.warnings.length, 1);
assert.match(logger.warnings[0], /前回実行の残骸ローカルファイルを削除/);
});
test("前回実行の残骸configアーカイブを削除する", () => {
const dir = makeTmpDir();
const staleFile = path.join(dir, "[host]config-20260715-020002.tar.gz");
fs.writeFileSync(staleFile, "dummy");
const logger = fakeLogger();
const removed = cleanupStaleLocalFiles({ outputDir: dir, hostname: "host", logger });
assert.equal(fs.existsSync(staleFile), false);
assert.deepEqual(removed, [staleFile]);
});
test("パターンに一致しないファイルは削除しない", () => {
const dir = makeTmpDir();
const keepFile = path.join(dir, "keep-me.txt");
fs.writeFileSync(keepFile, "dummy");
const logger = fakeLogger();
const removed = cleanupStaleLocalFiles({ outputDir: dir, hostname: "host", logger });
assert.equal(fs.existsSync(keepFile), true);
assert.deepEqual(removed, []);
assert.equal(logger.warnings.length, 0);
});
test("他ホスト名のファイルは削除しない", () => {
const dir = makeTmpDir();
const otherHostFile = path.join(dir, "[otherhost]postgres-20260715-020002.dmp000");
fs.writeFileSync(otherHostFile, "dummy");
const logger = fakeLogger();
const removed = cleanupStaleLocalFiles({ outputDir: dir, hostname: "host", logger });
assert.equal(fs.existsSync(otherHostFile), true);
assert.deepEqual(removed, []);
});
test("outputDirが存在しない場合は何もせず空配列を返す", () => {
const dir = path.join(os.tmpdir(), "cleanup-stale-does-not-exist-" + Date.now());
const logger = fakeLogger();
const removed = cleanupStaleLocalFiles({ outputDir: dir, hostname: "host", logger });
assert.deepEqual(removed, []);
});