lesavka/tests/manual/google_meet/google_meet_observer_manual_contract.rs

65 lines
2.2 KiB
Rust

// Manual Google Meet observer contract.
//
// Scope: protect the operator-assisted Google Meet observer harness and its
// optional recording analysis path.
// Targets: scripts/manual/run_google_meet_observer_probe.sh.
// Why: Meet is a real-world consumer of the RCT UVC/UAC output, but the test
// must stay manual, artifact-backed, and free of browser credential automation.
const GOOGLE_MEET_OBSERVER_SCRIPT: &str = include_str!(concat!(
env!("CARGO_MANIFEST_DIR"),
"/scripts/manual/run_google_meet_observer_probe.sh"
));
#[test]
fn google_meet_observer_stays_manual_and_artifact_backed() {
for marker in [
"Google Meet observer probe checklist",
"no Google credentials, sudo, or browser automation are used",
"operator-checklist.txt",
"manual-timing.json",
"client-transport-timeline.json",
"LESAVKA_MEET_OBSERVER_CAPTURE=${LESAVKA_MEET_OBSERVER_CAPTURE:-}",
"observer-google-meet-capture",
"Observer capture times are operator-confirmed",
"Path to observer recording for analysis (blank to skip)",
] {
assert!(
GOOGLE_MEET_OBSERVER_SCRIPT.contains(marker),
"Google Meet observer harness should preserve marker {marker}"
);
}
}
#[test]
fn google_meet_observer_uses_synthetic_bundled_media_without_secret_automation() {
for marker in [
"lesavka-sync-probe",
"--event-width-codes \"${PROBE_EVENT_WIDTH_CODES}\"",
"--timeline-json \"${CLIENT_TIMELINE_JSON}\"",
"running synthetic bundled media through Google Meet path",
"lesavka-sync-analyze",
] {
assert!(
GOOGLE_MEET_OBSERVER_SCRIPT.contains(marker),
"Google Meet observer harness should preserve synthetic marker {marker}"
);
}
for forbidden in [
"chromedriver",
"geckodriver",
"google-chrome --remote-debugging",
"sudo ",
"PASSWORD",
"VAULT",
"vault",
"read -s",
] {
assert!(
!GOOGLE_MEET_OBSERVER_SCRIPT.contains(forbidden),
"Google Meet observer harness must remain manual/non-secret: {forbidden}"
);
}
}