Files
clio/tests/unit/etl/CursorFromFixDiffNumProviderTests.cpp
2026-05-13 12:09:06 +01:00

68 lines
2.0 KiB
C++

#include "data/Types.hpp"
#include "etl/FakeDiffProvider.hpp"
#include "etl/impl/CursorFromFixDiffNumProvider.hpp"
#include "util/MockBackendTestFixture.hpp"
#include "util/MockPrometheus.hpp"
#include <gmock/gmock.h>
#include <gtest/gtest.h>
#include <cstddef>
using namespace etl;
using namespace util;
using namespace data;
using namespace testing;
namespace {
constexpr auto kSeq = 30;
struct CursorProviderTest : util::prometheus::WithPrometheus, MockBackendTestNaggy {
DiffProvider diffProvider;
};
struct ParametrizedCursorProviderTest : CursorProviderTest, WithParamInterface<std::size_t> {};
INSTANTIATE_TEST_CASE_P(
CursorProviderTest,
ParametrizedCursorProviderTest,
Values(32, 64, 128, 512, 1024, 3, 2, 1),
[](auto const& info) {
auto const diffs = info.param;
return fmt::format("diffs_{}", diffs);
}
);
}; // namespace
TEST_P(ParametrizedCursorProviderTest, GetCursorsWithDifferentProviderSettings)
{
auto const numDiffs = GetParam();
auto const diffs = diffProvider.getLatestDiff();
auto const provider = etl::impl::CursorFromFixDiffNumProvider{backend_, numDiffs};
ON_CALL(*backend_, fetchLedgerDiff(_, _)).WillByDefault(Return(diffs));
EXPECT_CALL(*backend_, fetchLedgerDiff(_, _)).Times(numDiffs);
auto const cursors = provider.getCursors(kSeq);
ASSERT_EQ(cursors.size(), diffs.size() + 1);
EXPECT_EQ(cursors.front().start, kFirstKey);
EXPECT_EQ(cursors.back().end, kLastKey);
}
TEST_F(CursorProviderTest, EmptyCursorIsHandledCorrectly)
{
auto const diffs = diffProvider.getLatestDiff();
auto const provider = etl::impl::CursorFromFixDiffNumProvider{backend_, 0};
ON_CALL(*backend_, fetchLedgerDiff(_, _)).WillByDefault(Return(diffs));
EXPECT_CALL(*backend_, fetchLedgerDiff(_, _)).Times(0);
auto const cursors = provider.getCursors(kSeq);
ASSERT_EQ(cursors.size(), 1);
EXPECT_EQ(cursors.front().start, kFirstKey);
EXPECT_EQ(cursors.back().end, kLastKey);
}