#[path = "../../../os-vfs-lookup/src/lib.rs"] mod os_vfs_lookup; #[path = "../../../os-vfs-open/src/lib.rs"] mod open; fn lookup() -> os_vfs_lookup::LookupTable { let first = os_vfs_lookup::Mount::new(1, 11, b"dosya").unwrap(); let second = os_vfs_lookup::Mount::new(2, 22, b"dosya").unwrap(); os_vfs_lookup::LookupTable::new(first, second).unwrap() } #[test] fn os_vfs_paths_open_positive() { let lookup = lookup(); let dentry = lookup.lookup(1, b"dosya").unwrap(); let mut opens = open::OpenTable::new(); let first = opens.open(&lookup, dentry, open::OpenFlags::READ_ONLY).unwrap(); let second = opens.open(&lookup, dentry, open::OpenFlags::READ_ONLY).unwrap(); assert_ne!(first.id, second.id); assert_eq!((first.id, second.id), (1, 2)); assert_eq!((first.volume, first.inode, first.mount_generation), (1, 11, 1)); assert_eq!((second.volume, second.inode, second.mount_generation), (1, 11, 1)); assert!(first.read && second.read); assert_eq!(opens.active_handles(), 2); let before = opens; assert_eq!(opens.open(&lookup, dentry, open::OpenFlags::READ_ONLY), Err(open::Error::NoSpace)); assert_eq!(opens, before); assert_eq!(opens.close(first), Ok(())); assert_eq!(opens.close(second), Ok(())); assert_eq!(opens.active_handles(), 0); } #[test] fn os_vfs_paths_open_negative() { let lookup = lookup(); let dentry = lookup.lookup(2, b"dosya").unwrap(); let mut opens = open::OpenTable::new(); let before = opens; let write_create = open::OpenFlags { read: true, write: true, create: true }; assert_eq!(opens.open(&lookup, dentry, write_create), Err(open::Error::Erofs)); assert_eq!(opens, before); assert_eq!(opens.active_handles(), 0); let first = opens.open(&lookup, dentry, open::OpenFlags::READ_ONLY).unwrap(); assert_eq!(first.id, 1); assert_eq!(opens.active_handles(), 1); let before = opens; assert_eq!(opens.open(&lookup, dentry, open::OpenFlags { read: false, write: false, create: false }), Err(open::Error::InvalidFlags)); assert_eq!(opens, before); assert_eq!(opens.close(first), Ok(())); assert_eq!(opens.close(first), Err(open::Error::BadHandle)); }