#include #include "mocks/MockDDS.h" #include #include 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 ":" 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 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 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"); }