1 use std::ffi::OsString;
2 
3 use crate::unix::PopenExt;
4 use crate::{ExitStatus, Popen, PopenConfig, Redirection};
5 
6 use libc;
7 
8 #[test]
err_terminate()9 fn err_terminate() {
10     let mut p = Popen::create(&["sleep", "5"], PopenConfig::default()).unwrap();
11     assert!(p.poll().is_none());
12     p.terminate().unwrap();
13     assert_eq!(p.wait().unwrap(), ExitStatus::Signaled(libc::SIGTERM as u8));
14 }
15 
16 #[test]
waitpid_echild()17 fn waitpid_echild() {
18     let mut p = Popen::create(&["true"], PopenConfig::default()).unwrap();
19     let pid = p.pid().unwrap() as i32;
20     let mut status = 0 as libc::c_int;
21     let wpid = unsafe { libc::waitpid(pid, &mut status, 0) };
22     assert_eq!(wpid, pid);
23     assert_eq!(status, 0);
24     assert_eq!(p.wait().unwrap(), ExitStatus::Undetermined);
25 }
26 
27 #[test]
send_signal()28 fn send_signal() {
29     let mut p = Popen::create(&["sleep", "5"], PopenConfig::default()).unwrap();
30     p.send_signal(libc::SIGUSR1).unwrap();
31     assert_eq!(p.wait().unwrap(), ExitStatus::Signaled(libc::SIGUSR1 as u8));
32 }
33 
34 #[test]
env_set_all_1()35 fn env_set_all_1() {
36     let mut p = Popen::create(
37         &["env"],
38         PopenConfig {
39             stdout: Redirection::Pipe,
40             env: Some(Vec::new()),
41             ..Default::default()
42         },
43     )
44     .unwrap();
45     let (out, _err) = p.communicate(None).unwrap();
46     assert_eq!(out.unwrap(), "");
47 }
48 
49 #[test]
env_set_all_2()50 fn env_set_all_2() {
51     let mut p = Popen::create(
52         &["env"],
53         PopenConfig {
54             stdout: Redirection::Pipe,
55             env: Some(vec![(OsString::from("FOO"), OsString::from("bar"))]),
56             ..Default::default()
57         },
58     )
59     .unwrap();
60     let (out, _err) = p.communicate(None).unwrap();
61     assert_eq!(out.unwrap().trim_end(), "FOO=bar");
62 }
63