This repository has been archived on 2026-10-10. You can view files and clone it, but cannot push or open issues or pull requests.
molotov/crates/molotov-bootstrap/tests/cleaner_test.rs

35 lines
1.5 KiB
Rust

// SPDX-License-Identifier: GPL-3.0-or-later
use molotov_bootstrap::cleaner::Cleaner;
use tempfile::tempdir;
#[test]
fn test_cleaner_purges_stale_versions_and_part_files() {
let temp = tempdir().unwrap();
let versions_dir = temp.path().join("versions");
let downloads_dir = temp.path().join("downloads");
std::fs::create_dir_all(&versions_dir).unwrap();
std::fs::create_dir_all(&downloads_dir).unwrap();
// Create current version and stale version
let current_ver = versions_dir.join("version-current");
let stale_ver = versions_dir.join("version-stale-1");
std::fs::create_dir_all(&current_ver).unwrap();
std::fs::create_dir_all(&stale_ver).unwrap();
std::fs::write(current_ver.join("libroblox.so"), b"ACTIVE_LIB").unwrap();
std::fs::write(stale_ver.join("libroblox.so"), b"STALE_LIB").unwrap();
// Create leftover .part file
let part_file = downloads_dir.join("download.apk.part");
std::fs::write(&part_file, b"DANGLING_PART").unwrap();
let cleaner = Cleaner::new(versions_dir, downloads_dir);
let report = cleaner.clean_stale_data("version-current").unwrap();
assert_eq!(report.purged_versions.len(), 1);
assert_eq!(report.purged_versions[0], "version-stale-1");
assert_eq!(report.purged_parts_count, 1);
assert!(report.reclaimed_bytes > 0);
assert!(!stale_ver.exists(), "Stale version must be deleted");
assert!(!part_file.exists(), "Dangling .part file must be deleted");
assert!(current_ver.exists(), "Active version must NOT be deleted");
}