Skip to content

Commit

Permalink
Fix test issue when checking environment on mac: if you run a "system…
Browse files Browse the repository at this point in the history
…" binary, you cannot access its environment, so better run a non-system one
  • Loading branch information
GuillaumeGomez committed Nov 4, 2023
1 parent fcdc427 commit 75730b1
Showing 1 changed file with 31 additions and 47 deletions.
78 changes: 31 additions & 47 deletions tests/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,47 +95,44 @@ fn test_cmd() {
}
}

fn build_example() {
std::process::Command::new("cargo")
.arg("build")
.arg("--example")
.arg("simple")
.stdout(std::process::Stdio::null())
.spawn()
.unwrap()
.wait()
.unwrap();
}

#[test]
fn test_environ() {
if !sysinfo::IS_SUPPORTED || cfg!(feature = "apple-sandbox") {
return;
}
let mut p = if cfg!(target_os = "windows") {
std::process::Command::new("waitfor")
.arg("/t")
.arg("3")
.arg("EnvironSignal")
.stdout(std::process::Stdio::null())
.env("FOO", "BAR")
.env("OTHER", "VALUE")
.spawn()
.unwrap()
} else {
std::process::Command::new("sleep")
.arg("3")
.stdout(std::process::Stdio::null())
.env("FOO", "BAR")
.env("OTHER", "VALUE")
.spawn()
.unwrap()
};
build_example();
let mut p = std::process::Command::new("./target/debug/examples/simple")
.stdout(std::process::Stdio::null())
.env("FOO", "BAR")
.env("OTHER", "VALUE")
.spawn()
.unwrap();

let pid = Pid::from_u32(p.id() as _);
std::thread::sleep(std::time::Duration::from_secs(1));
let mut s = System::new();
s.refresh_processes();
s.refresh_process_specifics(pid, sysinfo::ProcessRefreshKind::everything());
p.kill().expect("Unable to kill process.");

let processes = s.processes();
let p = processes.get(&pid);

if let Some(p) = p {
assert_eq!(p.pid(), pid);
// FIXME: instead of ignoring the test on CI, try to find out what's wrong...
if std::env::var("APPLE_CI").is_err() {
assert!(p.environ().iter().any(|e| e == "FOO=BAR"));
assert!(p.environ().iter().any(|e| e == "OTHER=VALUE"));
}
assert!(p.environ().iter().any(|e| e == "FOO=BAR"));
assert!(p.environ().iter().any(|e| e == "OTHER=VALUE"));
} else {
panic!("Process not found!");
}
Expand All @@ -153,23 +150,13 @@ fn test_big_environ() {
for _ in 0..SIZE {
big_env.push('a');
}
let mut p = if cfg!(target_os = "windows") {
std::process::Command::new("waitfor")
.arg("/t")
.arg("3")
.arg("EnvironSignal")
.stdout(std::process::Stdio::null())
.env("FOO", &big_env)
.spawn()
.unwrap()
} else {
std::process::Command::new("sleep")
.arg("3")
.stdout(std::process::Stdio::null())
.env("FOO", &big_env)
.spawn()
.unwrap()
};
build_example();
let mut p = std::process::Command::new("./target/debug/examples/simple")
.stdout(std::process::Stdio::null())
.stdout(std::process::Stdio::null())
.env("FOO", &big_env)
.spawn()
.unwrap();

let pid = Pid::from_u32(p.id() as _);
std::thread::sleep(std::time::Duration::from_secs(1));
Expand All @@ -182,11 +169,8 @@ fn test_big_environ() {

if let Some(p) = p {
assert_eq!(p.pid(), pid);
// FIXME: instead of ignoring the test on CI, try to find out what's wrong...
if std::env::var("APPLE_CI").is_err() {
let env = format!("FOO={big_env}");
assert!(p.environ().iter().any(|e| *e == env));
}
let env = format!("FOO={big_env}");
assert!(p.environ().iter().any(|e| *e == env));
} else {
panic!("Process not found!");
}
Expand Down

0 comments on commit 75730b1

Please sign in to comment.