src/tools/xattr.rs: impl unit tests for fsetattr and fgetattr
As git does not preserve xattrs they have to be set before they can be read. Signed-off-by: Christian Ebner <c.ebner@proxmox.com>
This commit is contained in:
parent
553610b43e
commit
de61bc9264
|
@ -103,3 +103,69 @@ pub fn name_store(name: &[u8]) -> bool {
|
||||||
|
|
||||||
false
|
false
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
use std::fs::OpenOptions;
|
||||||
|
use std::os::unix::io::AsRawFd;
|
||||||
|
use nix::errno::Errno;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn test_fsetxattr_fgetxattr() {
|
||||||
|
let path = "./tests/xattrs.txt";
|
||||||
|
let file = OpenOptions::new()
|
||||||
|
.write(true)
|
||||||
|
.create(true)
|
||||||
|
.open(&path)
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
let fd = file.as_raw_fd();
|
||||||
|
|
||||||
|
let valid_user = CaFormatXAttr {
|
||||||
|
name: b"user.attribute0".to_vec(),
|
||||||
|
value: b"value0".to_vec(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let valid_empty_value = CaFormatXAttr {
|
||||||
|
name: b"user.empty".to_vec(),
|
||||||
|
value: Vec::new(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let invalid_trusted = CaFormatXAttr {
|
||||||
|
name: b"trusted.attribute0".to_vec(),
|
||||||
|
value: b"value0".to_vec(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let invalid_name_prefix = CaFormatXAttr {
|
||||||
|
name: b"users.attribte0".to_vec(),
|
||||||
|
value: b"value".to_vec(),
|
||||||
|
};
|
||||||
|
|
||||||
|
let mut name = b"user.".to_vec();
|
||||||
|
for _ in 0..260 {
|
||||||
|
name.push(b'a');
|
||||||
|
}
|
||||||
|
|
||||||
|
let invalid_name_length = CaFormatXAttr {
|
||||||
|
name: name,
|
||||||
|
value: b"err".to_vec(),
|
||||||
|
};
|
||||||
|
|
||||||
|
assert!(fsetxattr(fd, valid_user).is_ok());
|
||||||
|
assert!(fsetxattr(fd, valid_empty_value).is_ok());
|
||||||
|
assert_eq!(fsetxattr(fd, invalid_trusted), Err(Errno::EPERM));
|
||||||
|
assert_eq!(fsetxattr(fd, invalid_name_prefix), Err(Errno::EOPNOTSUPP));
|
||||||
|
assert_eq!(fsetxattr(fd, invalid_name_length), Err(Errno::ERANGE));
|
||||||
|
|
||||||
|
let v0 = fgetxattr(fd, b"user.attribute0\0".as_ref()).unwrap();
|
||||||
|
let v1 = fgetxattr(fd, b"user.empty\0".as_ref()).unwrap();
|
||||||
|
|
||||||
|
assert_eq!(v0, b"value0".as_ref());
|
||||||
|
assert_eq!(v1, b"".as_ref());
|
||||||
|
assert_eq!(fgetxattr(fd, b"user.attribute1\0".as_ref()), Err(Errno::ENODATA));
|
||||||
|
|
||||||
|
std::fs::remove_file(&path).unwrap();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue