diff options
Diffstat (limited to 'pw_rpc/raw/codegen_test.cc')
-rw-r--r-- | pw_rpc/raw/codegen_test.cc | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/pw_rpc/raw/codegen_test.cc b/pw_rpc/raw/codegen_test.cc index 61940312e..520ae4eea 100644 --- a/pw_rpc/raw/codegen_test.cc +++ b/pw_rpc/raw/codegen_test.cc @@ -24,12 +24,15 @@ namespace test { class TestService final : public generated::TestService<TestService> { public: - StatusWithSize TestRpc(ServerContext&, - ConstByteSpan request, - ByteSpan response) { + static StatusWithSize TestRpc(ServerContext&, + ConstByteSpan request, + ByteSpan response) { int64_t integer; Status status; - DecodeRequest(request, integer, status); + + if (!DecodeRequest(request, integer, status)) { + return StatusWithSize::DataLoss(); + } protobuf::NestedEncoder encoder(response); TestResponse::Encoder test_response(&encoder); @@ -43,8 +46,8 @@ class TestService final : public generated::TestService<TestService> { RawServerWriter& writer) { int64_t integer; Status status; - DecodeRequest(request, integer, status); + ASSERT_TRUE(DecodeRequest(request, integer, status)); for (int i = 0; i < integer; ++i) { ByteSpan buffer = writer.PayloadBuffer(); protobuf::NestedEncoder encoder(buffer); @@ -57,22 +60,34 @@ class TestService final : public generated::TestService<TestService> { } private: - void DecodeRequest(ConstByteSpan request, int64_t& integer, Status& status) { + static bool DecodeRequest(ConstByteSpan request, + int64_t& integer, + Status& status) { protobuf::Decoder decoder(request); + Status decode_status; + bool has_integer = false; + bool has_status = false; while (decoder.Next().ok()) { switch (static_cast<TestRequest::Fields>(decoder.FieldNumber())) { case TestRequest::Fields::INTEGER: - decoder.ReadInt64(&integer); + decode_status = decoder.ReadInt64(&integer); + EXPECT_EQ(OkStatus(), decode_status); + has_integer = decode_status.ok(); break; case TestRequest::Fields::STATUS_CODE: { uint32_t status_code; - decoder.ReadUint32(&status_code); + decode_status = decoder.ReadUint32(&status_code); + EXPECT_EQ(OkStatus(), decode_status); + has_status = decode_status.ok(); status = static_cast<Status::Code>(status_code); break; } } } + EXPECT_TRUE(has_integer); + EXPECT_TRUE(has_status); + return has_integer && has_status; } }; @@ -93,10 +108,10 @@ TEST(RawCodegen, Server_InvokeUnaryRpc) { protobuf::NestedEncoder encoder(buffer); test::TestRequest::Encoder test_request(&encoder); test_request.WriteInteger(123); - test_request.WriteStatusCode(Status::Ok().code()); + test_request.WriteStatusCode(OkStatus().code()); auto sws = context.call(encoder.Encode().value()); - EXPECT_EQ(Status::Ok(), sws.status()); + EXPECT_EQ(OkStatus(), sws.status()); protobuf::Decoder decoder(context.response()); |