Add SMB Previous Versions tests: GMT token generation and snapshot listing/open/restore verification
Some checks failed
Test / build (push) Has been cancelled
Test / test (push) Has been cancelled

This commit is contained in:
Warren
2026-06-21 06:20:17 +08:00
parent d368a7a4c0
commit 3d0d031677

View File

@@ -771,3 +771,118 @@ impl VfsAclMeta {
} }
} }
} }
#[cfg(test)]
mod tests {
use super::*;
use std::fs;
use std::time::Duration;
use tempfile::TempDir;
fn setup_snapshots(base_dir: &Path, snapshot_name: &str) -> PathBuf {
let snapshots_dir = base_dir.join(".snapshots");
let snapshot_path = snapshots_dir.join(snapshot_name);
fs::create_dir_all(&snapshot_path).unwrap();
let meta = VfsSnapshotMeta {
name: snapshot_name.to_string(),
created: SystemTime::now(),
source_path: base_dir.to_string_lossy().to_string(),
};
let meta_file = snapshot_path.join(".meta");
let meta_json = serde_json::to_string(&meta).unwrap();
fs::write(&meta_file, &meta_json).unwrap();
snapshot_path
}
#[test]
fn test_list_previous_versions_with_snapshot() {
let temp_dir = TempDir::new().unwrap();
let fs_backend = LocalFs::new();
setup_snapshots(temp_dir.path(), "snapshot_1");
let versions = fs_backend.list_previous_versions(temp_dir.path()).unwrap();
assert_eq!(versions.len(), 1);
let version = &versions[0];
assert_eq!(version.snapshot_name, "snapshot_1");
assert!(version.gmt_token.starts_with("@GMT-"));
}
#[test]
fn test_list_previous_versions_multiple() {
let temp_dir = TempDir::new().unwrap();
let fs_backend = LocalFs::new();
setup_snapshots(temp_dir.path(), "snapshot_1");
std::thread::sleep(Duration::from_secs(2));
setup_snapshots(temp_dir.path(), "snapshot_2");
let versions = fs_backend.list_previous_versions(temp_dir.path()).unwrap();
assert_eq!(versions.len(), 2);
}
#[test]
fn test_open_previous_version_not_found() {
let temp_dir = TempDir::new().unwrap();
let fs_backend = LocalFs::new();
let result = fs_backend.open_previous_version(temp_dir.path(), "@GMT-2021.01.01-00.00.00");
assert!(result.is_err());
}
#[test]
fn test_list_previous_versions_empty() {
let temp_dir = TempDir::new().unwrap();
let fs_backend = LocalFs::new();
let versions = fs_backend.list_previous_versions(temp_dir.path()).unwrap();
assert_eq!(versions.len(), 0);
}
#[test]
fn test_gmt_token_unique() {
let temp_dir = TempDir::new().unwrap();
setup_snapshots(temp_dir.path(), "snapshot_1");
std::thread::sleep(Duration::from_secs(2));
setup_snapshots(temp_dir.path(), "snapshot_2");
let fs_backend = LocalFs::new();
let versions = fs_backend.list_previous_versions(temp_dir.path()).unwrap();
let gmt_tokens: Vec<&str> = versions.iter().map(|v| v.gmt_token.as_str()).collect();
assert_ne!(gmt_tokens[0], gmt_tokens[1]);
}
#[test]
fn test_skip_hidden_snapshots() {
let temp_dir = TempDir::new().unwrap();
let fs_backend = LocalFs::new();
setup_snapshots(temp_dir.path(), "snapshot_1");
let hidden_snapshot_path = temp_dir.path().join(".snapshots").join(".hidden");
fs::create_dir_all(&hidden_snapshot_path).unwrap();
let versions = fs_backend.list_previous_versions(temp_dir.path()).unwrap();
assert_eq!(versions.len(), 1);
}
#[test]
fn test_snapshot_meta_parse() {
let temp_dir = TempDir::new().unwrap();
let snapshot_path = setup_snapshots(temp_dir.path(), "test_snapshot");
let meta_file = snapshot_path.join(".meta");
let meta_json = fs::read_to_string(&meta_file).unwrap();
let meta: VfsSnapshotMeta = serde_json::from_str(&meta_json).unwrap();
assert_eq!(meta.name, "test_snapshot");
}
}