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