Implement native WebRtcTest validation (#96)
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
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
This commit is contained in:
103
programs/tests/webrtc_test_cli.rs
Normal file
103
programs/tests/webrtc_test_cli.rs
Normal file
@@ -0,0 +1,103 @@
|
||||
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"));
|
||||
}
|
||||
Reference in New Issue
Block a user