chgrp: add tests

This commit is contained in:
Knight 2016-08-21 17:05:05 +08:00
parent 9dda0bcd25
commit d2d9fcd628
2 changed files with 103 additions and 0 deletions

102
tests/test_chgrp.rs Normal file
View file

@ -0,0 +1,102 @@
use common::util::*;
static UTIL_NAME: &'static str = "chgrp";
fn new_ucmd() -> UCommand {
TestScenario::new(UTIL_NAME).ucmd()
}
#[test]
fn test_invalid_option() {
new_ucmd()
.arg("-w")
.arg("/")
.fails();
}
static DIR: &'static str = "/tmp";
#[test]
fn test_invalid_group() {
new_ucmd()
.arg("nosuchgroup")
.arg("/")
.fails()
.stderr_is("chgrp: invalid group: nosuchgroup");
}
#[test]
fn test_1() {
new_ucmd()
.arg("bin")
.arg(DIR)
.fails()
.stderr_is("chgrp: changing group of '/tmp': Operation not permitted (os error 1)");
}
#[test]
fn test_fail_silently() {
for opt in &["-f", "--silent", "--quiet"] {
new_ucmd()
.arg(opt)
.arg("bin")
.arg(DIR)
.run()
.fails_silently();
}
}
#[test]
fn test_preserve_root() {
new_ucmd()
.arg("--preserve-root")
.arg("-R")
.arg("bin").arg("/")
.fails()
.stderr_is("chgrp: it is dangerous to operate recursively on '/'\nchgrp: use --no-preserve-root to override this failsafe");
}
#[test]
#[cfg(target_os = "linux")]
fn test_reference() {
new_ucmd()
.arg("-v")
.arg("--reference=/etc/passwd")
.arg("/etc")
.fails()
.stderr_is("chgrp: changing group of '/etc': Operation not permitted (os error 1)\n")
.stdout_is("failed to change group of /etc from root to root\n");
}
#[test]
#[cfg(target_os = "macos")]
fn test_reference() {
new_ucmd()
.arg("-v")
.arg("--reference=/etc/passwd")
.arg("/etc")
.succeeds();
}
#[test]
#[cfg(target_os = "linux")]
fn test_big_p() {
new_ucmd()
.arg("-RP")
.arg("bin")
.arg("/proc/self/cwd")
.fails()
.stderr_is("chgrp: changing group of '/proc/self/cwd': Operation not permitted (os error 1)\n");
}
#[test]
#[cfg(target_os = "linux")]
fn test_big_h() {
assert!(new_ucmd()
.arg("-RH")
.arg("bin")
.arg("/proc/self/fd")
.fails()
.stderr
.lines()
.fold(0, |acc, _| acc + 1) > 1);
}

View file

@ -14,6 +14,7 @@ macro_rules! unix_only {
unix_only! {
"chmod", test_chmod;
"chown", test_chown;
"chgrp", test_chgrp;
"install", test_install;
"mv", test_mv;
"pathchk", test_pathchk;