mirror of
https://github.com/XRPLF/clio.git
synced 2025-12-06 17:27:58 +00:00
@@ -39,6 +39,10 @@
|
||||
#include <boost/asio/impl/spawn.hpp>
|
||||
#include <boost/asio/io_context.hpp>
|
||||
#include <boost/asio/spawn.hpp>
|
||||
#include <boost/uuid/random_generator.hpp>
|
||||
#include <boost/uuid/uuid.hpp>
|
||||
#include <boost/uuid/uuid_hash.hpp>
|
||||
#include <boost/uuid/uuid_io.hpp>
|
||||
#include <gtest/gtest.h>
|
||||
#include <xrpl/basics/Slice.h>
|
||||
#include <xrpl/basics/base_uint.h>
|
||||
@@ -51,6 +55,7 @@
|
||||
|
||||
#include <algorithm>
|
||||
#include <atomic>
|
||||
#include <chrono>
|
||||
#include <cstddef>
|
||||
#include <cstdint>
|
||||
#include <cstring>
|
||||
@@ -59,6 +64,7 @@
|
||||
#include <optional>
|
||||
#include <random>
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <thread>
|
||||
#include <tuple>
|
||||
#include <unordered_map>
|
||||
@@ -1296,3 +1302,85 @@ TEST_F(BackendCassandraTest, CacheIntegration)
|
||||
ctx_.run();
|
||||
ASSERT_EQ(done, true);
|
||||
}
|
||||
|
||||
struct BackendCassandraNodeMessageTest : BackendCassandraTest {
|
||||
boost::uuids::random_generator generateUuid;
|
||||
};
|
||||
|
||||
TEST_F(BackendCassandraNodeMessageTest, UpdateFetch)
|
||||
{
|
||||
static boost::uuids::uuid const kUUID = generateUuid();
|
||||
static std::string const kMESSAGE = "some message";
|
||||
|
||||
EXPECT_NO_THROW({ backend_->writeNodeMessage(kUUID, kMESSAGE); });
|
||||
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const readResult = backend_->fetchClioNodesData(yield);
|
||||
ASSERT_TRUE(readResult) << readResult.error();
|
||||
ASSERT_EQ(readResult->size(), 1);
|
||||
auto const& [uuid, message] = (*readResult)[0];
|
||||
EXPECT_EQ(uuid, kUUID);
|
||||
EXPECT_EQ(message, kMESSAGE);
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(BackendCassandraNodeMessageTest, UpdateFetchMultipleMessages)
|
||||
{
|
||||
std::unordered_map<boost::uuids::uuid, std::string> kDATA = {
|
||||
{generateUuid(), std::string{"some message"}},
|
||||
{generateUuid(), std::string{"other message"}},
|
||||
{generateUuid(), std::string{"message 3"}}
|
||||
};
|
||||
|
||||
EXPECT_NO_THROW({
|
||||
for (auto const& [uuid, message] : kDATA) {
|
||||
backend_->writeNodeMessage(uuid, message);
|
||||
}
|
||||
});
|
||||
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const readResult = backend_->fetchClioNodesData(yield);
|
||||
ASSERT_TRUE(readResult) << readResult.error();
|
||||
ASSERT_EQ(readResult->size(), kDATA.size());
|
||||
|
||||
for (size_t i = 0; i < readResult->size(); ++i) {
|
||||
auto const& [uuid, message] = (*readResult)[i];
|
||||
auto const it = kDATA.find(uuid);
|
||||
ASSERT_NE(it, kDATA.end()) << uuid << " not found";
|
||||
EXPECT_EQ(it->second, message);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(BackendCassandraNodeMessageTest, MessageDisappearsAfterTTL)
|
||||
{
|
||||
EXPECT_NO_THROW({ backend_->writeNodeMessage(generateUuid(), "some message"); });
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds{2005});
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const readResult = backend_->fetchClioNodesData(yield);
|
||||
ASSERT_TRUE(readResult) << readResult.error();
|
||||
EXPECT_TRUE(readResult->empty());
|
||||
});
|
||||
}
|
||||
|
||||
TEST_F(BackendCassandraNodeMessageTest, UpdatingMessageKeepsItAlive)
|
||||
{
|
||||
static boost::uuids::uuid const kUUID = generateUuid();
|
||||
static std::string const kUPDATED_MESSAGE = "updated message";
|
||||
|
||||
EXPECT_NO_THROW({ backend_->writeNodeMessage(kUUID, "some message"); });
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds{1000});
|
||||
|
||||
EXPECT_NO_THROW({ backend_->writeNodeMessage(kUUID, kUPDATED_MESSAGE); });
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds{1005});
|
||||
|
||||
runSpawn([&](boost::asio::yield_context yield) {
|
||||
auto const readResult = backend_->fetchClioNodesData(yield);
|
||||
ASSERT_TRUE(readResult) << readResult.error();
|
||||
ASSERT_EQ(readResult->size(), 1);
|
||||
auto const& [uuid, message] = (*readResult)[0];
|
||||
EXPECT_EQ(uuid, kUUID);
|
||||
EXPECT_EQ(message, kUPDATED_MESSAGE);
|
||||
});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user