52 lines
1.4 KiB
Rust
52 lines
1.4 KiB
Rust
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"));
|
|
}
|