From b2574f2b45b5e0b77a8b6d0405ba9e480a5a79a2 Mon Sep 17 00:00:00 2001 From: Andrea Manzini Date: Sun, 26 May 2024 18:26:46 +0200 Subject: [PATCH] Test match using regular expressions --- Cargo.lock | 1 + Cargo.toml | 1 + tests/integration_test.rs | 63 +++++++++++++++++---------------------- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 814e943..6edffcb 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -765,6 +765,7 @@ dependencies = [ "mockall", "nix", "procfs", + "regex", "tempfile", "tokio", "windows-sys 0.52.0", diff --git a/Cargo.toml b/Cargo.toml index 98d84f8..09883e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -40,3 +40,4 @@ features = [ assert_cmd = "2.0.14" tempfile = "3.10.1" mockall = "0.12.1" +regex = "1.10.4" diff --git a/tests/integration_test.rs b/tests/integration_test.rs index bbe4ef0..5a011d0 100644 --- a/tests/integration_test.rs +++ b/tests/integration_test.rs @@ -1,4 +1,5 @@ mod utils; +use regex::bytes::Regex; use utils::start_listener_process; use assert_cmd::Command; @@ -9,6 +10,15 @@ const MOCK_PROCESS_NAME: &str = "mock_process"; #[cfg(windows)] const MOCK_PROCESS_NAME: &str = "mock_process.exe"; +// test helper +fn assert_match(data: &[u8], msg: &str, port: u16) { + let re = Regex::new(&format!( + r"{msg} process '(\/tmp\/\.tmp\w+\/)?{MOCK_PROCESS_NAME}' listening on port {port}\n" + )) + .unwrap(); + assert!(re.is_match(data)); +} + #[test] fn test_basic_kill_no_process() { let mut cmd = Command::cargo_bin("killport").unwrap(); @@ -23,13 +33,10 @@ fn test_basic_kill_no_process() { fn test_basic_kill_process() { let tempdir = tempdir().unwrap(); let tempdir_path = tempdir.path(); - let mut child = start_listener_process(tempdir_path, 8080); - + let mut child = start_listener_process(tempdir_path, 8081); let mut cmd = Command::cargo_bin("killport").unwrap(); - cmd.args(&["8080"]).assert().success().stdout(format!( - "Successfully killed process '{MOCK_PROCESS_NAME}' listening on port 8080\n" - )); - + let command = cmd.args(&["8081"]).assert().success(); + assert_match(&command.get_output().stdout, "Successfully killed", 8081); // Clean up let _ = child.kill(); let _ = child.wait(); @@ -42,15 +49,10 @@ fn test_signal_handling() { let tempdir_path = tempdir.path(); for signal in ["sighup", "sigint", "sigkill"].iter() { - let mut child = start_listener_process(tempdir_path, 8081); + let mut child = start_listener_process(tempdir_path, 8082); let mut cmd = Command::cargo_bin("killport").unwrap(); - cmd.args(&["8081", "-s", signal]) - .assert() - .success() - .stdout(format!( - "Successfully killed process '{MOCK_PROCESS_NAME}' listening on port 8081\n" - )); - + let command = cmd.args(&["8082", "-s", signal]).assert().success(); + assert_match(&command.get_output().stdout, "Successfully killed", 8082); // Clean up let _ = child.kill(); let _ = child.wait(); @@ -64,36 +66,32 @@ fn test_mode_option() { let tempdir_path = tempdir.path(); for mode in ["auto", "process"].iter() { - let mut child = start_listener_process(tempdir_path, 8082); + let mut child = start_listener_process(tempdir_path, 8083); let mut cmd = Command::cargo_bin("killport").unwrap(); - cmd.args(&["8082", "--mode", mode]) - .assert() - .success() - .stdout(format!( - "Successfully killed process '{MOCK_PROCESS_NAME}' listening on port 8082\n" - )); + let command = cmd.args(&["8083", "--mode", mode]).assert().success(); + assert_match(&command.get_output().stdout, "Successfully killed", 8083); // Clean up let _ = child.kill(); let _ = child.wait(); } let mut cmd = Command::cargo_bin("killport").unwrap(); - cmd.args(&["8082", "--mode", "auto"]) + cmd.args(&["8083", "--mode", "auto"]) .assert() .success() - .stdout(format!("No service found using port 8082\n")); + .stdout(format!("No service found using port 8083\n")); let mut cmd = Command::cargo_bin("killport").unwrap(); - cmd.args(&["8082", "--mode", "process"]) + cmd.args(&["8083", "--mode", "process"]) .assert() .success() - .stdout(format!("No process found using port 8082\n")); + .stdout(format!("No process found using port 8083\n")); let mut cmd = Command::cargo_bin("killport").unwrap(); - cmd.args(&["8082", "--mode", "container"]) + cmd.args(&["8083", "--mode", "container"]) .assert() .success() - .stdout(format!("No container found using port 8082\n")); + .stdout(format!("No container found using port 8083\n")); } /// Tests the `--dry-run` option to ensure no actual killing of the process. @@ -101,16 +99,11 @@ fn test_mode_option() { fn test_dry_run_option() { let tempdir = tempdir().unwrap(); let tempdir_path = tempdir.path(); - let mut child = start_listener_process(tempdir_path, 8083); + let mut child = start_listener_process(tempdir_path, 8084); let mut cmd = Command::cargo_bin("killport").unwrap(); - cmd.args(&["8083", "--dry-run"]) - .assert() - .success() - .stdout(format!( - "Would kill process '{MOCK_PROCESS_NAME}' listening on port 8083\n" - )); - + let command = cmd.args(&["8084", "--dry-run"]).assert().success(); + assert_match(&command.get_output().stdout, "Would kill", 8084); // Clean up let _ = child.kill(); let _ = child.wait();