From c90823bde9aea6b8f4c9737a0d8d5cd17560e8b9 Mon Sep 17 00:00:00 2001 From: "Claudius \"keldu\" Holeksa" Date: Sat, 7 Nov 2026 15:10:17 +0100 Subject: Finish Loopback --- modules/remote/tests/remote_loopback.cpp | 45 ++++++++++++++++++++++++++++++++ 1 file changed, 45 insertions(+) (limited to 'modules/remote/tests/remote_loopback.cpp') diff --git a/modules/remote/tests/remote_loopback.cpp b/modules/remote/tests/remote_loopback.cpp index bd24384..dbdd0f1 100644 --- a/modules/remote/tests/remote_loopback.cpp +++ b/modules/remote/tests/remote_loopback.cpp @@ -65,6 +65,51 @@ SAW_TEST("Remote Loopback RPC"){ } } +SAW_TEST("Remote Loopback RPC Client"){ + using namespace saw; + + event_loop loop; + wait_scope wait{loop}; + + remote rmt; + + auto eov = rmt.parse_address(0u); + SAW_EXPECT(eov.is_value(), "Didn't parse correctly"); + auto& addr = eov.get_value(); + + auto eo_u32_srv = rmt.template data_listen(*addr); + SAW_EXPECT(eo_u32_srv.is_value(), std::string{"Couldn't listen: "} + std::string{eo_u32_srv.get_error().get_category()}); + + auto eo_i64_srv = rmt.template data_listen(*addr); + SAW_EXPECT(eo_i64_srv.is_value(), std::string{"Couldn't listen: "} + std::string{eo_i64_srv.get_error().get_category()}); + + auto foo_func = [](data input) -> error_or> { + data rv; + rv.set(input.get() * 2); + return rv; + }; + + auto iface = interface_factory::create(std::move(foo_func)); + + auto eo_rpc_srv = rmt.template rpc_listen(*addr, std::move(iface)); + SAW_EXPECT(eo_rpc_srv.is_value(), std::string{"Couldn't listen: "} + std::string{eo_rpc_srv.get_error().get_category()}); + + auto cvr_client = rmt.template rpc_connect(*addr); + auto eo_client = cvr_client.take(); + SAW_EXPECT(eo_client.is_value(), "Couldn't connect."); + auto& client = eo_client.get_value(); + + data inp{21}; + + auto eo_rmt_dat = client.template call<"foo">(std::move(inp)); + SAW_EXPECT(eo_rmt_dat.is_value(), (std::string{"Failed call: "} + std::string{eo_rmt_dat.get_error().get_category()})); + auto& rmt_dat = eo_rmt_dat.get_value(); + + auto eo_resp = rmt_dat.wait(wait); + SAW_EXPECT(eo_resp.is_value(), "Failed receive."); + SAW_EXPECT((eo_resp.get_value().get() == 42), (std::string{"Wrong value received: "} + std::to_string(eo_resp.get_value().get()))); +} + SAW_TEST("Remote Loopback Data"){ using namespace saw; -- cgit v1.3.1