use std::process::Command; fn command() -> Command { let mut cmd = Command::new(env!("CARGO_BIN_EXE_panda-rpki")); cmd.env_remove("PANDA_RPKI_LOG_LEVEL") .env_remove("PANDA_RPKI_LOG_FORMAT"); cmd } #[test] fn help_is_successful_and_goes_to_stdout() { for args in [vec![], vec!["--help"], vec!["-h"]] { let result = command().args(args).output().unwrap(); assert!(result.status.success()); assert!(String::from_utf8_lossy(&result.stdout).contains("panda-rpki")); assert!(result.stderr.is_empty()); } } #[test] fn invalid_command_returns_two_without_stdout() { let result = command().arg("not-a-command").output().unwrap(); assert_eq!(result.status.code(), Some(2)); assert!(result.stdout.is_empty()); assert!(String::from_utf8_lossy(&result.stderr).contains("unknown command")); } #[test] fn malformed_validation_arguments_do_not_create_outputs() { let directory = tempfile::tempdir().unwrap(); for args in [ vec!["validate", "--out", "output"], vec!["validate", "--unknown", "value"], vec!["validate", "--out"], ] { let result = command() .current_dir(directory.path()) .args(args) .output() .unwrap(); assert_eq!(result.status.code(), Some(2)); assert!(result.stdout.is_empty()); assert_eq!(std::fs::read_dir(directory.path()).unwrap().count(), 0); } } #[test] fn missing_daemon_state_root_fails_without_creating_state() { let directory = tempfile::tempdir().unwrap(); let result = command() .current_dir(directory.path()) .args([ "daemon", "--", "--tal", "missing.tal", "--ta", "missing.cer", ]) .output() .unwrap(); assert_eq!(result.status.code(), Some(2)); assert_eq!(std::fs::read_dir(directory.path()).unwrap().count(), 0); }