warriors/trisha/cli/tests/node_status.rs

#![cfg(unix)]
use std::{os::unix::fs::PermissionsExt, process::Command};

#[test]
fn successful_cli_exit_without_a_node_reply_is_a_failed_status() {
    let directory = std::env::temp_dir().join(format!("trisha-node-status-{}", std::process::id()));
    std::fs::create_dir_all(&directory).unwrap();
    struct Cleanup(std::path::PathBuf);
    impl Drop for Cleanup {
        fn drop(&mut self) {
            let _ = std::fs::remove_dir_all(&self.0);
        }
    }
    let _cleanup = Cleanup(directory.clone());
    let executable = directory.join("neptune-cli");
    std::fs::write(&executable, "#!/bin/sh\nprintf '%s\\n' 'This command requires a connection to `neptune-core`, but that connection could not be established. Is `neptune-core` running?'\nexit 0\n").unwrap();
    std::fs::set_permissions(&executable, std::fs::Permissions::from_mode(0o755)).unwrap();
    let run = || {
        Command::new(env!("CARGO_BIN_EXE_trisha"))
            .env("PATH", &directory)
            .args(["node", "status"])
            .output()
            .unwrap()
    };
    let offline = run();
    assert!(!offline.status.success());
    assert!(offline.stdout.is_empty());
    assert!(String::from_utf8_lossy(&offline.stderr).contains("could not be established"));
    std::fs::write(&executable, "#!/bin/sh\ncase \"$3\" in\nblock-height) printf '123\\n';;\nmempool-tx-count) printf '7\\n';;\npeer-info) printf 'peer fixture\\n';;\nesac\n").unwrap();
    let connected = run();
    assert!(
        connected.status.success(),
        "{}",
        String::from_utf8_lossy(&connected.stderr)
    );
    let output = String::from_utf8_lossy(&connected.stdout);
    assert!(output.contains("Block height : 123"));
    assert!(output.contains("Mempool txs  : 7"));
    std::fs::write(&executable, "#!/bin/sh\nprintf 'not-a-height\\n'\n").unwrap();
    assert!(!run().status.success());
}

Graph