Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 55 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ pub struct SpeedTestCLIOptions {
pub nr_tests: u32,

/// Number of latency tests to run
#[arg(long, default_value_t = 25)]
#[arg(value_parser = clap::value_parser!(u32).range(1..1000), long, default_value_t = 25)]
pub nr_latency_tests: u32,

/// The max payload size in bytes to use [100k, 1m, 10m, 25m or 100m]
Expand Down Expand Up @@ -231,4 +231,58 @@ mod tests {
assert!(!options.should_upload());
assert!(options.should_download());
}

#[test]
fn test_nr_tests_range_validation() {
// Test that nr_tests rejects 0
let result = SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-tests", "0"]);
assert!(result.is_err());
let err = result.unwrap_err();
assert!(err.to_string().contains("0 is not in 1..1000"));

// Test that nr_tests accepts 1 (minimum valid value)
let result = SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-tests", "1"]);
assert!(result.is_ok());
assert_eq!(result.unwrap().nr_tests, 1);

// Test that nr_tests accepts 999 (maximum valid value)
let result = SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-tests", "999"]);
assert!(result.is_ok());
assert_eq!(result.unwrap().nr_tests, 999);

// Test that nr_tests rejects 1000
let result = SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-tests", "1000"]);
assert!(result.is_err());
let err = result.unwrap_err();
assert!(err.to_string().contains("1000 is not in 1..1000"));
}

#[test]
fn test_nr_latency_tests_range_validation() {
// Test that nr_latency_tests rejects 0
let result =
SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-latency-tests", "0"]);
assert!(result.is_err());
let err = result.unwrap_err();
assert!(err.to_string().contains("0 is not in 1..1000"));

// Test that nr_latency_tests accepts 1 (minimum valid value)
let result =
SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-latency-tests", "1"]);
assert!(result.is_ok());
assert_eq!(result.unwrap().nr_latency_tests, 1);

// Test that nr_latency_tests accepts 999 (maximum valid value)
let result =
SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-latency-tests", "999"]);
assert!(result.is_ok());
assert_eq!(result.unwrap().nr_latency_tests, 999);

// Test that nr_latency_tests rejects 1000
let result =
SpeedTestCLIOptions::try_parse_from(vec!["cfspeedtest", "--nr-latency-tests", "1000"]);
assert!(result.is_err());
let err = result.unwrap_err();
assert!(err.to_string().contains("1000 is not in 1..1000"));
}
}
Loading