Bläddra i källkod

Merge pull request #409 from abhijeetbhagat/integration-tests-cli-options

add list, run cli flags to integration tests.
Dave Tucker 2 år sedan
förälder
incheckning
a0b0399dcd
2 ändrade filer med 65 tillägg och 6 borttagningar
  1. 2 1
      test/integration-test/Cargo.toml
  2. 63 5
      test/integration-test/src/main.rs

+ 2 - 1
test/integration-test/Cargo.toml

@@ -7,6 +7,8 @@ publish = false
 [dependencies]
 anyhow = "1"
 aya = { path = "../../aya" }
+clap = { version = "3", features = ["derive"] }
+env_logger = "0.9"
 inventory = "0.2"
 integration-test-macros = { path = "../integration-test-macros" }
 lazy_static = "1"
@@ -14,4 +16,3 @@ libc = { version = "0.2.105" }
 log = "0.4"
 object = { version = "0.29", default-features = false, features = ["std", "read_core", "elf"] }
 regex = "1"
-env_logger = "0.9"

+ 63 - 5
test/integration-test/src/main.rs

@@ -3,14 +3,72 @@ use log::info;
 mod tests;
 use tests::IntegrationTest;
 
+use clap::Parser;
+
+#[derive(Debug, Parser)]
+#[clap(author, version, about, long_about = None)]
+#[clap(propagate_version = true)]
+pub struct RunOptions {
+    #[clap(short, long, value_parser)]
+    tests: Option<Vec<String>>,
+}
+
+#[derive(Debug, Parser)]
+struct Cli {
+    #[clap(subcommand)]
+    command: Option<Command>,
+}
+
+#[derive(Debug, Parser)]
+enum Command {
+    /// Run one or more tests: ... -- run -t test1 -t test2
+    Run(RunOptions),
+    /// List all the tests: ... -- list
+    List,
+}
+
+macro_rules! exec_test {
+    ($test:expr) => {{
+        info!("Running {}", $test.name);
+        if let Err(e) = ($test.test_fn)() {
+            panic!("{}", e)
+        }
+    }};
+}
+
+macro_rules! exec_all_tests {
+    () => {{
+        for t in inventory::iter::<IntegrationTest> {
+            exec_test!(t)
+        }
+    }};
+}
+
 fn main() -> anyhow::Result<()> {
     env_logger::init();
 
-    // Run the tests
-    for t in inventory::iter::<IntegrationTest> {
-        info!("Running {}", t.name);
-        if let Err(e) = (t.test_fn)() {
-            panic!("{}", e)
+    let cli = Cli::parse();
+
+    match &cli.command {
+        Some(Command::Run(opts)) => match &opts.tests {
+            Some(tests) => {
+                for t in inventory::iter::<IntegrationTest> {
+                    if tests.contains(&t.name.into()) {
+                        exec_test!(t)
+                    }
+                }
+            }
+            None => {
+                exec_all_tests!()
+            }
+        },
+        Some(Command::List) => {
+            for t in inventory::iter::<IntegrationTest> {
+                info!("{}", t.name);
+            }
+        }
+        None => {
+            exec_all_tests!()
         }
     }