1
Fork 0
mirror of https://github.com/RGBCube/uutils-coreutils synced 2025-07-28 11:37:44 +00:00

Merge pull request #1014 from Minoru/bugfix/umask-independent-test

tests/chmod: don't make assumptions about umask
This commit is contained in:
Jian Zeng 2016-12-19 05:47:49 -06:00 committed by GitHub
commit 2660bb4fc3
4 changed files with 19 additions and 0 deletions

1
Cargo.lock generated
View file

@ -35,6 +35,7 @@ dependencies = [
"id 0.0.1", "id 0.0.1",
"install 0.0.1", "install 0.0.1",
"kill 0.0.1", "kill 0.0.1",
"lazy_static 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)",
"libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)", "libc 0.2.18 (registry+https://github.com/rust-lang/crates.io-index)",
"link 0.0.1", "link 0.0.1",
"ln 0.0.1", "ln 0.0.1",

View file

@ -233,6 +233,7 @@ regex="*"
rand="*" rand="*"
tempdir="*" tempdir="*"
unindent="*" unindent="*"
lazy_static = "*"
[[bin]] [[bin]]
name = "uutils" name = "uutils"

View file

@ -1,6 +1,7 @@
use common::util::*; use common::util::*;
use std::fs::{metadata, OpenOptions, set_permissions}; use std::fs::{metadata, OpenOptions, set_permissions};
use std::os::unix::fs::{OpenOptionsExt, PermissionsExt}; use std::os::unix::fs::{OpenOptionsExt, PermissionsExt};
use std::sync::Mutex;
extern crate libc; extern crate libc;
use self::libc::umask; use self::libc::umask;
@ -9,6 +10,9 @@ use self::libc::umask;
static TEST_FILE: &'static str = "file"; static TEST_FILE: &'static str = "file";
static REFERENCE_FILE: &'static str = "reference"; static REFERENCE_FILE: &'static str = "reference";
static REFERENCE_PERMS: u32 = 0o247; static REFERENCE_PERMS: u32 = 0o247;
lazy_static! {
static ref UMASK_MUTEX: Mutex<()> = Mutex::new(());
}
struct TestCase { struct TestCase {
args: Vec<&'static str>, args: Vec<&'static str>,
@ -70,6 +74,8 @@ fn test_chmod_octal() {
#[test] #[test]
fn test_chmod_ugoa() { fn test_chmod_ugoa() {
let _guard = UMASK_MUTEX.lock();
let last = unsafe { let last = unsafe {
umask(0) umask(0)
}; };
@ -117,10 +123,18 @@ fn test_chmod_ugo_copy() {
#[test] #[test]
fn test_chmod_many_options() { fn test_chmod_many_options() {
let _guard = UMASK_MUTEX.lock();
let original_umask = unsafe {
umask(0)
};
let tests = vec!{ let tests = vec!{
TestCase{args: vec!{"-r,a+w", TEST_FILE}, before: 0o444, after: 0o222}, TestCase{args: vec!{"-r,a+w", TEST_FILE}, before: 0o444, after: 0o222},
}; };
run_tests(tests); run_tests(tests);
unsafe {
umask(original_umask);
}
} }
#[test] #[test]

View file

@ -1,6 +1,9 @@
#[macro_use] #[macro_use]
mod common; mod common;
#[macro_use]
extern crate lazy_static;
// For conditional compilation // For conditional compilation
macro_rules! unix_only { macro_rules! unix_only {
($($fea:expr, $m:ident);+) => { ($($fea:expr, $m:ident);+) => {