diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-26 10:30:00 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2020-08-26 10:30:00 +0000 |
commit | 5b2248ed030d2427443712e80569857016cb858e (patch) | |
tree | 8cdbc8c26b6ff6dbb8c0e642d89199e85be5a3f9 /searchcore/src/tests/proton | |
parent | d5a09968ca22a736d9f705eb9bca62b2d3f4ab88 (diff) |
Refactor and test
Diffstat (limited to 'searchcore/src/tests/proton')
-rw-r--r-- | searchcore/src/tests/proton/common/pendinglidtracker_test.cpp | 96 |
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(); } |