|
|
|
@ -4,8 +4,7 @@ |
|
|
|
|
// license that can be found in the LICENSE file or at
|
|
|
|
|
// https://developers.google.com/open-source/licenses/bsd
|
|
|
|
|
|
|
|
|
|
use conformance_proto::{ConformanceRequest, ConformanceResponse}; |
|
|
|
|
use conformance_rust_overlay_hack_proto::ConformanceRequestRustOverlayHack; |
|
|
|
|
use conformance_proto::{ConformanceRequest, ConformanceResponse, WireFormat}; |
|
|
|
|
|
|
|
|
|
#[cfg(cpp_kernel)] |
|
|
|
|
use protobuf_cpp as kernel; |
|
|
|
@ -40,21 +39,13 @@ fn read_little_endian_i32_from_stdin() -> Option<i32> { |
|
|
|
|
/// Returns None if we have hit an EOF that suggests the test suite is complete.
|
|
|
|
|
/// Panics in any other case (e.g. an EOF in a place that would imply a
|
|
|
|
|
/// programmer error in the conformance test suite).
|
|
|
|
|
fn read_request_from_stdin() -> Option<(ConformanceRequest, ConformanceRequestRustOverlayHack)> { |
|
|
|
|
fn read_request_from_stdin() -> Option<ConformanceRequest> { |
|
|
|
|
let msg_len = read_little_endian_i32_from_stdin()?; |
|
|
|
|
let mut serialized = vec![0_u8; msg_len as usize]; |
|
|
|
|
io::stdin().read_exact(&mut serialized).unwrap(); |
|
|
|
|
let mut req = ConformanceRequest::new(); |
|
|
|
|
req.deserialize(&serialized).unwrap(); |
|
|
|
|
|
|
|
|
|
// TODO: b/318373255 - Since enum accessors aren't available yet, we parse an
|
|
|
|
|
// overlay with int32 field instead of an enum so that we can check if the
|
|
|
|
|
// requested output is binary or not. This will be deleted once enum
|
|
|
|
|
// accessors are supported.
|
|
|
|
|
let mut req_overlay_hack = ConformanceRequestRustOverlayHack::new(); |
|
|
|
|
req_overlay_hack.deserialize(&serialized).unwrap(); |
|
|
|
|
|
|
|
|
|
Some((req, req_overlay_hack)) |
|
|
|
|
Some(req) |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn write_response_to_stdout(resp: &ConformanceResponse) { |
|
|
|
@ -66,16 +57,11 @@ fn write_response_to_stdout(resp: &ConformanceResponse) { |
|
|
|
|
handle.flush().unwrap(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
fn do_test( |
|
|
|
|
req: &ConformanceRequest, |
|
|
|
|
req_overlay_hack: &ConformanceRequestRustOverlayHack, |
|
|
|
|
) -> ConformanceResponse { |
|
|
|
|
fn do_test(req: &ConformanceRequest) -> ConformanceResponse { |
|
|
|
|
let mut resp = ConformanceResponse::new(); |
|
|
|
|
let message_type = req.message_type(); |
|
|
|
|
|
|
|
|
|
// TODO: b/318373255 - Use the enum once its supported.
|
|
|
|
|
// if req.requested_output_format() != WireFormat.PROTOBUF {
|
|
|
|
|
if req_overlay_hack.requested_output_format() != 1 { |
|
|
|
|
if req.requested_output_format() != WireFormat::Protobuf { |
|
|
|
|
resp.skipped_mut().set("only wire format output implemented"); |
|
|
|
|
return resp; |
|
|
|
|
} |
|
|
|
@ -130,8 +116,8 @@ fn do_test( |
|
|
|
|
|
|
|
|
|
fn main() { |
|
|
|
|
let mut total_runs = 0; |
|
|
|
|
while let Some((req, req_overlay_hack)) = read_request_from_stdin() { |
|
|
|
|
let resp = do_test(&req, &req_overlay_hack); |
|
|
|
|
while let Some(req) = read_request_from_stdin() { |
|
|
|
|
let resp = do_test(&req); |
|
|
|
|
write_response_to_stdout(&resp); |
|
|
|
|
total_runs += 1; |
|
|
|
|
} |
|
|
|
|