diff options
Diffstat (limited to 'pw_rpc/pwpb/public/pw_rpc/pwpb/client_server_testing.h')
-rw-r--r-- | pw_rpc/pwpb/public/pw_rpc/pwpb/client_server_testing.h | 35 |
1 files changed, 32 insertions, 3 deletions
diff --git a/pw_rpc/pwpb/public/pw_rpc/pwpb/client_server_testing.h b/pw_rpc/pwpb/public/pw_rpc/pwpb/client_server_testing.h index 394c49f0d..425f0b960 100644 --- a/pw_rpc/pwpb/public/pw_rpc/pwpb/client_server_testing.h +++ b/pw_rpc/pwpb/public/pw_rpc/pwpb/client_server_testing.h @@ -15,6 +15,7 @@ #include <cinttypes> +#include "pw_assert/assert.h" #include "pw_rpc/internal/client_server_testing.h" #include "pw_rpc/pwpb/fake_channel_output.h" @@ -45,7 +46,11 @@ class PwpbForwardingChannelOutput final kPayloadsBufferSizeBytes>; public: - constexpr PwpbForwardingChannelOutput() = default; + explicit PwpbForwardingChannelOutput( + TestPacketProcessor&& server_packet_processor = nullptr, + TestPacketProcessor&& client_packet_processor = nullptr) + : Base(std::move(server_packet_processor), + std::move(client_packet_processor)) {} template <auto kMethod> Response<kMethod> response(uint32_t channel_id, uint32_t index) { @@ -54,6 +59,17 @@ class PwpbForwardingChannelOutput final } template <auto kMethod> + void response(uint32_t channel_id, + uint32_t index, + Response<kMethod>& response) { + PW_ASSERT(Base::PacketCount() >= index); + auto payloads_view = Base::output_.template responses<kMethod>(channel_id); + PW_ASSERT(payloads_view.serde() + .Decode(payloads_view.payloads()[index], response) + .ok()); + } + + template <auto kMethod> Request<kMethod> request(uint32_t channel_id, uint32_t index) { PW_ASSERT(Base::PacketCount() >= index); return Base::output_.template requests<kMethod>(channel_id)[index]; @@ -90,7 +106,11 @@ class PwpbClientServerTestContext final kPayloadsBufferSizeBytes>; public: - PwpbClientServerTestContext() = default; + PwpbClientServerTestContext( + TestPacketProcessor&& server_packet_processor = nullptr, + TestPacketProcessor&& client_packet_processor = nullptr) + : Base(std::move(server_packet_processor), + std::move(client_packet_processor)) {} // Retrieve copy of request indexed by order of occurance template <auto kMethod> @@ -99,12 +119,21 @@ class PwpbClientServerTestContext final index); } - // Retrieve copy of resonse indexed by order of occurance + // Retrieve copy of response indexed by order of occurance template <auto kMethod> Response<kMethod> response(uint32_t index) { return Base::channel_output_.template response<kMethod>( Base::channel().id(), index); } + + // Gives access to the RPC's indexed by order of occurance using passed + // Response object to parse using pw_protobuf. Use this version when you need + // to set callback fields in the Response object before parsing. + template <auto kMethod> + void response(uint32_t index, Response<kMethod>& response) { + return Base::channel_output_.template response<kMethod>( + Base::channel().id(), index, response); + } }; } // namespace pw::rpc |