summaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2020-08-26 10:30:00 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2020-08-26 10:30:00 +0000
commit5b2248ed030d2427443712e80569857016cb858e (patch)
tree8cdbc8c26b6ff6dbb8c0e642d89199e85be5a3f9 /searchcore/src/tests/proton
parentd5a09968ca22a736d9f705eb9bca62b2d3f4ab88 (diff)
Refactor and test
Diffstat (limited to 'searchcore/src/tests/proton')
-rw-r--r--searchcore/src/tests/proton/common/pendinglidtracker_test.cpp96
1 files changed, 96 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/common/pendinglidtracker_test.cpp b/searchcore/src/tests/proton/common/pendinglidtracker_test.cpp
index 07d8caab3c4..575033ad19a 100644
--- a/searchcore/src/tests/proton/common/pendinglidtracker_test.cpp
+++ b/searchcore/src/tests/proton/common/pendinglidtracker_test.cpp
@@ -6,4 +6,100 @@
#include <vespa/log/log.h>
LOG_SETUP("pendinglidtracker_test");
+using namespace proton;
+
+constexpr uint32_t LID_1 = 1u;
+const std::vector<uint32_t> LIDV_2_1_3({2u, LID_1, 3u});
+const std::vector<uint32_t> LIDV_2_3({2u, 3u});
+
+std::ostream &
+operator << (std::ostream & os, ILidCommitState::State state) {
+ switch (state) {
+ case ILidCommitState::State::NEED_COMMIT:
+ os << "NEED_COMMIT";
+ break;
+ case ILidCommitState::State::WAITING:
+ os << "WAITING";
+ break;
+ case ILidCommitState::State::COMPLETED:
+ os << "COMPLETED";
+ break;
+ }
+ return os;
+}
+
+void
+verifyPhase1ProduceAndNeedCommit(PendingLidTrackerBase & tracker, ILidCommitState::State expected) {
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState());
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3));
+
+ auto token = tracker.produce(LID_1);
+ EXPECT_EQUAL(expected, tracker.getState());
+ EXPECT_EQUAL(expected, tracker.getState(LID_1));
+ EXPECT_EQUAL(expected, tracker.getState(LIDV_2_1_3));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3));
+ {
+ auto token2 = tracker.produce(LID_1);
+ EXPECT_EQUAL(expected, tracker.getState());
+ EXPECT_EQUAL(expected, tracker.getState(LID_1));
+ EXPECT_EQUAL(expected, tracker.getState(LIDV_2_1_3));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3));
+ }
+ EXPECT_EQUAL(expected, tracker.getState());
+ EXPECT_EQUAL(expected, tracker.getState(LID_1));
+ EXPECT_EQUAL(expected, tracker.getState(LIDV_2_1_3));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3));
+}
+
+TEST("test pendinglidtracker for needcommit") {
+ PendingLidTracker tracker;
+ verifyPhase1ProduceAndNeedCommit(tracker, ILidCommitState::State::WAITING);
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState());
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3));
+ {
+ ILidCommitState::State incomplete = ILidCommitState::State::WAITING;
+ auto token = tracker.produce(LID_1);
+ EXPECT_EQUAL(incomplete, tracker.getState());
+ EXPECT_EQUAL(incomplete, tracker.getState(LID_1));
+ EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3));
+ {
+ auto snapshot = tracker.produceSnapshot();
+ EXPECT_EQUAL(incomplete, tracker.getState());
+ EXPECT_EQUAL(incomplete, tracker.getState(LID_1));
+ EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3));
+ }
+ EXPECT_EQUAL(incomplete, tracker.getState());
+ EXPECT_EQUAL(incomplete, tracker.getState(LID_1));
+ EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3));
+ }
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState());
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3));
+}
+
+TEST("test two phase pendinglidtracker for needcommit") {
+ TwoPhasePendingLidTracker tracker;
+ ILidCommitState::State incomplete = ILidCommitState::State::NEED_COMMIT;
+ verifyPhase1ProduceAndNeedCommit(tracker, incomplete);
+ EXPECT_EQUAL(incomplete, tracker.getState());
+ EXPECT_EQUAL(incomplete, tracker.getState(LID_1));
+ EXPECT_EQUAL(incomplete, tracker.getState(LIDV_2_1_3));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_3));
+ {
+ ILidCommitState::State waiting = ILidCommitState::State::WAITING;
+ auto snapshot = tracker.produceSnapshot();
+ EXPECT_EQUAL(waiting, tracker.getState());
+ EXPECT_EQUAL(waiting, tracker.getState(LID_1));
+ EXPECT_EQUAL(waiting, tracker.getState(LIDV_2_1_3));
+ }
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState());
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LID_1));
+ EXPECT_EQUAL(ILidCommitState::State::COMPLETED, tracker.getState(LIDV_2_1_3));
+}
+
TEST_MAIN() { TEST_RUN_ALL(); }