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.2 kB View raw
1use lancer_core::fs::{INODE_INLINE_MAX, InodeFlags}; 2use lancer_lancerfs::test_helpers::setup_fs; 3 4#[test] 5fn small_write_stays_inline() { 6 let mut fs = setup_fs(4096); 7 let root = fs.root_block(); 8 let (_inode, block) = fs.create_file(root, b"small"); 9 10 let alloc_before = fs.count_allocated_blocks(); 11 12 let data = vec![0xABu8; 100]; 13 let updated = fs.write_file(block, 0, &data); 14 15 assert!(updated.flags & InodeFlags::INLINE != 0); 16 assert_eq!(updated.size, 100); 17 assert_eq!(updated.block_count, 0); 18 19 let alloc_after = fs.count_allocated_blocks(); 20 assert_eq!( 21 alloc_before, alloc_after, 22 "inline write must not allocate a data block" 23 ); 24 25 let read_back = fs.read_file(block, 0, 100); 26 assert_eq!(read_back, data); 27} 28 29#[test] 30fn max_inline_write() { 31 let mut fs = setup_fs(4096); 32 let root = fs.root_block(); 33 let (_inode, block) = fs.create_file(root, b"maxinline"); 34 35 let data: Vec<u8> = (0..INODE_INLINE_MAX).map(|i| (i % 251) as u8).collect(); 36 let updated = fs.write_file(block, 0, &data); 37 38 assert!(updated.flags & InodeFlags::INLINE != 0); 39 assert_eq!(updated.size, INODE_INLINE_MAX as u64); 40 41 let read_back = fs.read_file(block, 0, INODE_INLINE_MAX); 42 assert_eq!(read_back, data); 43} 44 45#[test] 46fn exceeding_inline_migrates_to_blocks() { 47 let mut fs = setup_fs(4096); 48 let root = fs.root_block(); 49 let (_inode, block) = fs.create_file(root, b"migrated"); 50 51 let alloc_before = fs.count_allocated_blocks(); 52 53 let data: Vec<u8> = (0..INODE_INLINE_MAX + 100) 54 .map(|i| (i % 239) as u8) 55 .collect(); 56 let updated = fs.write_file(block, 0, &data); 57 58 assert!(updated.flags & InodeFlags::INLINE == 0); 59 assert_eq!(updated.size, data.len() as u64); 60 assert!(updated.block_count > 0); 61 62 let alloc_after = fs.count_allocated_blocks(); 63 assert!( 64 alloc_after > alloc_before, 65 "migration to blocks must allocate at least one data block: before={alloc_before}, after={alloc_after}" 66 ); 67 68 let read_back = fs.read_file(block, 0, data.len()); 69 assert_eq!(read_back, data); 70} 71 72#[test] 73fn inline_write_at_offset() { 74 let mut fs = setup_fs(4096); 75 let root = fs.root_block(); 76 let (_inode, block) = fs.create_file(root, b"offset_inline"); 77 78 let first = vec![0x11u8; 50]; 79 fs.write_file(block, 0, &first); 80 81 let second = vec![0x22u8; 50]; 82 fs.write_file(block, 50, &second); 83 84 let read_back = fs.read_file(block, 0, 100); 85 assert_eq!(&read_back[..50], &first[..]); 86 assert_eq!(&read_back[50..], &second[..]); 87} 88 89#[test] 90fn inline_then_grow_past_threshold() { 91 let mut fs = setup_fs(4096); 92 let root = fs.root_block(); 93 let (_inode, block) = fs.create_file(root, b"growfile"); 94 95 let small = vec![0xAAu8; 50]; 96 let updated = fs.write_file(block, 0, &small); 97 assert!(updated.flags & InodeFlags::INLINE != 0); 98 99 let big: Vec<u8> = (0..INODE_INLINE_MAX + 200) 100 .map(|i| (i % 197) as u8) 101 .collect(); 102 let updated = fs.write_file(block, 0, &big); 103 assert!(updated.flags & InodeFlags::INLINE == 0); 104 105 let read_back = fs.read_file(block, 0, big.len()); 106 assert_eq!(read_back, big); 107}