Files
qt6-migration-pipeline/Lts/DDS/DdsUnitTestsPlaceholder/ddsGenericDataTests_gtest.cpp
T

56 lines
1.6 KiB
C++

#include <gtest/gtest.h>
#include "mocks/MockDDS.h"
#include <mutex>
#include <condition_variable>
TEST(GenericSmokeGTest, BasicStringOps) {
std::string s = "MiXeD";
for (auto &c : s) c = (char)std::tolower(c);
EXPECT_EQ(s, "mixed");
}
TEST(GenericSmokeGTest, MockDDSPublishReceive) {
MockDDS::clear_all();
MockDDS::publish("topic1", "payload42");
auto r = MockDDS::take_last("topic1");
// format is "<seq>:<payload>"
auto pos = r.find(':');
ASSERT_NE(pos, std::string::npos);
auto seq = std::stoul(r.substr(0, pos));
auto payload = r.substr(pos + 1);
EXPECT_EQ(payload, "payload42");
EXPECT_EQ(seq, 1UL);
}
TEST(GenericSmokeGTest, MockDDSAsyncDelivery) {
MockDDS::clear_all();
std::mutex mtx;
std::condition_variable cv;
bool received = false;
std::string last;
auto cb = [&](const std::string &payload){
std::lock_guard<std::mutex> lk(mtx);
last = payload;
received = true;
cv.notify_one();
};
auto sub = MockDDS::subscribe("topic-async", cb);
// publish asynchronously with small delay; callback should be invoked
MockDDS::publish_async("topic-async", "async-payload", 20);
std::unique_lock<std::mutex> lk(mtx);
if (!cv.wait_for(lk, std::chrono::seconds(2), [&]{ return received; })) {
// timeout
MockDDS::unsubscribe("topic-async", sub);
FAIL() << "Did not receive async callback in time";
}
MockDDS::unsubscribe("topic-async", sub);
// parse annotation
auto pos = last.find(':');
ASSERT_NE(pos, std::string::npos);
auto payload = last.substr(pos + 1);
EXPECT_EQ(payload, "async-payload");
}