Advance netctl and networking tools
Red Bear OS Team
This commit is contained in:
@@ -0,0 +1,101 @@
|
||||
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)
|
||||
);
|
||||
}
|
||||
Reference in New Issue
Block a user