node_communication/tests/utils.hpp
2025-07-30 09:38:43 +08:00

49 lines
1.2 KiB
C++

#include <context.h>
#include <gtest/gtest.h>
#include <shm.h>
#include <thread>
template <class T>
class IPCTest : public testing::Test {
public:
void send(auto msg) {
IpcRequestReplyContext ctx;
ctx.setStrategy(std::make_unique<T>());
auto res = ctx.send(msg);
if (!res) FAIL() << "send failed!" << res.error();
}
void receive(auto msg) {
IpcRequestReplyContext ctx;
ctx.setStrategy(std::make_unique<T>());
auto res = ctx.receive();
if (!res) FAIL() << "receive failed!" << res.error();
EXPECT_EQ(res, msg);
}
};
// +++++++++++++++++++++++++++++++++ Test +++++++++++++++++++++++++++++++++
TYPED_TEST_SUITE_P(IPCTest);
// 单线程发送接收
TYPED_TEST_P(IPCTest, SendAndReceiveTest) {
auto msg = "Hello IPC";
this->send(msg);
this->receive(msg);
}
// 多线程发送接收
TYPED_TEST_P(IPCTest, MutliThreadSendAndReceiveTest) {
auto msg = "Hello IPC";
std::thread send_t([this, msg]() { this->send(msg); });
std::thread receive_t([this, msg]() { this->receive(msg); });
send_t.join();
receive_t.join();
}
REGISTER_TYPED_TEST_SUITE_P(IPCTest, SendAndReceiveTest,
MutliThreadSendAndReceiveTest);