initial commit
This commit is contained in:
commit
c260d7bab8
235 files changed
+49786
No files matched your search
@@ -0,0 +1,52 @@
|
||||
use rust_xmpp::data_lock::DataDirectoryGuard;
|
||||
use std::process::Command;
|
||||
|
||||
#[test]
|
||||
fn child_process_probe() {
|
||||
let Some(root) = std::env::var_os("XMPP_LOCK_TEST_DIRECTORY") else {
|
||||
return;
|
||||
};
|
||||
let acquired = DataDirectoryGuard::acquire(std::path::Path::new(&root)).is_ok();
|
||||
assert_eq!(
|
||||
acquired,
|
||||
std::env::var("XMPP_LOCK_TEST_AVAILABLE").unwrap() == "yes"
|
||||
);
|
||||
}
|
||||
|
||||
fn probe(root: &std::path::Path, available: bool) {
|
||||
let output = Command::new(std::env::current_exe().unwrap())
|
||||
.args(["--exact", "child_process_probe", "--nocapture"])
|
||||
.env("XMPP_LOCK_TEST_DIRECTORY", root)
|
||||
.env(
|
||||
"XMPP_LOCK_TEST_AVAILABLE",
|
||||
if available { "yes" } else { "no" },
|
||||
)
|
||||
.output()
|
||||
.unwrap();
|
||||
assert!(
|
||||
output.status.success(),
|
||||
"{}\n{}",
|
||||
String::from_utf8_lossy(&output.stdout),
|
||||
String::from_utf8_lossy(&output.stderr)
|
||||
);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn excludes_another_process_and_releases_on_drop() {
|
||||
let root = tempfile::tempdir().unwrap();
|
||||
let native = root.path().join("existing-prosody-data");
|
||||
std::fs::write(&native, b"unchanged").unwrap();
|
||||
let guard = DataDirectoryGuard::acquire(root.path()).unwrap();
|
||||
probe(root.path(), false);
|
||||
#[cfg(unix)]
|
||||
{
|
||||
let aliases = tempfile::tempdir().unwrap();
|
||||
let alias = aliases.path().join("same-volume");
|
||||
std::os::unix::fs::symlink(root.path(), &alias).unwrap();
|
||||
probe(&alias, false);
|
||||
}
|
||||
drop(guard);
|
||||
probe(root.path(), true);
|
||||
assert_eq!(std::fs::read(&native).unwrap(), b"unchanged");
|
||||
assert_eq!(std::fs::read_dir(root.path()).unwrap().count(), 1);
|
||||
}
|
||||
Reference in new issue
Block a user