4b76deaa60
Red Bear OS Team
102 lines
2.9 KiB
Rust
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)
|
|
);
|
|
}
|