summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/sys/mod.rs2
-rw-r--r--test/sys/test_aio.rs4
-rw-r--r--test/sys/test_signalfd.rs26
-rw-r--r--test/test.rs6
-rw-r--r--test/test_signalfd.rs30
5 files changed, 33 insertions, 35 deletions
diff --git a/test/sys/mod.rs b/test/sys/mod.rs
index 4edb6af0..2ecc36f8 100644
--- a/test/sys/mod.rs
+++ b/test/sys/mod.rs
@@ -2,6 +2,8 @@ mod test_signal;
#[cfg(any(target_os = "freebsd", target_os = "dragonfly", target_os = "ios",
target_os = "netbsd", target_os = "macos", target_os = "linux"))]
mod test_aio;
+#[cfg(target_os = "linux")]
+mod test_signalfd;
mod test_socket;
mod test_sockopt;
mod test_termios;
diff --git a/test/sys/test_aio.rs b/test/sys/test_aio.rs
index 7e2bef63..54ee5a96 100644
--- a/test/sys/test_aio.rs
+++ b/test/sys/test_aio.rs
@@ -244,7 +244,7 @@ extern fn sigfunc(_: c_int) {
#[cfg_attr(any(all(target_env = "musl", target_arch = "x86_64"), target_arch = "mips"), ignore)]
fn test_write_sigev_signal() {
#[allow(unused_variables)]
- let m = ::SIGUSR2_MTX.lock().expect("Mutex got poisoned by another test");
+ let m = ::SIGNAL_MTX.lock().expect("Mutex got poisoned by another test");
let sa = SigAction::new(SigHandler::Handler(sigfunc),
SA_RESETHAND,
SigSet::empty());
@@ -375,7 +375,7 @@ fn test_lio_listio_nowait() {
#[cfg_attr(any(target_arch = "mips", target_env = "musl"), ignore)]
fn test_lio_listio_signal() {
#[allow(unused_variables)]
- let m = ::SIGUSR2_MTX.lock().expect("Mutex got poisoned by another test");
+ let m = ::SIGNAL_MTX.lock().expect("Mutex got poisoned by another test");
const INITIAL: &'static [u8] = b"abcdef123456";
const WBUF: &'static [u8] = b"CDEF";
let rbuf = Rc::new(vec![0; 4].into_boxed_slice());
diff --git a/test/sys/test_signalfd.rs b/test/sys/test_signalfd.rs
new file mode 100644
index 00000000..6d65e6a0
--- /dev/null
+++ b/test/sys/test_signalfd.rs
@@ -0,0 +1,26 @@
+#[test]
+fn test_signalfd() {
+ use nix::sys::signalfd::SignalFd;
+ use nix::sys::signal::{self, raise, Signal, SigSet};
+
+ // Grab the mutex for altering signals so we don't interfere with other tests.
+ #[allow(unused_variables)]
+ let m = ::SIGNAL_MTX.lock().expect("Mutex got poisoned by another test");
+
+ // Block the SIGUSR1 signal from automatic processing for this thread
+ let mut mask = SigSet::empty();
+ mask.add(signal::SIGUSR1);
+ mask.thread_block().unwrap();
+
+ let mut fd = SignalFd::new(&mask).unwrap();
+
+ // Send a SIGUSR1 signal to the current process. Note that this uses `raise` instead of `kill`
+ // because `kill` with `getpid` isn't correct during multi-threaded execution like during a
+ // cargo test session. Instead use `raise` which does the correct thing by default.
+ raise(signal::SIGUSR1).ok().expect("Error: raise(SIGUSR1) failed");
+
+ // And now catch that same signal.
+ let res = fd.read_signal().unwrap().unwrap();
+ let signo = Signal::from_c_int(res.ssi_signo as i32).unwrap();
+ assert_eq!(signo, signal::SIGUSR1);
+}
diff --git a/test/test.rs b/test/test.rs
index 4c81aa2b..eb4556fa 100644
--- a/test/test.rs
+++ b/test/test.rs
@@ -11,7 +11,7 @@ extern crate nix_test as nixtest;
mod sys;
mod test_fcntl;
-#[cfg(any(target_os = "linux"))]
+#[cfg(target_os = "linux")]
mod test_mq;
mod test_net;
mod test_nix_path;
@@ -45,8 +45,8 @@ lazy_static! {
/// Any test that creates child processes must grab this mutex, regardless
/// of what it does with those children.
pub static ref FORK_MTX: Mutex<()> = Mutex::new(());
- /// Any test that registers a SIGUSR2 handler must grab this mutex
- pub static ref SIGUSR2_MTX: Mutex<()> = Mutex::new(());
+ /// Any test that alters signal handling must grab this mutex.
+ pub static ref SIGNAL_MTX: Mutex<()> = Mutex::new(());
}
#[test]
diff --git a/test/test_signalfd.rs b/test/test_signalfd.rs
deleted file mode 100644
index 28a6decb..00000000
--- a/test/test_signalfd.rs
+++ /dev/null
@@ -1,30 +0,0 @@
-extern crate nix;
-
-#[cfg(feature = "signalfd")]
-use nix::sys::signalfd::SignalFd;
-#[cfg(feature = "signalfd")]
-use nix::sys::signal;
-#[cfg(feature = "signalfd")]
-use nix::unistd;
-
-#[cfg(feature = "signalfd")]
-fn main() {
- print!("test test_signalfd ... ");
-
- let mut mask = signal::SigSet::empty();
- mask.add(signal::SIGUSR1).unwrap();
- mask.thread_block().unwrap();
-
- let mut fd = SignalFd::new(&mask).unwrap();
-
- let pid = unistd::getpid();
- signal::kill(pid, signal::SIGUSR1).unwrap();
-
- let res = fd.read_signal();
-
- assert_eq!(res.unwrap().unwrap().ssi_signo as i32, signal::SIGUSR1);
- println!("ok");
-}
-
-#[cfg(not(feature = "signalfd"))]
-fn main() {}