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.5 kB View raw
1use lancer_core::fs::InodeType; 2use lancer_lancerfs::dir; 3use lancer_lancerfs::error::FsError; 4use lancer_lancerfs::test_helpers::with_fs; 5 6#[test] 7fn create_nested_dirs_3_levels() { 8 with_fs(4096, |fs| { 9 let root = fs.root_block(); 10 let (_d1, d1_block) = fs.mkdir(root, b"level1"); 11 let (_d2, d2_block) = fs.mkdir(d1_block, b"level2"); 12 let (_d3, d3_block) = fs.mkdir(d2_block, b"level3"); 13 14 let d3_inode = fs.read_inode(d3_block); 15 assert_eq!(d3_inode.inode_type_enum(), Some(InodeType::Directory)); 16 }); 17} 18 19#[test] 20fn create_10_files_in_deep_dir() { 21 with_fs(4096, |fs| { 22 let root = fs.root_block(); 23 let (_, d1) = fs.mkdir(root, b"a"); 24 let (_, d2) = fs.mkdir(d1, b"b"); 25 let (_, d3) = fs.mkdir(d2, b"c"); 26 27 (0u8..10).for_each(|i| { 28 let name = [b'f', b'0' + i]; 29 fs.create_file(d3, &name); 30 }); 31 32 let d3_inode = fs.read_inode(d3); 33 let mut iter = dir::dir_list(&d3_inode, None); 34 let count = (0..64) 35 .scan((), |(), _| { 36 iter.next(&mut fs.pool, &mut fs.cache, &mut fs.bio) 37 .ok() 38 .flatten() 39 }) 40 .count(); 41 assert_eq!(count, 10); 42 }); 43} 44 45#[test] 46fn remove_5_of_10_files() { 47 with_fs(4096, |fs| { 48 let root = fs.root_block(); 49 let (_, dir_block) = fs.mkdir(root, b"dir"); 50 51 let names: Vec<[u8; 3]> = (0u8..10).map(|i| [b'f', b'_', b'0' + i]).collect(); 52 names.iter().for_each(|name| { 53 fs.create_file(dir_block, name); 54 }); 55 56 names.iter().take(5).for_each(|name| { 57 fs.delete_file(dir_block, name).unwrap(); 58 }); 59 60 let dir_inode = fs.read_inode(dir_block); 61 let mut iter = dir::dir_list(&dir_inode, None); 62 let remaining = (0..64) 63 .scan((), |(), _| { 64 iter.next(&mut fs.pool, &mut fs.cache, &mut fs.bio) 65 .ok() 66 .flatten() 67 }) 68 .count(); 69 assert_eq!(remaining, 5); 70 }); 71} 72 73#[test] 74fn rmdir_nonempty_returns_error() { 75 with_fs(4096, |fs| { 76 let root = fs.root_block(); 77 let (_, dir_block) = fs.mkdir(root, b"nonempty"); 78 fs.create_file(dir_block, b"child"); 79 80 let result = fs.rmdir(root, b"nonempty"); 81 assert!(matches!(result, Err(FsError::DirectoryNotEmpty))); 82 }); 83} 84 85#[test] 86fn rmdir_empty_succeeds() { 87 with_fs(4096, |fs| { 88 let root = fs.root_block(); 89 fs.mkdir(root, b"empty_dir"); 90 91 fs.rmdir(root, b"empty_dir").unwrap(); 92 93 let root_inode = fs.root_inode(); 94 let result = dir::dir_lookup( 95 &mut fs.pool, 96 &mut fs.cache, 97 &mut fs.bio, 98 &root_inode, 99 b"empty_dir", 100 None, 101 ) 102 .unwrap(); 103 assert!(result.is_none()); 104 }); 105} 106 107#[test] 108fn mkdir_duplicate_name_returns_error() { 109 with_fs(4096, |fs| { 110 let root = fs.root_block(); 111 fs.mkdir(root, b"dup"); 112 113 let parent = fs.root_inode(); 114 let txn = fs.next_txn(); 115 let obj_id = fs.alloc_object_id(); 116 let result = lancer_lancerfs::ops::mkdir( 117 &mut fs.pool, 118 &mut fs.cache, 119 &mut fs.bio, 120 &mut fs.state.freemap, 121 &parent, 122 b"dup", 123 txn, 124 obj_id, 125 ); 126 assert!(matches!(result, Err(FsError::FileExists))); 127 }); 128}