summaryrefslogtreecommitdiffstats
path: root/vendor/xattr/tests/main.rs
diff options
context:
space:
mode:
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());
+}