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 c65b7e8
Showing 1 changed file with 27 additions and 23 deletions.
50 changes: 27 additions & 23 deletions tests/process.rs
Original file line number Diff line number Diff line change
Expand Up @@ -95,24 +95,35 @@ 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")
// For some reason, it doesn't work on freebsd so let's just use "sleep"...
let mut p = if cfg!(target_os = "freebsd") {
std::process::Command::new("sleep")
.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")
build_example();
std::process::Command::new("./target/debug/examples/simple")
.stdout(std::process::Stdio::null())
.env("FOO", "BAR")
.env("OTHER", "VALUE")
Expand All @@ -123,19 +134,16 @@ fn test_environ() {
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,18 +161,17 @@ 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")
// For some reason, it doesn't work on freebsd so let's just use "sleep"...
let mut p = if cfg!(target_os = "freebsd") {
std::process::Command::new("sleep")
.arg("3")
.arg("EnvironSignal")
.stdout(std::process::Stdio::null())
.env("FOO", &big_env)
.spawn()
.unwrap()
} else {
std::process::Command::new("sleep")
.arg("3")
build_example();
std::process::Command::new("./target/debug/examples/simple")
.stdout(std::process::Stdio::null())
.env("FOO", &big_env)
.spawn()
Expand All @@ -182,11 +189,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 c65b7e8

Please sign in to comment.