From 1f13165faed29e0eca1a38358bd7356b322f6f55 Mon Sep 17 00:00:00 2001 From: Philipp Schuster Date: Wed, 11 Jun 2025 18:19:32 +0200 Subject: [PATCH] tests: prepare common test infrastructure for CLI args Signed-off-by: Philipp Schuster On-behalf-of: SAP philipp.schuster@sap.com --- src/bin/ch-remote.rs | 40 ++++++++++++++++++++++++++++++++++++++++ src/main.rs | 16 +++++----------- src/test_util.rs | 24 ++++++++++++++++++++++++ 3 files changed, 69 insertions(+), 11 deletions(-) create mode 100644 src/test_util.rs diff --git a/src/bin/ch-remote.rs b/src/bin/ch-remote.rs index c4f5fb4e0..56d4e59fd 100644 --- a/src/bin/ch-remote.rs +++ b/src/bin/ch-remote.rs @@ -3,6 +3,10 @@ // SPDX-License-Identifier: Apache-2.0 // +#[cfg(test)] +#[path = "../test_util.rs"] +mod test_util; + use std::io::Read; use std::marker::PhantomData; use std::os::unix::net::UnixStream; @@ -1132,3 +1136,39 @@ fn main() { process::exit(1) }; } + +#[cfg(test)] +mod tests { + use std::cmp::Ordering; + + use super::*; + use crate::test_util::tests::assert_args_sorted; + + #[test] + fn test_cli_args_sorted() { + let args = get_cli_args(); + assert_args_sorted(|| args.iter()); + } + + #[test] + fn test_cli_commands_sorted() { + let commands = get_cli_commands_sorted(); + + // check commands itself are sorted + let iter = commands.iter().zip(commands.iter().skip(1)); + for (command, next) in iter { + assert_ne!( + command.get_name().cmp(next.get_name()), + Ordering::Greater, + "commands not alphabetically sorted: command={}, next={}", + command.get_name(), + next.get_name() + ); + } + + // check args of commands sorted + for command in commands { + assert_args_sorted(|| command.get_arguments()); + } + } +} diff --git a/src/main.rs b/src/main.rs index cfa6a2481..9d972bbce 100644 --- a/src/main.rs +++ b/src/main.rs @@ -3,6 +3,9 @@ // SPDX-License-Identifier: Apache-2.0 // +#[cfg(test)] +mod test_util; + use std::fs::File; use std::os::unix::io::{AsRawFd, FromRawFd, RawFd}; use std::sync::mpsc::channel; @@ -894,7 +897,6 @@ fn main() { #[cfg(test)] mod unit_tests { - use std::cmp::Ordering; use std::path::PathBuf; use vmm::config::VmParams; @@ -905,6 +907,7 @@ mod unit_tests { PayloadConfig, RngConfig, VmConfig, }; + use crate::test_util::tests::assert_args_sorted; use crate::{create_app, get_cli_options_sorted, prepare_default_values}; fn get_vm_config_from_vec(args: &[&str]) -> VmConfig { @@ -2014,15 +2017,6 @@ mod unit_tests { let (default_vcpus, default_memory, default_rng) = prepare_default_values(); let args = get_cli_options_sorted(default_vcpus, default_memory, default_rng); - let iter = args.iter().zip(args.iter().skip(1)); - for (elem, next) in iter { - assert_ne!( - elem.get_id().cmp(next.get_id()), - Ordering::Greater, - "items not alphabetically sorted: elem={}, next={}", - elem.get_id(), - next.get_id() - ); - } + assert_args_sorted(|| args.iter()) } } diff --git a/src/test_util.rs b/src/test_util.rs new file mode 100644 index 000000000..6678da551 --- /dev/null +++ b/src/test_util.rs @@ -0,0 +1,24 @@ +// Copyright © 2025 Cyberus Technology GmbH +// +// SPDX-License-Identifier: Apache-2.0 +// + +#[cfg(test)] +pub mod tests { + use std::cmp::Ordering; + + use clap::Arg; + + pub fn assert_args_sorted<'a, F: Fn() -> R, R: Iterator>(get_base_iter: F) { + let iter = get_base_iter().zip(get_base_iter().skip(1)); + for (arg, next) in iter { + assert_ne!( + arg.get_id().cmp(next.get_id()), + Ordering::Greater, + "args not alphabetically sorted: arg={}, next={}", + arg.get_id(), + next.get_id() + ); + } + } +}