Merge pull request #4293 from Joining7943/tests-util-refactor-ucommand-add-run-in-shell

`tests/util`: Small Refactor/Fixes of `UCommand` and add method to run a `UCommand` in a shell platform independently
This commit is contained in:
Terts Diepraam
2023-02-21 22:41:20 +01:00
committed by GitHub
16 changed files with 406 additions and 248 deletions
Generated
+2 -2
View File
@@ -1867,9 +1867,9 @@ dependencies = [
[[package]]
name = "rlimit"
version = "0.8.3"
version = "0.9.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f7278a1ec8bfd4a4e07515c589f5ff7b309a373f987393aef44813d9dcf87aa3"
checksum = "f8a29d87a652dc4d43c586328706bb5cdff211f3f39a530f240b53f7221dab8e"
dependencies = [
"libc",
]
+1 -1
View File
@@ -482,7 +482,7 @@ rstest = "0.16.0"
[target.'cfg(any(target_os = "linux", target_os = "android"))'.dev-dependencies]
procfs = { version = "0.14", default-features = false }
rlimit = "0.8.3"
rlimit = "0.9.1"
[target.'cfg(unix)'.dev-dependencies]
nix = { workspace=true, features=["process", "signal", "user"] }
+1 -1
View File
@@ -103,7 +103,7 @@ fn test_closes_file_descriptors() {
"alpha.txt",
"alpha.txt",
])
.with_limit(Resource::NOFILE, 9, 9)
.limit(Resource::NOFILE, 9, 9)
.succeeds();
}
+2 -5
View File
@@ -48,15 +48,12 @@ fn run_single_test(test: &TestCase, at: &AtPath, mut ucmd: UCommand) {
let r = ucmd.run();
if !r.succeeded() {
println!("{}", r.stderr_str());
panic!("{:?}: failed", ucmd.raw);
panic!("{ucmd}: failed");
}
let perms = at.metadata(TEST_FILE).permissions().mode();
if perms != test.after {
panic!(
"{:?}: expected: {:o} got: {:o}",
ucmd.raw, test.after, perms
);
panic!("{}: expected: {:o} got: {:o}", ucmd, test.after, perms);
}
}
+7 -7
View File
@@ -396,7 +396,7 @@ fn test_chown_only_user_id() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
let result = scene.cmd_keepenv("id").arg("-u").run();
let result = scene.cmd("id").keep_env().arg("-u").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
@@ -430,7 +430,7 @@ fn test_chown_fail_id() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
let result = scene.cmd_keepenv("id").arg("-u").run();
let result = scene.cmd("id").keep_env().arg("-u").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
@@ -487,7 +487,7 @@ fn test_chown_only_group_id() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
let result = scene.cmd_keepenv("id").arg("-g").run();
let result = scene.cmd("id").keep_env().arg("-g").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
@@ -551,14 +551,14 @@ fn test_chown_owner_group_id() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
let result = scene.cmd_keepenv("id").arg("-u").run();
let result = scene.cmd("id").keep_env().arg("-u").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
let user_id = String::from(result.stdout_str().trim());
assert!(!user_id.is_empty());
let result = scene.cmd_keepenv("id").arg("-g").run();
let result = scene.cmd("id").keep_env().arg("-g").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
@@ -612,14 +612,14 @@ fn test_chown_owner_group_mix() {
let scene = TestScenario::new(util_name!());
let at = &scene.fixtures;
let result = scene.cmd_keepenv("id").arg("-u").run();
let result = scene.cmd("id").keep_env().arg("-u").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
let user_id = String::from(result.stdout_str().trim());
assert!(!user_id.is_empty());
let result = scene.cmd_keepenv("id").arg("-gn").run();
let result = scene.cmd("id").keep_env().arg("-gn").run();
if skipping_test_is_okay(&result, "id: cannot find name for group ID") {
return;
}
+10 -7
View File
@@ -1545,7 +1545,7 @@ fn test_closes_file_descriptors() {
.arg("--reflink=auto")
.arg("dir_with_10_files/")
.arg("dir_with_10_files_new/")
.with_limit(Resource::NOFILE, limit_fd, limit_fd)
.limit(Resource::NOFILE, limit_fd, limit_fd)
.succeeds();
}
@@ -1692,7 +1692,8 @@ fn test_cp_reflink_always_override() {
.succeeds();
if !scene
.cmd_keepenv("env")
.cmd("env")
.keep_env()
.args(&["mkfs.btrfs", "--rootdir", ROOTDIR, DISK])
.run()
.succeeded()
@@ -1704,7 +1705,8 @@ fn test_cp_reflink_always_override() {
scene.fixtures.mkdir(MOUNTPOINT);
let mount = scene
.cmd_keepenv("sudo")
.cmd("sudo")
.keep_env()
.args(&["-E", "--non-interactive", "mount", DISK, MOUNTPOINT])
.run();
@@ -1730,7 +1732,8 @@ fn test_cp_reflink_always_override() {
.succeeds();
scene
.cmd_keepenv("sudo")
.cmd("sudo")
.keep_env()
.args(&["-E", "--non-interactive", "umount", MOUNTPOINT])
.succeeds();
}
@@ -2524,9 +2527,9 @@ fn test_src_base_dot() {
let at = ts.fixtures.clone();
at.mkdir("x");
at.mkdir("y");
let mut ucmd = UCommand::new(ts.bin_path, &Some(ts.util_name), at.plus("y"), true);
ucmd.args(&["--verbose", "-r", "../x/.", "."])
ts.ucmd()
.current_dir(at.plus("y"))
.args(&["--verbose", "-r", "../x/.", "."])
.succeeds()
.no_stderr()
.no_stdout();
+2 -1
View File
@@ -156,7 +156,8 @@ fn test_unset_variable() {
// This test depends on the HOME variable being pre-defined by the
// default shell
let out = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("-u")
.arg("HOME")
.succeeds()
+4 -2
View File
@@ -425,7 +425,8 @@ fn test_mktemp_tmpdir_one_arg() {
let scene = TestScenario::new(util_name!());
let result = scene
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("--tmpdir")
.arg("apt-key-gpghome.XXXXXXXXXX")
.succeeds();
@@ -438,7 +439,8 @@ fn test_mktemp_directory_tmpdir() {
let scene = TestScenario::new(util_name!());
let result = scene
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("--directory")
.arg("--tmpdir")
.arg("apt-key-gpghome.XXXXXXXXXX")
+34 -17
View File
@@ -20,7 +20,8 @@ fn test_nproc_all_omp() {
assert!(nproc > 0);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "60")
.succeeds();
@@ -28,7 +29,8 @@ fn test_nproc_all_omp() {
assert_eq!(nproc_omp, 60);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "1") // Has no effect
.arg("--all")
.succeeds();
@@ -37,7 +39,8 @@ fn test_nproc_all_omp() {
// If the parsing fails, returns the number of CPU
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "incorrectnumber") // returns the number CPU
.succeeds();
let nproc_omp: u8 = result.stdout_str().trim().parse().unwrap();
@@ -51,7 +54,8 @@ fn test_nproc_ignore() {
if nproc_total > 1 {
// Ignore all CPU but one
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("--ignore")
.arg((nproc_total - 1).to_string())
.succeeds();
@@ -59,7 +63,8 @@ fn test_nproc_ignore() {
assert_eq!(nproc, 1);
// Ignore all CPU but one with a string
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("--ignore= 1")
.succeeds();
let nproc: u8 = result.stdout_str().trim().parse().unwrap();
@@ -70,7 +75,8 @@ fn test_nproc_ignore() {
#[test]
fn test_nproc_ignore_all_omp() {
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "42")
.arg("--ignore=40")
.succeeds();
@@ -81,7 +87,8 @@ fn test_nproc_ignore_all_omp() {
#[test]
fn test_nproc_omp_limit() {
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "42")
.env("OMP_THREAD_LIMIT", "0")
.succeeds();
@@ -89,7 +96,8 @@ fn test_nproc_omp_limit() {
assert_eq!(nproc, 42);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "42")
.env("OMP_THREAD_LIMIT", "2")
.succeeds();
@@ -97,7 +105,8 @@ fn test_nproc_omp_limit() {
assert_eq!(nproc, 2);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "42")
.env("OMP_THREAD_LIMIT", "2bad")
.succeeds();
@@ -109,14 +118,16 @@ fn test_nproc_omp_limit() {
assert!(nproc_system > 0);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_THREAD_LIMIT", "1")
.succeeds();
let nproc: u8 = result.stdout_str().trim().parse().unwrap();
assert_eq!(nproc, 1);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "0")
.env("OMP_THREAD_LIMIT", "")
.succeeds();
@@ -124,7 +135,8 @@ fn test_nproc_omp_limit() {
assert_eq!(nproc, nproc_system);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "")
.env("OMP_THREAD_LIMIT", "")
.succeeds();
@@ -132,7 +144,8 @@ fn test_nproc_omp_limit() {
assert_eq!(nproc, nproc_system);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "2,2,1")
.env("OMP_THREAD_LIMIT", "")
.succeeds();
@@ -140,7 +153,8 @@ fn test_nproc_omp_limit() {
assert_eq!(2, nproc);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "2,ignored")
.env("OMP_THREAD_LIMIT", "")
.succeeds();
@@ -148,7 +162,8 @@ fn test_nproc_omp_limit() {
assert_eq!(2, nproc);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "2,2,1")
.env("OMP_THREAD_LIMIT", "0")
.succeeds();
@@ -156,7 +171,8 @@ fn test_nproc_omp_limit() {
assert_eq!(2, nproc);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "2,2,1")
.env("OMP_THREAD_LIMIT", "1bad")
.succeeds();
@@ -164,7 +180,8 @@ fn test_nproc_omp_limit() {
assert_eq!(2, nproc);
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.env("OMP_NUM_THREADS", "29,2,1")
.env("OMP_THREAD_LIMIT", "1bad")
.succeeds();
+4 -2
View File
@@ -8,7 +8,8 @@ fn test_get_all() {
assert_eq!(env::var(key), Ok("VALUE".to_string()));
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.succeeds()
.stdout_contains("HOME=")
.stdout_contains("KEY=VALUE");
@@ -21,7 +22,8 @@ fn test_get_var() {
assert_eq!(env::var(key), Ok("VALUE".to_string()));
let result = TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("KEY")
.succeeds();
+1 -1
View File
@@ -60,7 +60,7 @@ fn symlinked_env() -> Env {
// Note: on Windows this requires admin permissions
at.symlink_dir("subdir", "symdir");
let root = PathBuf::from(at.root_dir_resolved());
ucmd.raw.current_dir(root.join("symdir"));
ucmd.current_dir(root.join("symdir"));
#[cfg(not(windows))]
ucmd.env("PWD", root.join("symdir"));
Env {
+14 -7
View File
@@ -31,7 +31,8 @@ fn test_buffer_sizes() {
let buffer_sizes = ["0", "50K", "50k", "1M", "100M"];
for buffer_size in &buffer_sizes {
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("-n")
.arg("-S")
.arg(buffer_size)
@@ -44,7 +45,8 @@ fn test_buffer_sizes() {
let buffer_sizes = ["1000G", "10T"];
for buffer_size in &buffer_sizes {
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("-n")
.arg("-S")
.arg(buffer_size)
@@ -918,7 +920,8 @@ fn test_compress_merge() {
fn test_compress_fail() {
#[cfg(not(windows))]
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.args(&[
"ext_sort.txt",
"-n",
@@ -934,7 +937,8 @@ fn test_compress_fail() {
// So, don't check the output
#[cfg(windows)]
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.args(&[
"ext_sort.txt",
"-n",
@@ -949,7 +953,8 @@ fn test_compress_fail() {
#[test]
fn test_merge_batches() {
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.timeout(Duration::from_secs(120))
.args(&["ext_sort.txt", "-n", "-S", "150b"])
.succeeds()
@@ -959,7 +964,8 @@ fn test_merge_batches() {
#[test]
fn test_merge_batch_size() {
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.arg("--batch-size=2")
.arg("-m")
.arg("--unique")
@@ -1067,7 +1073,8 @@ fn test_output_is_input() {
at.touch("file");
at.append("file", input);
scene
.ucmd_keepenv()
.ucmd()
.keep_env()
.args(&["-m", "-u", "-o", "file", "file", "file", "file"])
.succeeds();
assert_eq!(at.read("file"), input);
+6 -10
View File
@@ -300,19 +300,15 @@ fn test_invalid_utf8_integer_compare() {
let source = [0x66, 0x6f, 0x80, 0x6f];
let arg = OsStr::from_bytes(&source[..]);
let mut cmd = new_ucmd!();
cmd.arg("123").arg("-ne");
cmd.raw.arg(arg);
cmd.run()
new_ucmd!()
.args(&[OsStr::new("123"), OsStr::new("-ne"), arg])
.run()
.code_is(2)
.stderr_is("test: invalid integer $'fo\\x80o'\n");
let mut cmd = new_ucmd!();
cmd.raw.arg(arg);
cmd.arg("-eq").arg("456");
cmd.run()
new_ucmd!()
.args(&[arg, OsStr::new("-eq"), OsStr::new("456")])
.run()
.code_is(2)
.stderr_is("test: invalid integer $'fo\\x80o'\n");
}
+2 -1
View File
@@ -10,7 +10,8 @@ fn test_invalid_arg() {
#[test]
fn test_uptime() {
TestScenario::new(util_name!())
.ucmd_keepenv()
.ucmd()
.keep_env()
.succeeds()
.stdout_contains("load average:")
.stdout_contains(" up ");
+2 -1
View File
@@ -22,7 +22,8 @@ fn test_users_check_name() {
// note: clippy::needless_borrow *false positive*
#[allow(clippy::needless_borrow)]
let expected = TestScenario::new(&util_name)
.cmd_keepenv(util_name)
.cmd(util_name)
.keep_env()
.env("LC_ALL", "C")
.succeeds()
.stdout_move_str();
+314 -183
View File
File diff suppressed because it is too large Load Diff