summaryrefslogtreecommitdiffstats
path: root/vendor/xattr/tests/main.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 12:02:58 +0000
commit698f8c2f01ea549d77d7dc3338a12e04c11057b9 (patch)
tree173a775858bd501c378080a10dca74132f05bc50 /vendor/xattr/tests/main.rs
parentInitial commit. (diff)
downloadrustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.tar.xz
rustc-698f8c2f01ea549d77d7dc3338a12e04c11057b9.zip
Adding upstream version 1.64.0+dfsg1.upstream/1.64.0+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/xattr/tests/main.rs')
-rw-r--r--vendor/xattr/tests/main.rs115
1 files changed, 115 insertions, 0 deletions
diff --git a/vendor/xattr/tests/main.rs b/vendor/xattr/tests/main.rs
new file mode 100644
index 000000000..0c4367862
--- /dev/null
+++ b/vendor/xattr/tests/main.rs
@@ -0,0 +1,115 @@
+extern crate tempfile;
+extern crate xattr;
+
+use std::collections::BTreeSet;
+use std::ffi::OsStr;
+use xattr::FileExt;
+
+use tempfile::{tempfile_in, NamedTempFile};
+
+#[test]
+#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "macos"))]
+fn test_fd() {
+ use std::os::unix::ffi::OsStrExt;
+ // Only works on "real" filesystems.
+ let tmp = tempfile_in("/var/tmp").unwrap();
+ assert!(tmp.get_xattr("user.test").unwrap().is_none());
+ assert_eq!(
+ tmp.list_xattr()
+ .unwrap()
+ .filter(|x| x.as_bytes().starts_with(b"user."))
+ .count(),
+ 0
+ );
+
+ tmp.set_xattr("user.test", b"my test").unwrap();
+ assert_eq!(tmp.get_xattr("user.test").unwrap().unwrap(), b"my test");
+ assert_eq!(
+ tmp.list_xattr()
+ .unwrap()
+ .filter(|x| x.as_bytes().starts_with(b"user."))
+ .collect::<Vec<_>>(),
+ vec![OsStr::new("user.test")]
+ );
+
+ tmp.remove_xattr("user.test").unwrap();
+ assert!(tmp.get_xattr("user.test").unwrap().is_none());
+ assert_eq!(
+ tmp.list_xattr()
+ .unwrap()
+ .filter(|x| x.as_bytes().starts_with(b"user."))
+ .count(),
+ 0
+ );
+}
+
+#[test]
+#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "macos"))]
+fn test_path() {
+ use std::os::unix::ffi::OsStrExt;
+ // Only works on "real" filesystems.
+ let tmp = NamedTempFile::new_in("/var/tmp").unwrap();
+ assert!(xattr::get(tmp.path(), "user.test").unwrap().is_none());
+ assert_eq!(
+ xattr::list(tmp.path())
+ .unwrap()
+ .filter(|x| x.as_bytes().starts_with(b"user."))
+ .count(),
+ 0
+ );
+
+ xattr::set(tmp.path(), "user.test", b"my test").unwrap();
+ assert_eq!(
+ xattr::get(tmp.path(), "user.test").unwrap().unwrap(),
+ b"my test"
+ );
+ assert_eq!(
+ xattr::list(tmp.path())
+ .unwrap()
+ .filter(|x| x.as_bytes().starts_with(b"user."))
+ .collect::<Vec<_>>(),
+ vec![OsStr::new("user.test")]
+ );
+
+ xattr::remove(tmp.path(), "user.test").unwrap();
+ assert!(xattr::get(tmp.path(), "user.test").unwrap().is_none());
+ assert_eq!(
+ xattr::list(tmp.path())
+ .unwrap()
+ .filter(|x| x.as_bytes().starts_with(b"user."))
+ .count(),
+ 0
+ );
+}
+
+#[test]
+#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "macos"))]
+fn test_missing() {
+ assert!(xattr::get("/var/empty/does-not-exist", "user.test").is_err());
+}
+
+#[test]
+#[cfg(any(target_os = "linux", target_os = "freebsd", target_os = "macos"))]
+fn test_multi() {
+ use std::os::unix::ffi::OsStrExt;
+ // Only works on "real" filesystems.
+ let tmp = tempfile_in("/var/tmp").unwrap();
+ let mut items: BTreeSet<_> = [
+ OsStr::new("user.test1"),
+ OsStr::new("user.test2"),
+ OsStr::new("user.test3"),
+ ].iter()
+ .cloned()
+ .collect();
+
+ for it in &items {
+ tmp.set_xattr(it, b"value").unwrap();
+ }
+ for it in tmp.list_xattr()
+ .unwrap()
+ .filter(|x| x.as_bytes().starts_with(&*b"user."))
+ {
+ assert!(items.remove(&*it));
+ }
+ assert!(items.is_empty());
+}