#[path = "../../../os-vfs-tmpfs/src/lib.rs"] mod tmpfs; #[test] fn os_vfs_tmpfs_positive() { let mut fs = tmpfs::Tmpfs::new(7, 8).unwrap(); let first = fs.create(11, b"a").unwrap(); assert_eq!(first.generation(), 7); assert_eq!(fs.write_at(11, first, 0, b"abc"), Ok(3)); assert_eq!(fs.write_at(11, first, 5, b"XY"), Ok(2)); assert_eq!(fs.len(11, first), Ok(7)); let mut output = [b'!'; 8]; assert_eq!(fs.read_at(11, first, 0, &mut output), Ok(7)); assert_eq!(output, [b'a', b'b', b'c', 0, 0, b'X', b'Y', b'!']); let second = fs.create(22, b"b").unwrap(); assert_eq!(fs.write_at(22, second, 0, b"z"), Ok(1)); assert_eq!(fs.used(), 8); assert_eq!(fs.lookup(11, b"a"), Ok(first)); assert_eq!(fs.unlink(11, b"a"), Ok(())); assert_eq!(fs.used(), 1); assert_eq!(fs.len(11, first), Err(tmpfs::Error::NoEntry)); assert_eq!(fs.reset(), Ok(8)); assert_eq!(fs.generation(), 8); assert_eq!(fs.used(), 0); assert_eq!(fs.len(22, second), Err(tmpfs::Error::Stale)); let replacement = fs.create(11, b"a").unwrap(); assert!(replacement.inode() > second.inode()); assert_eq!(replacement.generation(), 8); } #[test] fn os_vfs_tmpfs_negative() { let mut fs = tmpfs::Tmpfs::new(1, 8).unwrap(); assert_eq!(fs.create(0, b"bad"), Err(tmpfs::Error::InvalidOwner)); assert_eq!(fs.create(11, b"a/b"), Err(tmpfs::Error::InvalidName)); let first = fs.create(11, b"a").unwrap(); assert_eq!(fs.create(22, b"a"), Err(tmpfs::Error::Exists)); let second = fs.create(22, b"b").unwrap(); let full = fs; assert_eq!(fs.create(33, b"c"), Err(tmpfs::Error::NoSpace)); assert_eq!(fs, full); assert_eq!(fs.write_at(11, first, 0, b"1234567"), Ok(7)); let before_quota = fs; assert_eq!(fs.write_at(22, second, 0, b"zz"), Err(tmpfs::Error::NoSpace)); assert_eq!(fs, before_quota); assert_eq!(fs.write_at(22, second, 0, b"z"), Ok(1)); let before_owner = fs; assert_eq!(fs.len(22, first), Err(tmpfs::Error::InvalidOwner)); assert_eq!(fs.write_at(22, first, 0, b"X"), Err(tmpfs::Error::InvalidOwner)); assert_eq!(fs, before_owner); let mut output = [b'!'; 8]; assert_eq!(fs.read_at(22, first, 0, &mut output), Err(tmpfs::Error::InvalidOwner)); assert_eq!(output, [b'!'; 8]); assert_eq!(fs.write_at(11, first, 32, b"X"), Err(tmpfs::Error::NoSpace)); assert_eq!(fs, before_owner); assert_eq!(fs.read_at(11, first, 99, &mut output), Ok(0)); assert_eq!(output, [b'!'; 8]); let mut terminal = tmpfs::Tmpfs::new(u64::MAX, 8).unwrap(); let before_reset = terminal; assert_eq!(terminal.reset(), Err(tmpfs::Error::Overflow)); assert_eq!(terminal, before_reset); }