Nothing to see here, move along meow
1use lancer_core::fs::BLOCK_SIZE_MIN;
2use lancer_lancerfs::test_helpers::setup_fs;
3
4#[test]
5fn writing_600_blocks_forces_eviction_data_survives() {
6 let mut fs = setup_fs(8192);
7 let root = fs.root_block();
8 let (_inode, block) = fs.create_file(root, b"bigfile");
9
10 let block_size = BLOCK_SIZE_MIN as usize;
11 let total_blocks = 600usize;
12 let data: Vec<u8> = (0..total_blocks * block_size)
13 .map(|i| ((i / block_size * 17 + i % block_size) % 251) as u8)
14 .collect();
15
16 fs.write_file(block, 0, &data);
17 fs.commit();
18
19 let read_back = fs.read_file(block, 0, data.len());
20 assert_eq!(read_back.len(), data.len());
21 (0..total_blocks).for_each(|b| {
22 let start = b * block_size;
23 let end = start + block_size;
24 assert_eq!(
25 &read_back[start..end],
26 &data[start..end],
27 "mismatch at block {}",
28 b
29 );
30 });
31}
32
33#[test]
34fn dirty_eviction_under_full_cache() {
35 let mut fs = setup_fs(8192);
36 let root = fs.root_block();
37 let (_inode, block) = fs.create_file(root, b"dirtyfile");
38
39 let block_size = BLOCK_SIZE_MIN as usize;
40 let total_blocks = 520usize;
41 let data: Vec<u8> = (0..total_blocks * block_size)
42 .map(|i| ((i / block_size * 31 + i % block_size) % 239) as u8)
43 .collect();
44
45 fs.write_file(block, 0, &data);
46
47 let read_back = fs.read_file(block, 0, data.len());
48 assert_eq!(read_back.len(), data.len());
49 assert_eq!(read_back, data);
50}
51
52#[test]
53fn hot_set_survives_cold_eviction() {
54 let mut fs = setup_fs(8192);
55 let root = fs.root_block();
56 let (_inode, block) = fs.create_file(root, b"hotcold");
57
58 let block_size = BLOCK_SIZE_MIN as usize;
59 let total_blocks = 600usize;
60 let data: Vec<u8> = (0..total_blocks * block_size)
61 .map(|i| ((i / block_size * 13 + i % block_size) % 241) as u8)
62 .collect();
63
64 fs.write_file(block, 0, &data);
65 fs.commit();
66
67 (0..5u32).for_each(|_| {
68 let hot_start = 500 * block_size;
69 let hot_end = 511 * block_size;
70 let hot_data = fs.read_file(block, hot_start as u64, hot_end - hot_start);
71 assert_eq!(hot_data, &data[hot_start..hot_end]);
72 });
73
74 let full_read = fs.read_file(block, 0, data.len());
75 assert_eq!(full_read.len(), data.len());
76 assert_eq!(full_read, data);
77}