aegis-admin-tool 0.3.6

Deploy and administer an Aegis installation with local GCP credentials.
use std::process::Command;

fn invoke(binary: &str, args: &[&str]) -> capulus::process::CommandOutput {
    capulus::process::CaptureOptions::default()
        .validate()
        .unwrap()
        .run(Command::new(binary).args(args), None)
        .unwrap()
}

#[test]
fn administration_is_a_separate_versioned_cli() {
    let admin = env!("CARGO_BIN_EXE_aegis-admin");
    let version = invoke(admin, &["--version"]);
    assert!(version.status.success());
    assert_eq!(
        version.stdout.trim(),
        concat!("aegis-admin ", env!("CARGO_PKG_VERSION"))
    );
    let help = invoke(admin, &["--help"]);
    assert!(help.status.success());
    assert!(help.stdout.contains("setup"));
    assert!(!help.stdout.contains("--api-base"));
    assert!(help.stderr.is_empty());
    for args in [
        &["ssh"][..],
        &["agent", "serve"],
        &["--api-base", "https://example.com"],
    ] {
        assert_eq!(invoke(admin, args).status.code(), Some(2));
    }
    let template = invoke(
        admin,
        &[
            "--progress",
            "plain",
            "--color",
            "never",
            "namespace-template",
        ],
    );
    assert!(template.status.success());
    serde_json::from_str::<serde_json::Value>(&template.stdout).unwrap();
    assert!(!template.stderr.contains('\x1b'));
}