From dd796f67352de9a8b3602a20d37d68b3a903cc78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Wed, 1 Dec 2021 16:15:08 +0100 Subject: [PATCH] Skip test if unshare fails --- tests/test_cases.rs | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/tests/test_cases.rs b/tests/test_cases.rs index 66023137e6..1d8c5e6d65 100644 --- a/tests/test_cases.rs +++ b/tests/test_cases.rs @@ -6,18 +6,26 @@ use anyhow::Result; use fs_extra::dir::{copy, CopyOptions}; use std::fs; use std::io::{self, Write}; +use log::warn; use std::path::Path; -use std::process::Command; +use std::process::{Command, exit}; use tempfile::TempDir; #[ctor::ctor] fn unshorn() { - use nix::{mount, sched, unistd}; + use nix::{errno, mount, sched, unistd}; use std::os::unix::fs::symlink; let (uid, gid) = (unistd::geteuid(), unistd::getegid()); if !uid.is_root() { - sched::unshare(sched::CloneFlags::CLONE_NEWUSER).expect("unshare(NEWUSER)"); + match sched::unshare(sched::CloneFlags::CLONE_NEWUSER) { + Ok(_) => {} + Err(errno::Errno::EPERM) => { + warn!("No permission to unshare namespace, skipping tests"); + exit(0); + } + Err(err) => panic!("Unexpected error: {}", err), + } fs::write("/proc/self/setgroups", b"deny").unwrap(); fs::write("/proc/self/uid_map", format!("0 {} 1", uid)).unwrap(); fs::write("/proc/self/gid_map", format!("0 {} 1", gid)).unwrap();