use crate::*; use nix::{ errno::Errno, mount::{MntFlags, Nmount, unmount} }; use std::{ ffi::CString, fs::File, path::Path }; use tempfile::tempdir; #[test] fn ok() { require_mount!("nullfs"); let mountpoint = tempdir().unwrap(); let target = tempdir().unwrap(); let _sentry = File::create(target.path().join("sentry")).unwrap(); let fstype = CString::new("fstype").unwrap(); let nullfs = CString::new("nullfs").unwrap(); Nmount::new() .str_opt(&fstype, &nullfs) .str_opt_owned("fspath", mountpoint.path().to_str().unwrap()) .str_opt_owned("target", target.path().to_str().unwrap()) .nmount(MntFlags::empty()).unwrap(); // Now check that the sentry is visible through the mountpoint let exists = Path::exists(&mountpoint.path().join("sentry")); // Cleanup the mountpoint before asserting unmount(mountpoint.path(), MntFlags::empty()).unwrap(); assert!(exists); } #[test] fn bad_fstype() { let mountpoint = tempdir().unwrap(); let target = tempdir().unwrap(); let _sentry = File::create(target.path().join("sentry")).unwrap(); let e = Nmount::new() .str_opt_owned("fspath", mountpoint.path().to_str().unwrap()) .str_opt_owned("target", target.path().to_str().unwrap()) .nmount(MntFlags::empty()).unwrap_err(); assert_eq!(e.error(), Errno::EINVAL); assert_eq!(e.errmsg(), Some("Invalid fstype")); }