aboutsummaryrefslogtreecommitdiff
path: root/test/sys/test_prctl.rs
diff options
context:
space:
mode:
Diffstat (limited to 'test/sys/test_prctl.rs')
-rw-r--r--test/sys/test_prctl.rs125
1 files changed, 125 insertions, 0 deletions
diff --git a/test/sys/test_prctl.rs b/test/sys/test_prctl.rs
new file mode 100644
index 0000000..351213b
--- /dev/null
+++ b/test/sys/test_prctl.rs
@@ -0,0 +1,125 @@
+#[cfg(target_os = "linux")]
+#[cfg(feature = "process")]
+mod test_prctl {
+ use std::ffi::CStr;
+
+ use nix::sys::prctl;
+
+ #[cfg_attr(qemu, ignore)]
+ #[test]
+ fn test_get_set_subreaper() {
+ let original = prctl::get_child_subreaper().unwrap();
+
+ prctl::set_child_subreaper(true).unwrap();
+ let subreaper = prctl::get_child_subreaper().unwrap();
+ assert!(subreaper);
+
+ prctl::set_child_subreaper(original).unwrap();
+ }
+
+ #[test]
+ fn test_get_set_dumpable() {
+ let original = prctl::get_dumpable().unwrap();
+
+ prctl::set_dumpable(false).unwrap();
+ let dumpable = prctl::get_dumpable().unwrap();
+ assert!(!dumpable);
+
+ prctl::set_dumpable(original).unwrap();
+ }
+
+ #[test]
+ fn test_get_set_keepcaps() {
+ let original = prctl::get_keepcaps().unwrap();
+
+ prctl::set_keepcaps(true).unwrap();
+ let keepcaps = prctl::get_keepcaps().unwrap();
+ assert!(keepcaps);
+
+ prctl::set_keepcaps(original).unwrap();
+ }
+
+ #[test]
+ fn test_get_set_clear_mce_kill() {
+ use prctl::PrctlMCEKillPolicy::*;
+
+ prctl::set_mce_kill(PR_MCE_KILL_LATE).unwrap();
+ let mce = prctl::get_mce_kill().unwrap();
+ assert_eq!(mce, PR_MCE_KILL_LATE);
+
+ prctl::clear_mce_kill().unwrap();
+ let mce = prctl::get_mce_kill().unwrap();
+ assert_eq!(mce, PR_MCE_KILL_DEFAULT);
+ }
+
+ #[cfg_attr(qemu, ignore)]
+ #[test]
+ fn test_get_set_pdeathsig() {
+ use nix::sys::signal::Signal;
+
+ let original = prctl::get_pdeathsig().unwrap();
+
+ prctl::set_pdeathsig(Signal::SIGUSR1).unwrap();
+ let sig = prctl::get_pdeathsig().unwrap();
+ assert_eq!(sig, Some(Signal::SIGUSR1));
+
+ prctl::set_pdeathsig(original).unwrap();
+ }
+
+ #[test]
+ fn test_get_set_name() {
+ let original = prctl::get_name().unwrap();
+
+ let long_name =
+ CStr::from_bytes_with_nul(b"0123456789abcdefghijklmn\0").unwrap();
+ prctl::set_name(long_name).unwrap();
+ let res = prctl::get_name().unwrap();
+
+ // name truncated by kernel to TASK_COMM_LEN
+ assert_eq!(&long_name.to_str().unwrap()[..15], res.to_str().unwrap());
+
+ let short_name = CStr::from_bytes_with_nul(b"01234567\0").unwrap();
+ prctl::set_name(short_name).unwrap();
+ let res = prctl::get_name().unwrap();
+ assert_eq!(short_name.to_str().unwrap(), res.to_str().unwrap());
+
+ prctl::set_name(&original).unwrap();
+ }
+
+ #[cfg_attr(qemu, ignore)]
+ #[test]
+ fn test_get_set_timerslack() {
+ let original = prctl::get_timerslack().unwrap();
+
+ let slack = 60_000;
+ prctl::set_timerslack(slack).unwrap();
+ let res = prctl::get_timerslack().unwrap();
+ assert_eq!(slack, res as u64);
+
+ prctl::set_timerslack(original as u64).unwrap();
+ }
+
+ #[test]
+ fn test_disable_enable_perf_events() {
+ prctl::task_perf_events_disable().unwrap();
+ prctl::task_perf_events_enable().unwrap();
+ }
+
+ #[test]
+ fn test_get_set_no_new_privs() {
+ prctl::set_no_new_privs().unwrap();
+ let no_new_privs = prctl::get_no_new_privs().unwrap();
+ assert!(no_new_privs);
+ }
+
+ #[test]
+ fn test_get_set_thp_disable() {
+ let original = prctl::get_thp_disable().unwrap();
+
+ prctl::set_thp_disable(true).unwrap();
+ let thp_disable = prctl::get_thp_disable().unwrap();
+ assert!(thp_disable);
+
+ prctl::set_thp_disable(original).unwrap();
+ }
+}