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 与旧扁平模块
This commit is contained in:
1 parent
d978a13a83
commit
0df07ad0ae
48 files changed
+5813
-6812
No files matched your search
@@ -0,0 +1,96 @@
|
||||
# ============================================================================
|
||||
# 账本与冷却模块测试(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"
|
||||
}
|
||||
Reference in new issue
Block a user