diff --git a/test/test.rs b/test/test.rs index 0efe9bd6f7..32c49bd3ee 100644 --- a/test/test.rs +++ b/test/test.rs @@ -14,22 +14,27 @@ extern crate sysctl; extern crate tempfile; extern crate semver; +macro_rules! skip { + ($($reason: expr),+) => { + use ::std::io::{self, Write}; + + let stderr = io::stderr(); + let mut handle = stderr.lock(); + writeln!(handle, $($reason),+).unwrap(); + return; + } +} + cfg_if! { if #[cfg(any(target_os = "android", target_os = "linux"))] { macro_rules! require_capability { ($capname:ident) => { use ::caps::{Capability, CapSet, has_cap}; - use ::std::io::{self, Write}; if !has_cap(None, CapSet::Effective, Capability::$capname) .unwrap() { - let stderr = io::stderr(); - let mut handle = stderr.lock(); - writeln!(handle, - "Insufficient capabilities. Skipping test.") - .unwrap(); - return; + skip!("Insufficient capabilities. Skipping test."); } } } @@ -48,12 +53,7 @@ macro_rules! skip_if_jailed { if let CtlValue::Int(1) = ::sysctl::value("security.jail.jailed") .unwrap() { - use ::std::io::Write; - let stderr = ::std::io::stderr(); - let mut handle = stderr.lock(); - writeln!(handle, "{} cannot run in a jail. Skipping test.", $name) - .unwrap(); - return; + skip!("{} cannot run in a jail. Skipping test.", $name); } } } @@ -63,11 +63,7 @@ macro_rules! skip_if_not_root { use nix::unistd::Uid; if !Uid::current().is_root() { - use ::std::io::Write; - let stderr = ::std::io::stderr(); - let mut handle = stderr.lock(); - writeln!(handle, "{} requires root privileges. Skipping test.", $name).unwrap(); - return; + skip!("{} requires root privileges. Skipping test.", $name); } }; } @@ -82,13 +78,8 @@ cfg_if! { if fields.next() == Some("Seccomp:") && fields.next() != Some("0") { - use ::std::io::Write; - let stderr = ::std::io::stderr(); - let mut handle = stderr.lock(); - writeln!(handle, - "{} cannot be run in Seccomp mode. Skipping test.", - stringify!($name)).unwrap(); - return; + skip!("{} cannot be run in Seccomp mode. Skipping test.", + stringify!($name)); } } } @@ -105,7 +96,6 @@ cfg_if! { if #[cfg(target_os = "linux")] { macro_rules! require_kernel_version { ($name:expr, $version_requirement:expr) => { - use ::std::io::Write; use semver::{Version, VersionReq}; let version_requirement = VersionReq::parse($version_requirement) @@ -120,13 +110,8 @@ cfg_if! { version.build.clear(); if !version_requirement.matches(&version) { - let stderr = ::std::io::stderr(); - let mut handle = stderr.lock(); - - writeln!(handle, - "Skip {} because kernel version `{}` doesn't match the requirement `{}`", - stringify!($name), version, version_requirement).unwrap(); - return; + skip!("Skip {} because kernel version `{}` doesn't match the requirement `{}`", + stringify!($name), version, version_requirement); } } } diff --git a/test/test_unistd.rs b/test/test_unistd.rs index 7e3be1ccb2..62505f55bd 100644 --- a/test/test_unistd.rs +++ b/test/test_unistd.rs @@ -872,7 +872,7 @@ fn test_access_file_exists() { #[test] fn test_setfsuid() { use std::os::unix::fs::PermissionsExt; - use std::{fs, thread}; + use std::{fs, io, thread}; require_capability!(CAP_SETUID); // get the UID of the "nobody" user