#[path = "../../../os-vfs-lookup/src/lib.rs"] mod lookup; fn table() -> lookup::LookupTable { let first = lookup::Mount::new(1, 11, "dosya".as_bytes()).unwrap(); let second = lookup::Mount::new(2, 22, "dosya".as_bytes()).unwrap(); lookup::LookupTable::new(first, second).unwrap() } #[test] fn os_vfs_paths_lookup_positive() { let table = table(); let before = table; let first = table.lookup(1, b"dosya").unwrap(); let second = table.lookup(2, b"dosya").unwrap(); assert_eq!((first.volume, first.inode, first.generation), (1, 11, 1)); assert_eq!((second.volume, second.inode, second.generation), (2, 22, 1)); assert_eq!(first.name.as_str(), "dosya"); assert_eq!(second.name.as_str(), "dosya"); assert_eq!(table.validate(first), Ok(11)); assert_eq!(table.validate(second), Ok(22)); assert_eq!(table.active_mounts(), 2); assert_eq!(table, before); } #[test] fn os_vfs_paths_lookup_negative() { let mut table = table(); let old = table.lookup(1, b"dosya").unwrap(); let second = table.lookup(2, b"dosya").unwrap(); assert_eq!(table.unmount(1), Ok(())); assert_eq!(table.active_mounts(), 1); assert_eq!(table.validate(old), Err(lookup::Error::Stale)); assert_eq!(table.lookup(1, b"dosya"), Err(lookup::Error::NoMount)); assert_eq!(table.validate(second), Ok(22)); assert_eq!(table.remount(1), Ok(())); assert_eq!(table.active_mounts(), 2); assert_eq!(table.validate(old), Err(lookup::Error::Stale)); let fresh = table.lookup(1, b"dosya").unwrap(); assert_eq!((fresh.inode, fresh.generation), (11, 2)); assert_eq!(table.validate(fresh), Ok(11)); let before = table; assert_eq!(table.lookup(1, &[0xff]), Err(lookup::Error::InvalidName)); assert_eq!(table.lookup(1, b"a/b"), Err(lookup::Error::InvalidName)); assert_eq!(table.lookup(1, b""), Err(lookup::Error::InvalidName)); assert_eq!(table, before); let mut saturated = lookup::Mount::new(1, 11, b"dosya").unwrap(); saturated.generation = u64::MAX; let second_mount = lookup::Mount::new(2, 22, b"dosya").unwrap(); let mut saturated_table = lookup::LookupTable::new(saturated, second_mount).unwrap(); let snapshot = saturated_table; assert_eq!(saturated_table.unmount(1), Err(lookup::Error::GenerationOverflow)); assert_eq!(saturated_table, snapshot); }