Add tests

This commit is contained in:
Alexander
2026-06-27 20:11:33 +02:00
parent 53e6dbaef0
commit 24fd81ff9e
12 changed files with 837 additions and 8 deletions
+75
View File
@@ -0,0 +1,75 @@
use std::io::Write;
use musicfs::origins::local::file_io::assemble_flac_read;
#[test]
fn assemble_flac_read_picture_header_region() {
let mut f = tempfile::NamedTempFile::new().unwrap();
let data: Vec<u8> = (0..100).collect();
f.write_all(&data).unwrap();
f.flush().unwrap();
let path = f.path();
let header = b"ABCD";
let pic_hdr = [0x86, 0x00, 0x00, 0x05];
let pic_ranges = [(10u64, 5u64)];
let real_audio_start = 50u64;
let result = assemble_flac_read(
path,
header,
&[pic_hdr],
&pic_ranges,
real_audio_start,
4,
4,
)
.unwrap();
assert_eq!(result, pic_hdr);
}
#[test]
fn assemble_flac_read_picture_data_region() {
let mut f = tempfile::NamedTempFile::new().unwrap();
let data: Vec<u8> = (0..100).collect();
f.write_all(&data).unwrap();
f.flush().unwrap();
let path = f.path();
let header = b"ABCD";
let pic_hdr = [0x86, 0x00, 0x00, 0x05];
let pic_ranges = [(10u64, 5u64)];
let real_audio_start = 50u64;
let result = assemble_flac_read(
path,
header,
&[pic_hdr],
&pic_ranges,
real_audio_start,
8,
5,
)
.unwrap();
assert_eq!(result, vec![10, 11, 12, 13, 14]);
}
#[test]
fn assemble_flac_read_full_virtual_layout() {
let mut f = tempfile::NamedTempFile::new().unwrap();
let data: Vec<u8> = (0..200).map(|i| i as u8).collect();
f.write_all(&data).unwrap();
f.flush().unwrap();
let path = f.path();
let header = vec![0xAA; 8];
let real_audio_start = 100u64;
let result = assemble_flac_read(path, &header, &[], &[], real_audio_start, 0, 18).unwrap();
let mut expected = vec![0xAA; 8];
expected.extend_from_slice(&(100..110).map(|i| i as u8).collect::<Vec<u8>>());
assert_eq!(result, expected);
}
+113
View File
@@ -0,0 +1,113 @@
use std::fs;
use std::io::Write;
use std::sync::{Arc, Mutex};
use fuser::INodeNo;
use musicfs::item::FileType;
use musicfs::origins::local::snapshot::{build_snapshot, fill_fileset};
#[test]
fn build_snapshot_empty_dir() {
let source = tempfile::tempdir().unwrap();
let dest = tempfile::tempdir().unwrap();
let snapshot = build_snapshot(source.path(), dest.path()).unwrap();
assert_eq!(snapshot.len(), 1);
assert!(snapshot.contains_key(&INodeNo::ROOT));
let root = &snapshot[&INodeNo::ROOT];
assert_eq!(root.inode, INodeNo::ROOT);
assert_eq!(root.parent_inode, INodeNo::ROOT);
assert_eq!(root.file_type, FileType::Directory);
}
#[test]
fn build_snapshot_flat_files() {
let source = tempfile::tempdir().unwrap();
let dest = tempfile::tempdir().unwrap();
let mut f = fs::File::create(source.path().join("a.txt")).unwrap();
f.write_all(b"content a").unwrap();
let mut f = fs::File::create(source.path().join("b.txt")).unwrap();
f.write_all(b"content b").unwrap();
let mut f = fs::File::create(source.path().join("c.txt")).unwrap();
f.write_all(b"content c").unwrap();
let snapshot = build_snapshot(source.path(), dest.path()).unwrap();
assert_eq!(snapshot.len(), 4);
assert!(snapshot.contains_key(&INodeNo::ROOT));
let file_entries: Vec<_> = snapshot
.values()
.filter(|item| item.file_type == FileType::File)
.collect();
assert_eq!(file_entries.len(), 3);
for file_entry in file_entries {
assert_eq!(file_entry.parent_inode, INodeNo::ROOT);
}
}
#[test]
fn build_snapshot_nested_dirs() {
let source = tempfile::tempdir().unwrap();
let dest = tempfile::tempdir().unwrap();
fs::create_dir(source.path().join("subdir")).unwrap();
let mut f = fs::File::create(source.path().join("subdir").join("file.txt")).unwrap();
f.write_all(b"nested content").unwrap();
let snapshot = build_snapshot(source.path(), dest.path()).unwrap();
assert!(snapshot.contains_key(&INodeNo::ROOT));
let subdir_entry = snapshot
.values()
.find(|item| item.name == "subdir" && item.file_type == FileType::Directory)
.expect("subdir not found");
let file_entry = snapshot
.values()
.find(|item| item.name == "file.txt" && item.file_type == FileType::File)
.expect("file.txt not found");
assert_eq!(subdir_entry.parent_inode, INodeNo::ROOT);
assert_eq!(file_entry.parent_inode, INodeNo::ROOT);
}
#[test]
fn fill_fileset_removes_deleted() {
let source = tempfile::tempdir().unwrap();
let dest = tempfile::tempdir().unwrap();
let mut f = fs::File::create(source.path().join("file1.txt")).unwrap();
f.write_all(b"content 1").unwrap();
let mut f = fs::File::create(source.path().join("file2.txt")).unwrap();
f.write_all(b"content 2").unwrap();
let initial_snapshot = build_snapshot(source.path(), dest.path()).unwrap();
let map = Arc::new(Mutex::new(initial_snapshot));
assert_eq!(map.lock().unwrap().len(), 3);
fs::remove_file(source.path().join("file1.txt")).unwrap();
fill_fileset(&map, source.path(), dest.path());
let final_map = map.lock().unwrap();
assert_eq!(final_map.len(), 2);
assert!(final_map.contains_key(&INodeNo::ROOT));
let remaining_files: Vec<_> = final_map
.values()
.filter(|item| item.file_type == FileType::File)
.collect();
assert_eq!(remaining_files.len(), 1);
assert_eq!(remaining_files[0].name, "file2.txt");
}