#[path = "../../../os-turkfs-namespace/src/lib.rs"] mod namespace; use namespace::{Error, Kind, Namespace}; #[test] fn os_turkfs_namespace_create_positive() { let mut ns = Namespace::<4>::new(4).unwrap(); let dir = ns.create(1, b"docs", Kind::Directory).unwrap(); let file = ns.create(dir, b"readme", Kind::File).unwrap(); assert_eq!((dir, file), (2, 3)); assert_eq!(ns.lookup(1, b"docs").unwrap().kind, Kind::Directory); assert_eq!(ns.lookup(dir, b"readme").unwrap().inode, file); assert_eq!(ns.lookup(1, b"readme"), None); assert_eq!(ns.used(), 2); assert_eq!(ns.allocated_bits(), 0b1111); let root_file = ns.create(1, b"readme", Kind::File).unwrap(); assert_ne!(root_file, file); assert_eq!(ns.used(), 3); } #[test] fn os_turkfs_namespace_create_negative() { let mut ns = Namespace::<4>::new(1).unwrap(); let dir = ns.create(1, b"docs", Kind::Directory).unwrap(); let before = ns; assert_eq!(ns.create(1, b"docs", Kind::File), Err(Error::Exists)); assert_eq!(ns, before); assert_eq!(ns.create(dir, b"hidden", Kind::File), Err(Error::Quota)); assert_eq!(ns, before); assert_eq!(ns.lookup(dir, b"hidden"), None); assert_eq!(ns.allocated_bits(), 7); assert_eq!(ns.create(55, b"orphan", Kind::File), Err(Error::ParentMissing)); for name in [b"".as_slice(), b".", b"..", b"a/b", b"nul\0", b"01234567890123456", &[0xff]] { assert_eq!(ns.create(1, name, Kind::File), Err(Error::InvalidName)); assert_eq!(ns, before); } let mut full = Namespace::<1>::new(1).unwrap(); let file = full.create(1, b"file", Kind::File).unwrap(); let before_full = full; assert_eq!(full.create(file, b"child", Kind::File), Err(Error::NotDirectory)); assert_eq!(full.create(1, b"extra", Kind::Directory), Err(Error::NoSpace)); assert_eq!(full, before_full); }