tests/util: Refactor UCommand and TestScenario.

Summary of changes in UCommand:
* Extend UCommand by builder methods and simplify methods in TestScenario
* Simplify code structures where possible. Add documentation.
* Store bin_path as PathBuf and util_name as String in all structs
* Remove UCommand::util and make bin_path, temp_dir private
* Rename UCommand::with_limit -> UCommand::limit

Summary of changes in TestScenario:
* Rename some parameters in TestScenario methods to be more descriptive
* Remove ucmd_keepenv, cmd_keepenv from TestScenario. Use UCommand::keep_env instead.
This commit is contained in:
Joining7943
2023-02-18 23:38:20 +01:00
parent fdf0f96a01
commit 1c230fd779
12 changed files with 276 additions and 185 deletions
+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();
}
+1 -1
View File
@@ -48,7 +48,7 @@ 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);
panic!("{ucmd}: failed");
}
let perms = at.metadata(TEST_FILE).permissions().mode();
+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;
}
+7 -4
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();
}
+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();
+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);
+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();
+198 -141
View File
File diff suppressed because it is too large Load Diff