sys: make xattr tests integration tests
these touch files, so should use the cargo-provided tmp dir, but that is only available to benchmarks and integration tests, not unit tests. Signed-off-by: Fabian Grünbichler <f.gruenbichler@proxmox.com>
This commit is contained in:
parent
e8cb382442
commit
540fb905c2
@ -195,47 +195,9 @@ mod tests {
|
||||
use super::*;
|
||||
|
||||
use std::ffi::CString;
|
||||
use std::fs::OpenOptions;
|
||||
use std::os::unix::io::AsRawFd;
|
||||
|
||||
use nix::errno::Errno;
|
||||
|
||||
use proxmox_lang::c_str;
|
||||
|
||||
#[test]
|
||||
fn test_fsetxattr_fgetxattr() {
|
||||
let path = "./test-xattrs.txt";
|
||||
let file = OpenOptions::new()
|
||||
.write(true)
|
||||
.create(true)
|
||||
.open(&path)
|
||||
.unwrap();
|
||||
|
||||
let fd = file.as_raw_fd();
|
||||
|
||||
assert!(fsetxattr(fd, c_str!("user.attribute0"), b"value0").is_ok());
|
||||
assert!(fsetxattr(fd, c_str!("user.empty"), b"").is_ok());
|
||||
|
||||
if nix::unistd::Uid::current() != nix::unistd::ROOT {
|
||||
assert_eq!(
|
||||
fsetxattr(fd, c_str!("trusted.attribute0"), b"value0"),
|
||||
Err(Errno::EPERM)
|
||||
);
|
||||
}
|
||||
|
||||
let v0 = fgetxattr(fd, c_str!("user.attribute0")).unwrap();
|
||||
let v1 = fgetxattr(fd, c_str!("user.empty")).unwrap();
|
||||
|
||||
assert_eq!(v0, b"value0".as_ref());
|
||||
assert_eq!(v1, b"".as_ref());
|
||||
assert_eq!(
|
||||
fgetxattr(fd, c_str!("user.attribute1")),
|
||||
Err(Errno::ENODATA)
|
||||
);
|
||||
|
||||
std::fs::remove_file(&path).unwrap();
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_is_valid_xattr_name() {
|
||||
let too_long = CString::new(vec![b'a'; 265]).unwrap();
|
||||
|
49
proxmox-sys/tests/xattr.rs
Normal file
49
proxmox-sys/tests/xattr.rs
Normal file
@ -0,0 +1,49 @@
|
||||
use std::path::PathBuf;
|
||||
use std::fs::OpenOptions;
|
||||
use std::os::unix::io::AsRawFd;
|
||||
|
||||
use nix::errno::Errno;
|
||||
|
||||
use proxmox_lang::c_str;
|
||||
use proxmox_sys::fs::xattr::{fgetxattr,fsetxattr};
|
||||
|
||||
#[test]
|
||||
fn test_fsetxattr_fgetxattr() {
|
||||
let mut path = PathBuf::from(env!("CARGO_TARGET_TMPDIR").to_string());
|
||||
path.push("test-xattrs.txt");
|
||||
|
||||
let file = OpenOptions::new()
|
||||
.write(true)
|
||||
.create(true)
|
||||
.open(&path)
|
||||
.unwrap();
|
||||
|
||||
|
||||
let fd = file.as_raw_fd();
|
||||
|
||||
if let Err(Errno::EOPNOTSUPP) = fsetxattr(fd, c_str!("user.attribute0"), b"value0") {
|
||||
return;
|
||||
}
|
||||
|
||||
assert!(fsetxattr(fd, c_str!("user.attribute0"), b"value0").is_ok());
|
||||
assert!(fsetxattr(fd, c_str!("user.empty"), b"").is_ok());
|
||||
|
||||
if nix::unistd::Uid::current() != nix::unistd::ROOT {
|
||||
assert_eq!(
|
||||
fsetxattr(fd, c_str!("trusted.attribute0"), b"value0"),
|
||||
Err(Errno::EPERM)
|
||||
);
|
||||
}
|
||||
|
||||
let v0 = fgetxattr(fd, c_str!("user.attribute0")).unwrap();
|
||||
let v1 = fgetxattr(fd, c_str!("user.empty")).unwrap();
|
||||
|
||||
assert_eq!(v0, b"value0".as_ref());
|
||||
assert_eq!(v1, b"".as_ref());
|
||||
assert_eq!(
|
||||
fgetxattr(fd, c_str!("user.attribute1")),
|
||||
Err(Errno::ENODATA)
|
||||
);
|
||||
|
||||
std::fs::remove_file(&path).unwrap();
|
||||
}
|
Loading…
Reference in New Issue
Block a user