#[path = "../../../os-turkfs-namespace/src/lib.rs"] mod namespace; use namespace::{Error, Kind, Namespace}; #[test] fn os_turkfs_namespace_rename_positive() { let mut ns = Namespace::<4>::new(4).unwrap(); let a = ns.create(1, b"a", Kind::Directory).unwrap(); let b = ns.create(1, b"b", Kind::Directory).unwrap(); let file = ns.create(a, b"old", Kind::File).unwrap(); let child = ns.create(a, b"child", Kind::Directory).unwrap(); let bits = ns.allocated_bits(); ns.rename(a, b"old", b, b"new").unwrap(); assert_eq!(ns.lookup(a, b"old"), None); assert_eq!(ns.lookup(b, b"new").unwrap().inode, file); assert_eq!(ns.allocated_bits(), bits); assert_eq!(ns.used(), 4); ns.rename(1, b"a", b, b"moved").unwrap(); assert_eq!(ns.lookup(1, b"a"), None); assert_eq!(ns.lookup(b, b"moved").unwrap().inode, a); assert_eq!(ns.lookup(a, b"child").unwrap().inode, child); let before = ns; ns.rename(b, b"new", b, b"new").unwrap(); assert_eq!(ns, before); } #[test] fn os_turkfs_namespace_rename_negative() { let mut ns = Namespace::<6>::new(6).unwrap(); let parent = ns.create(1, b"parent", Kind::Directory).unwrap(); let child = ns.create(parent, b"child", Kind::Directory).unwrap(); let leaf = ns.create(child, b"leaf", Kind::Directory).unwrap(); let file = ns.create(1, b"file", Kind::File).unwrap(); let before = ns; assert_eq!(ns.rename(1, b"parent", parent, b"self"), Err(Error::Cycle)); assert_eq!(ns, before); assert_eq!(ns.rename(1, b"parent", leaf, b"cycle"), Err(Error::Cycle)); assert_eq!(ns, before); assert_eq!(ns.rename(1, b"file", 1, b"parent"), Err(Error::Exists)); assert_eq!(ns.rename(1, b"absent", child, b"new"), Err(Error::NotFound)); assert_eq!(ns.rename(1, b"file", file, b"nested"), Err(Error::NotDirectory)); assert_eq!(ns.rename(1, b"file", 55, b"orphan"), Err(Error::ParentMissing)); assert_eq!(ns.rename(1, b"file", 1, b".."), Err(Error::InvalidName)); assert_eq!(ns, before); assert_eq!(ns.lookup(leaf, b"cycle"), None); assert_eq!(ns.lookup(1, b"parent").unwrap().inode, parent); }