53 lines
1.9 KiB
Rust
53 lines
1.9 KiB
Rust
// Integration contract between the protobuf API and server implementation.
|
|
//
|
|
// Scope: compare the generated service surface contract with the relay handler
|
|
// implementation files that dispatch each RPC.
|
|
// Targets: `common/proto/lesavka.proto` and `server/src/main/relay_service.rs`.
|
|
// Why: client and server can compile independently while still drifting at the
|
|
// protocol boundary; this test keeps the end-to-end RPC seam visible.
|
|
|
|
const PROTO: &str = include_str!(concat!(
|
|
env!("CARGO_MANIFEST_DIR"),
|
|
"/common/proto/lesavka.proto"
|
|
));
|
|
const RELAY_SERVICE: &str = include_str!(concat!(
|
|
env!("CARGO_MANIFEST_DIR"),
|
|
"/server/src/main/relay_service.rs"
|
|
));
|
|
const HANDSHAKE_SERVICE: &str = include_str!(concat!(
|
|
env!("CARGO_MANIFEST_DIR"),
|
|
"/server/src/handshake.rs"
|
|
));
|
|
|
|
#[test]
|
|
fn proto_rpc_surface_has_matching_relay_dispatch_methods() {
|
|
for (rpc, method) in [
|
|
("StreamKeyboard", "stream_keyboard_rpc"),
|
|
("StreamMouse", "stream_mouse_rpc"),
|
|
("CaptureVideo", "capture_video_rpc"),
|
|
("CaptureAudio", "capture_audio_rpc"),
|
|
("StreamMicrophone", "stream_microphone_rpc"),
|
|
("StreamCamera", "stream_camera_rpc"),
|
|
("StreamWebcamMedia", "stream_webcam_media_rpc"),
|
|
("RunOutputDelayProbe", "run_output_delay_probe_rpc"),
|
|
("PasteText", "paste_text_rpc"),
|
|
("RecoverUsb", "recover_usb_rpc"),
|
|
("RecoverUac", "recover_uac_rpc"),
|
|
("RecoverUvc", "recover_uvc_rpc"),
|
|
] {
|
|
assert!(
|
|
PROTO.contains(&format!("rpc {rpc}")),
|
|
"missing proto RPC {rpc}"
|
|
);
|
|
assert!(
|
|
RELAY_SERVICE.contains(method),
|
|
"relay service should dispatch {rpc} through {method}"
|
|
);
|
|
}
|
|
|
|
assert!(
|
|
PROTO.contains("rpc GetCapabilities") && HANDSHAKE_SERVICE.contains("get_capabilities"),
|
|
"handshake service should implement the GetCapabilities API"
|
|
);
|
|
}
|