Nothing to see here, move along meow
0

Configure Feed

Select the types of activity you want to include in your feed.

at main 3.3 kB View raw
1use lancer_core::fs::{BLOCK_SIZE_MIN, INODE_DIRECT_REFS}; 2use lancer_lancerfs::test_helpers::{setup_fs, with_fs}; 3 4#[test] 5fn write_8kb_read_back() { 6 with_fs(4096, |fs| { 7 let root = fs.root_block(); 8 let (_inode, block) = fs.create_file(root, b"testfile"); 9 10 let data: Vec<u8> = (0..8192u64).map(|i| (i % 251) as u8).collect(); 11 fs.write_file(block, 0, &data); 12 13 let read_back = fs.read_file(block, 0, 8192); 14 assert_eq!(read_back, data); 15 }); 16} 17 18#[test] 19fn write_at_nonzero_offset() { 20 with_fs(4096, |fs| { 21 let root = fs.root_block(); 22 let (_inode, block) = fs.create_file(root, b"offset_file"); 23 24 let prefix = vec![0xAAu8; 100]; 25 fs.write_file(block, 0, &prefix); 26 27 let payload = vec![0xBBu8; 200]; 28 fs.write_file(block, 100, &payload); 29 30 let full = fs.read_file(block, 0, 300); 31 assert_eq!(&full[..100], &prefix[..]); 32 assert_eq!(&full[100..300], &payload[..]); 33 }); 34} 35 36#[test] 37fn extend_past_direct_refs_triggers_indirect() { 38 let direct_capacity = INODE_DIRECT_REFS as u64 * BLOCK_SIZE_MIN as u64; 39 let total_size = direct_capacity + BLOCK_SIZE_MIN as u64; 40 41 with_fs(8192, |fs| { 42 let root = fs.root_block(); 43 let (_inode, block) = fs.create_file(root, b"big_file"); 44 45 let data: Vec<u8> = (0..total_size as usize).map(|i| (i % 199) as u8).collect(); 46 fs.write_file(block, 0, &data); 47 48 let read_back = fs.read_file(block, 0, data.len()); 49 assert_eq!(read_back, data); 50 }); 51} 52 53#[test] 54fn read_spanning_block_boundary() { 55 with_fs(4096, |fs| { 56 let root = fs.root_block(); 57 let (_inode, block) = fs.create_file(root, b"boundary_file"); 58 59 let block_size = BLOCK_SIZE_MIN as usize; 60 let data: Vec<u8> = (0..block_size * 2).map(|i| (i % 179) as u8).collect(); 61 fs.write_file(block, 0, &data); 62 63 let offset = block_size - 128; 64 let len = 256; 65 let read_back = fs.read_file(block, offset as u64, len); 66 assert_eq!(read_back, &data[offset..offset + len]); 67 }); 68} 69 70#[test] 71fn read_at_eof_returns_partial() { 72 with_fs(4096, |fs| { 73 let root = fs.root_block(); 74 let (_inode, block) = fs.create_file(root, b"partial_file"); 75 76 let data = vec![0xCDu8; 500]; 77 fs.write_file(block, 0, &data); 78 79 let read_back = fs.read_file(block, 400, 1000); 80 assert_eq!(read_back.len(), 100); 81 assert_eq!(read_back, &data[400..]); 82 }); 83} 84 85#[test] 86fn write_commit_read_survives_cache_flush() { 87 let mut fs = setup_fs(4096); 88 let root = fs.root_block(); 89 let (_inode, block) = fs.create_file(root, b"committed"); 90 91 let data: Vec<u8> = (0..4096u64).map(|i| (i % 131) as u8).collect(); 92 fs.write_file(block, 0, &data); 93 fs.commit(); 94 95 let read_back = fs.read_file(block, 0, 4096); 96 assert_eq!(read_back, data); 97} 98 99#[test] 100fn read_past_eof_returns_empty() { 101 with_fs(4096, |fs| { 102 let root = fs.root_block(); 103 let (_inode, block) = fs.create_file(root, b"empty_read"); 104 105 let data = vec![0xABu8; 100]; 106 fs.write_file(block, 0, &data); 107 108 let read_back = fs.read_file(block, 200, 100); 109 assert!(read_back.is_empty()); 110 }); 111}