49 lines
1.2 KiB
C++
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);
|