Files
MediaOrganizer/tests/cases/storage/ledger.sh
T
Shuery 0df07ad0ae refactor: 迁移至 bashly CLI 与功能域模块结构
- CLI 定义迁移至 src/bashly.yml(bashly 1.4 生成参数解析),入口收敛为 src/root_command.sh
- 源码按功能域重组:config/storage/integrate/media/pipeline,消除扁平散落
- 新增零依赖测试框架 tests/(123 用例)与 CI 流水线(lint + test + build + 产物一致性)
- build.sh 支持版本单一来源注入与 --check 产物校验;新增 lint.sh(bash -n + shellcheck 零容忍)
- 删除旧单文件 media_organizer.sh 与旧扁平模块
2026-08-14 22:41:28 +08:00

97 lines
2.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# ============================================================================
# 账本与冷却模块测试(src/lib/ledger.sh)
# ============================================================================
setup() {
TEST_DIR="$(mktemp -d)"
CACHE_DIR="$TEST_DIR/cache"
DRY_RUN=false
FAIL_RETRY_COOLDOWN_HOURS=1
LEDGER_LINKED=()
LEDGER_INODE=()
COOLDOWN_MAP=()
CORRECTIONS_MAP=()
}
teardown() {
rm -rf "$TEST_DIR"
}
# ledger_mark_linked + ledger_is_linked:标记后判定已链接
test_ledger_mark_and_is_linked() {
local src="$TEST_DIR/a.mkv" dest="$TEST_DIR/dest/a.mkv"
mkdir -p "$TEST_DIR/dest"
echo data >"$src"
ln "$src" "$dest"
ledger_mark_linked "$src" "$dest"
assert_success ledger_is_linked "$src"
}
# ledger_is_linked:目标被删 → 失效(重新识别)
test_ledger_is_linked_invalid_when_dest_deleted() {
local src="$TEST_DIR/a.mkv" dest="$TEST_DIR/dest/a.mkv"
mkdir -p "$TEST_DIR/dest"
echo data >"$src"
ln "$src" "$dest"
ledger_mark_linked "$src" "$dest"
rm -f "$dest"
assert_failure ledger_is_linked "$src"
}
# ledger_is_linked:未标记 → 未链接
test_ledger_is_linked_unmarked() {
local src="$TEST_DIR/a.mkv"
echo data >"$src"
assert_failure ledger_is_linked "$src"
}
# cooldown_set + cooldown_active:冷却期内判定
test_cooldown_set_and_active() {
local src="$TEST_DIR/a.mkv"
echo data >"$src"
cooldown_set "$src" "request_failed"
assert_success cooldown_active "$src"
}
# cooldown_active:源文件消失 → 不冷却(允许重试)
test_cooldown_inactive_when_src_gone() {
local src="$TEST_DIR/a.mkv"
echo data >"$src"
cooldown_set "$src" "request_failed"
rm -f "$src"
assert_failure cooldown_active "$src"
}
# cooldown_active:过期 → 不冷却
test_cooldown_inactive_when_expired() {
local src="$TEST_DIR/a.mkv"
echo data >"$src"
COOLDOWN_MAP["$src"]=$(($(date +%s) - 10))
assert_failure cooldown_active "$src"
}
# ledger_flush:落盘 linked.json 并可重新加载
test_ledger_flush_roundtrip() {
local src="$TEST_DIR/a.mkv" dest="$TEST_DIR/dest/a.mkv"
mkdir -p "$TEST_DIR/dest"
echo data >"$src"
ln "$src" "$dest"
ledger_mark_linked "$src" "$dest"
ledger_flush
assert_file_exists "$CACHE_DIR/media_organizer/linked.json"
LEDGER_LINKED=()
LEDGER_INODE=()
ledger_load
assert_success ledger_is_linked "$src"
}
# ledger_flush:干运行零持久化副作用
test_ledger_flush_skipped_in_dry_run() {
local src="$TEST_DIR/a.mkv"
echo data >"$src"
ledger_mark_linked "$src" "$TEST_DIR/dest.mkv"
DRY_RUN=true
ledger_flush
assert_file_absent "$CACHE_DIR/media_organizer/linked.json"
}