aboutsummaryrefslogtreecommitdiff
path: root/pw_rpc/pwpb/public/pw_rpc/pwpb/client_server_testing.h
diff options
context:
space:
mode:
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.h35
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