MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / IpcFuzzSetup

Method IpcFuzzSetup

src/ipc/test/fuzz/ipc.cpp:28–60  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

26{
27public:
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 {

Callers

nothing calls this directly

Calls 6

ServerVatIdClass · 0.85
onDisconnectMethod · 0.80
releaseMethod · 0.80
loopMethod · 0.80
resetMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected