| // Copyright 2023 The Fuchsia Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| use anyhow::Error; |
| |
| mod errors; |
| mod opts; |
| mod run_tests; |
| mod test_config; |
| |
| const INVALID_ARGS_CONFIG_EXIT_CODE: i32 = 222; |
| |
| // We need multiple threads to stream stdout/err in parallel until we can switch this to use tokio. |
| #[fuchsia::main(threads = 2)] |
| async fn main() { |
| let args = opts::TestPilotArgs::from_env_and_cmd().unwrap(); |
| let test_config = parse_test_config(&args) |
| .map_err(|e| { |
| eprintln!("Invalid config: {}", e); |
| std::process::exit(INVALID_ARGS_CONFIG_EXIT_CODE); |
| }) |
| .unwrap(); |
| let _ = args.validate_config(&test_config).map_err(|e| { |
| eprintln!("Invalid args: {}", e); |
| std::process::exit(INVALID_ARGS_CONFIG_EXIT_CODE); |
| }); |
| |
| // TODO(b/294567715): Map error to output format. |
| match run_tests::run_test(&args, &test_config.into()).await { |
| Ok(exit_code) => std::process::exit(exit_code.code().unwrap()), |
| Err(e) => { |
| eprint!("Error running test: {}", e); |
| std::process::exit(INVALID_ARGS_CONFIG_EXIT_CODE); |
| } |
| } |
| } |
| |
| pub fn parse_test_config( |
| args: &opts::TestPilotArgs, |
| ) -> Result<test_config::TestConfiguration, Error> { |
| test_config::TestConfiguration::try_from(args.test_config.as_path()) |
| } |