multiprocess: Add unit tests for connect, serve, and listen functions

This commit is contained in:
Ryan Ofsky
2024-07-17 10:37:52 -04:00
parent 955d4077aa
commit 73fe7d7230
6 changed files with 142 additions and 8 deletions

View File

@@ -61,11 +61,12 @@ public:
}
mp::ListenConnections<messages::Init>(*m_loop, listen_fd, init);
}
void serve(int fd, const char* exe_name, interfaces::Init& init) override
void serve(int fd, const char* exe_name, interfaces::Init& init, const std::function<void()>& ready_fn = {}) override
{
assert(!m_loop);
mp::g_thread_context.thread_name = mp::ThreadName(exe_name);
m_loop.emplace(exe_name, &IpcLogFn, &m_context);
if (ready_fn) ready_fn();
mp::ServeStream<messages::Init>(*m_loop, fd, init);
m_loop->loop();
m_loop.reset();

View File

@@ -50,7 +50,13 @@ public:
//! created by them. This isn't really a problem because serve() is only
//! called by spawned child processes that call it immediately to
//! communicate back with parent processes.
virtual void serve(int fd, const char* exe_name, interfaces::Init& init) = 0;
//
//! The optional `ready_fn` callback will be called after the event loop is
//! created but before it is started. This can be useful in tests to trigger
//! client connections from another thread as soon as the event loop is
//! available, but should not be neccessary in normal code which starts
//! clients and servers independently.
virtual void serve(int fd, const char* exe_name, interfaces::Init& init, const std::function<void()>& ready_fn = {}) = 0;
//! Add cleanup callback to interface that will run when the interface is
//! deleted.