summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/sys/test_ptrace.rs2
-rw-r--r--test/test.rs51
-rw-r--r--test/test_fcntl.rs20
-rw-r--r--test/test_unistd.rs2
4 files changed, 39 insertions, 36 deletions
diff --git a/test/sys/test_ptrace.rs b/test/sys/test_ptrace.rs
index 05f407cc..46ea3d6a 100644
--- a/test/sys/test_ptrace.rs
+++ b/test/sys/test_ptrace.rs
@@ -128,6 +128,8 @@ fn test_ptrace_syscall() {
use nix::unistd::getpid;
use nix::unistd::ForkResult::*;
+ require_capability!(CAP_SYS_PTRACE);
+
let _m = crate::FORK_MTX.lock().expect("Mutex got poisoned by another test");
match fork().expect("Error: Fork Failed") {
diff --git a/test/test.rs b/test/test.rs
index ac842b11..2d43196c 100644
--- a/test/test.rs
+++ b/test/test.rs
@@ -5,22 +5,27 @@ extern crate nix;
#[macro_use]
extern crate lazy_static;
+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.");
}
}
}
@@ -39,12 +44,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);
}
}
}
@@ -55,11 +55,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);
}
};
}
@@ -74,13 +70,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));
}
}
}
@@ -97,7 +88,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)
@@ -112,13 +102,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_fcntl.rs b/test/test_fcntl.rs
index c9f382bc..29719072 100644
--- a/test/test_fcntl.rs
+++ b/test/test_fcntl.rs
@@ -228,11 +228,19 @@ mod linux_android {
target_arch = "mips64",
target_arch = "mips64el",
target_arch = "powerpc64",
- target_arch = "powerpc64le")))]
+ target_arch = "powerpc64le",
+ target_env = "musl")))]
fn test_ofd_write_lock() {
let tmp = NamedTempFile::new().unwrap();
let fd = tmp.as_raw_fd();
+ let statfs = nix::sys::statfs::fstatfs(&tmp).unwrap();
+ if statfs.filesystem_type() == nix::sys::statfs::OVERLAYFS_SUPER_MAGIC {
+ // OverlayFS is a union file system. It returns one inode value in
+ // stat(2), but a different one shows up in /proc/locks. So we must
+ // skip the test.
+ skip!("/proc/locks does not work on overlayfs");
+ }
let inode = fstat(fd).expect("fstat failed").st_ino as usize;
let mut flock = libc::flock {
@@ -262,11 +270,19 @@ mod linux_android {
target_arch = "mips64",
target_arch = "mips64el",
target_arch = "powerpc64",
- target_arch = "powerpc64le")))]
+ target_arch = "powerpc64le",
+ target_env = "musl")))]
fn test_ofd_read_lock() {
let tmp = NamedTempFile::new().unwrap();
let fd = tmp.as_raw_fd();
+ let statfs = nix::sys::statfs::fstatfs(&tmp).unwrap();
+ if statfs.filesystem_type() == nix::sys::statfs::OVERLAYFS_SUPER_MAGIC {
+ // OverlayFS is a union file system. It returns one inode value in
+ // stat(2), but a different one shows up in /proc/locks. So we must
+ // skip the test.
+ skip!("/proc/locks does not work on overlayfs");
+ }
let inode = fstat(fd).expect("fstat failed").st_ino as usize;
let mut flock = libc::flock {
diff --git a/test/test_unistd.rs b/test/test_unistd.rs
index da677287..8fe1d432 100644
--- a/test/test_unistd.rs
+++ b/test/test_unistd.rs
@@ -936,7 +936,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