#[path = "../../../os-turkfs-namespace/src/lib.rs"] mod namespace; use namespace::{Error, Kind, LinkCount, Namespace}; #[test] fn os_turkfs_namespace_links_positive() { let mut ns = Namespace::<6>::new(6).unwrap(); let file = ns.create(1, b"file", Kind::File).unwrap(); let directory = ns.create(1, b"dir", Kind::Directory).unwrap(); let bits = ns.allocated_bits(); assert_eq!(ns.hardlink(1, b"file", directory, b"alias"), Ok(2)); assert_eq!(ns.lookup(1, b"file").unwrap().inode, file); assert_eq!(ns.lookup(directory, b"alias").unwrap().inode, file); assert_eq!(ns.link_count(file), 2); assert_eq!(ns.allocated_bits(), bits); ns.rename(directory, b"alias", directory, b"renamed").unwrap(); assert_eq!(ns.lookup(directory, b"alias"), None); assert_eq!(ns.lookup(directory, b"renamed").unwrap().inode, file); assert_eq!(ns.lookup(1, b"file").unwrap().inode, file); assert_eq!(ns.link_count(file), 2); assert_eq!(ns.allocated_bits(), bits); } #[test] fn os_turkfs_namespace_links_negative() { let mut ns = Namespace::<6>::new(3).unwrap(); let left = ns.create(1, b"left", Kind::Directory).unwrap(); let right = ns.create(1, b"right", Kind::Directory).unwrap(); ns.create(1, b"file", Kind::File).unwrap(); let before = ns; assert_eq!(ns.hardlink(1, b"left", right, b"bad-parent"), Err(Error::DirectoryLink)); assert_eq!(ns, before); assert_eq!(ns.lookup(right, b"bad-parent"), None); assert_eq!(ns.link_count(left), 1); assert_eq!(ns.hardlink(1, b"file", right, b"alias"), Err(Error::Quota)); assert_eq!(ns.hardlink(1, b"file", 1, b"right"), Err(Error::Exists)); assert_eq!(ns, before); let mut terminal = LinkCount::new(u16::MAX).unwrap(); let before_count = terminal; assert_eq!(terminal.add(), Err(Error::LinkOverflow)); assert_eq!(terminal, before_count); assert_eq!(LinkCount::new(0), Err(Error::InvalidLinkCount)); }