Files
RedBear-OS/local/recipes/system/redbear-netctl-console/source/tests/ncurses_smoke.rs
T
2026-04-16 12:44:35 +01:00

102 lines
2.9 KiB
Rust

use std::fs;
use std::io::Write;
use std::path::PathBuf;
use std::process::{Command, Stdio};
use std::time::{SystemTime, UNIX_EPOCH};
fn temp_root(prefix: &str) -> PathBuf {
let stamp = SystemTime::now()
.duration_since(UNIX_EPOCH)
.unwrap()
.as_nanos();
let path = std::env::temp_dir().join(format!("{prefix}-{stamp}"));
fs::create_dir_all(&path).unwrap();
path
}
#[test]
fn ncurses_binary_launches_and_quits_on_q() {
if Command::new("script")
.arg("--version")
.stdout(Stdio::null())
.stderr(Stdio::null())
.status()
.is_err()
{
eprintln!("skipping ncurses smoke test: 'script' utility not available");
return;
}
let profile_dir = temp_root("rbos-netctl-console-tty-profiles");
let wifictl_root = temp_root("rbos-netctl-console-tty-wifictl");
let netcfg_root = temp_root("rbos-netctl-console-tty-netcfg");
fs::create_dir_all(wifictl_root.join("ifaces/wlan0")).unwrap();
fs::create_dir_all(netcfg_root.join("ifaces/wlan0/addr")).unwrap();
fs::write(
netcfg_root.join("ifaces/wlan0/addr/list"),
"Not configured\n",
)
.unwrap();
fs::write(
wifictl_root.join("ifaces/wlan0/status"),
"device-detected\n",
)
.unwrap();
fs::write(wifictl_root.join("ifaces/wlan0/link-state"), "link=down\n").unwrap();
fs::write(
wifictl_root.join("ifaces/wlan0/firmware-status"),
"firmware=present\n",
)
.unwrap();
fs::write(
wifictl_root.join("ifaces/wlan0/transport-status"),
"transport=ready\n",
)
.unwrap();
fs::write(
wifictl_root.join("ifaces/wlan0/transport-init-status"),
"transport_init=not-run\n",
)
.unwrap();
fs::write(
wifictl_root.join("ifaces/wlan0/activation-status"),
"activation=not-run\n",
)
.unwrap();
fs::write(
wifictl_root.join("ifaces/wlan0/connect-result"),
"connect_result=not-run\n",
)
.unwrap();
fs::write(
wifictl_root.join("ifaces/wlan0/disconnect-result"),
"disconnect_result=not-run\n",
)
.unwrap();
let mut child = Command::new("script")
.args([
"-qec",
env!("CARGO_BIN_EXE_redbear-netctl-console"),
"/dev/null",
])
.env("REDBEAR_NETCTL_PROFILE_DIR", &profile_dir)
.env("REDBEAR_WIFICTL_ROOT", &wifictl_root)
.env("REDBEAR_NETCFG_ROOT", &netcfg_root)
.env("TERM", "xterm")
.stdin(Stdio::piped())
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.spawn()
.unwrap();
child.stdin.as_mut().unwrap().write_all(b"q").unwrap();
let output = child.wait_with_output().unwrap();
assert!(
output.status.success(),
"ncurses console failed: stdout={} stderr={}",
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
);
}