diff --git a/README.md b/README.md index f101bb6..e6ddd1e 100644 --- a/README.md +++ b/README.md @@ -42,6 +42,10 @@ Options: Force usage of IPv6 -d, --disable-dynamic-max-payload-size Disables dynamically skipping tests with larger payload sizes if the tests for the previous payload size took longer than 5 seconds + --download-only + Test download speed only + --upload-only + Test upload speed only -h, --help Print help -V, --version diff --git a/examples/simple_speedtest.rs b/examples/simple_speedtest.rs index 4aeea46..a34cc1d 100644 --- a/examples/simple_speedtest.rs +++ b/examples/simple_speedtest.rs @@ -10,6 +10,8 @@ fn main() { ipv4: false, // don't force ipv4 usage ipv6: false, // don't force ipv6 usage verbose: false, + upload_only: false, + download_only: false, nr_tests: 5, nr_latency_tests: 20, max_payload_size: PayloadSize::M10, diff --git a/src/lib.rs b/src/lib.rs index 5186ca8..5438b91 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -72,6 +72,26 @@ pub struct SpeedTestCLIOptions { /// size took longer than 5 seconds #[arg(short, long)] pub disable_dynamic_max_payload_size: bool, + + /// Test download speed only + #[arg(long, conflicts_with = "upload_only")] + pub download_only: bool, + + /// Test upload speed only + #[arg(long, conflicts_with = "download_only")] + pub upload_only: bool, +} + +impl SpeedTestCLIOptions { + /// Returns whether download tests should be performed + pub fn should_download(&self) -> bool { + self.download_only || !self.upload_only + } + + /// Returns whether upload tests should be performed + pub fn should_upload(&self) -> bool { + self.upload_only || !self.download_only + } } fn parse_payload_size(input_string: &str) -> Result { diff --git a/src/speedtest.rs b/src/speedtest.rs index 9a3632f..262071f 100644 --- a/src/speedtest.rs +++ b/src/speedtest.rs @@ -88,25 +88,33 @@ pub fn speed_test(client: Client, options: SpeedTestCLIOptions) -> Vec