| 26 | { |
| 27 | public: |
| 28 | IpcFuzzSetup() |
| 29 | { |
| 30 | std::promise<std::unique_ptr<mp::ProxyClient<test::fuzz::messages::IpcFuzzInterface>>> client_promise; |
| 31 | auto client_future{client_promise.get_future()}; |
| 32 | m_loop_thread = std::thread([&client_promise] { |
| 33 | mp::EventLoop loop("ipc-fuzz", [](mp::LogMessage message) { |
| 34 | if (message.level == mp::Log::Raise) throw std::runtime_error(message.message); |
| 35 | }); |
| 36 | auto pipe = loop.m_io_context.provider->newTwoWayPipe(); |
| 37 | |
| 38 | auto server_connection = std::make_unique<mp::Connection>( |
| 39 | loop, |
| 40 | kj::mv(pipe.ends[0]), |
| 41 | [&](mp::Connection& connection) { |
| 42 | auto server_proxy = kj::heap<mp::ProxyServer<test::fuzz::messages::IpcFuzzInterface>>( |
| 43 | std::make_shared<IpcFuzzImplementation>(), connection); |
| 44 | return capnp::Capability::Client(kj::mv(server_proxy)); |
| 45 | }); |
| 46 | server_connection->onDisconnect([&] { server_connection.reset(); }); |
| 47 | |
| 48 | auto client_connection = std::make_unique<mp::Connection>(loop, kj::mv(pipe.ends[1])); |
| 49 | auto client_proxy = std::make_unique<mp::ProxyClient<test::fuzz::messages::IpcFuzzInterface>>( |
| 50 | client_connection->m_rpc_system->bootstrap(mp::ServerVatId().vat_id) |
| 51 | .castAs<test::fuzz::messages::IpcFuzzInterface>(), |
| 52 | client_connection.get(), |
| 53 | /* destroy_connection= */ true); |
| 54 | (void)client_connection.release(); |
| 55 | |
| 56 | client_promise.set_value(std::move(client_proxy)); |
| 57 | loop.loop(); |
| 58 | }); |
| 59 | m_client = client_future.get(); |
| 60 | } |
| 61 | |
| 62 | ~IpcFuzzSetup() |
| 63 | { |
nothing calls this directly
no test coverage detected