Files
MetaCrate/programs/tests/webrtc_test_cli.rs
Chili Palmer 66f10baa1b
Some checks failed
Native code generation / deterministic (push) Failing after 2m5s
Imaging and meshing gate / native (push) Failing after 5m37s
JPEG 2000 feature / linux (push) Successful in 2m49s
Native Rust workspace compile / compile (push) Failing after 17m32s
Skia feature / linux (push) Successful in 31m32s
Implement native WebRtcTest validation (#96)
2026-08-11 15:46:30 +00:00

104 lines
3.0 KiB
Rust

use std::process::{Command, Output, Stdio};
const EXIT_USAGE: i32 = 2;
fn run(args: &[&str]) -> Output {
Command::new(env!("CARGO_BIN_EXE_webrtc-test"))
.args(args)
.env_remove("GRID_FIRST_NAME")
.env_remove("GRID_LAST_NAME")
.env_remove("GRID_PASSWORD")
.env_remove("GRID_LOGIN_URL")
.stdin(Stdio::null())
.stdout(Stdio::piped())
.stderr(Stdio::piped())
.output()
.expect("run webrtc-test")
}
fn text(bytes: &[u8]) -> &str {
std::str::from_utf8(bytes).expect("UTF-8 process output")
}
#[test]
fn help_documents_native_prerequisites_fake_flow_and_live_gates() {
let output = run(&["--help"]);
assert!(output.status.success());
let help = text(&output.stdout);
for marker in [
"--fake",
"--list-devices",
"--allow-live-login",
"--confirm-live-login",
"--allow-session-audio",
"--input-device",
"--output-device",
"--wav",
"ICE/DTLS/SRTP/SCTP",
"Native libopus",
"--features real-audio",
] {
assert!(help.contains(marker), "help omitted {marker}:\n{help}");
}
assert_eq!(run(&[]).status.code(), Some(EXIT_USAGE));
}
#[test]
fn fake_peer_exercises_media_data_channel_and_clean_teardown() {
let output = run(&["--fake", "--timeout-seconds", "10"]);
assert!(
output.status.success(),
"stdout:\n{}\nstderr:\n{}",
text(&output.stdout),
text(&output.stderr)
);
let stdout = text(&output.stdout);
for marker in [
"ice=connected",
"dtls=connected",
"srtp=opus",
"sctp=SLData",
"sent-audio=4",
"active-peer-tasks=0",
"active-audio-tasks=0",
] {
assert!(
stdout.contains(marker),
"output omitted {marker}:\n{stdout}"
);
}
assert!(output.stderr.is_empty(), "{}", text(&output.stderr));
}
#[test]
fn virtual_devices_are_available_without_physical_hardware() {
let output = run(&["--list-devices"]);
assert!(output.status.success(), "{}", text(&output.stderr));
let stdout = text(&output.stdout);
assert!(stdout.contains("input\tvirtual:microphone"));
assert!(stdout.contains("output\tvirtual:speaker"));
}
#[test]
fn live_inputs_are_rejected_before_network_without_both_opt_ins_or_secret_echo() {
let output = run(&["First", "Last", "do-not-echo"]);
assert_eq!(output.status.code(), Some(EXIT_USAGE));
assert!(text(&output.stderr).contains("--allow-live-login"));
assert!(!text(&output.stderr).contains("do-not-echo"));
let output = run(&[
"First",
"Last",
"do-not-echo",
"--allow-live-login",
"--confirm-live-login",
"WRONG",
]);
assert_eq!(output.status.code(), Some(EXIT_USAGE));
assert!(!text(&output.stderr).contains("do-not-echo"));
let output = run(&["First", "Last", "do-not-echo", "--fake"]);
assert_eq!(output.status.code(), Some(EXIT_USAGE));
assert!(!text(&output.stderr).contains("do-not-echo"));
}