summaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp')
-rw-r--r--searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp107
1 files changed, 75 insertions, 32 deletions
diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp
index 1c5287f15e5..625e9c1f6a9 100644
--- a/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp
+++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp
@@ -53,7 +53,7 @@ public:
EXPECT_EQUAL(_createdListeners, _destroyedListeners);
}
- void notifyPut() {
+ void notifyPutDone() {
lock_guard guard(_lock);
++_putChanges;
}
@@ -101,7 +101,7 @@ public:
_stats.markCreatedListener();
}
virtual ~MyListener() { _stats.markDestroyedListener(); }
- virtual void notifyPut(GlobalId, uint32_t) override { _stats.notifyPut(); }
+ virtual void notifyPutDone(GlobalId, uint32_t) override { _stats.notifyPutDone(); }
virtual void notifyRemove(GlobalId) override { _stats.notifyRemove(); }
virtual void notifyRegistered() override { _stats.markRegisteredListener(); }
virtual const vespalib::string &getName() const override { return _name; }
@@ -138,8 +138,8 @@ struct Fixture
_handler->addListener(std::move(listener));
}
- void notifyPut(GlobalId gid, uint32_t lid, SerialNum serialNum) {
- _handler->notifyPut(gid, lid, serialNum);
+ void notifyPutDone(GlobalId gid, uint32_t lid, SerialNum serialNum) {
+ _handler->notifyPutDone(gid, lid, serialNum);
}
void notifyRemove(GlobalId gid, SerialNum serialNum) {
@@ -164,7 +164,7 @@ TEST_F("Test that we can register a listener", Fixture)
TEST_DO(stats.assertListeners(1, 0, 0));
f.addListener(std::move(listener));
TEST_DO(stats.assertListeners(1, 1, 0));
- f.notifyPut(toGid(doc1), 10, 10);
+ f.notifyPutDone(toGid(doc1), 10, 10);
TEST_DO(stats.assertChanges(1, 0));
f.removeListeners("testdoc", {});
TEST_DO(stats.assertListeners(1, 1, 1));
@@ -187,7 +187,7 @@ TEST_F("Test that we can register multiple listeners", Fixture)
TEST_DO(stats1.assertListeners(1, 1, 0));
TEST_DO(stats2.assertListeners(1, 1, 0));
TEST_DO(stats3.assertListeners(1, 1, 0));
- f.notifyPut(toGid(doc1), 10, 10);
+ f.notifyPutDone(toGid(doc1), 10, 10);
TEST_DO(stats1.assertChanges(1, 0));
TEST_DO(stats2.assertChanges(1, 0));
TEST_DO(stats3.assertChanges(1, 0));
@@ -222,42 +222,85 @@ TEST_F("Test that we keep old listener when registering duplicate", Fixture)
TEST_DO(stats.assertListeners(2, 1, 1));
}
-TEST_F("Test that put is ignored if we have a pending remove", Fixture)
+class StatsFixture : public Fixture
+{
+ ListenerStats &_stats;
+
+public:
+ StatsFixture()
+ : Fixture(),
+ _stats(addStats())
+ {
+ addListener(std::make_unique<MyListener>(_stats, "test", "testdoc"));
+ }
+
+ ~StatsFixture()
+ {
+ removeListeners("testdoc", {});
+ }
+
+ void assertChanges(uint32_t expPutChanges, uint32_t expRemoveChanges)
+ {
+ TEST_DO(_stats.assertChanges(expPutChanges, expRemoveChanges));
+ }
+};
+
+TEST_F("Test that put is ignored if we have a pending remove", StatsFixture)
{
- auto &stats = f.addStats();
- auto listener = std::make_unique<MyListener>(stats, "test", "testdoc");
- f.addListener(std::move(listener));
f.notifyRemove(toGid(doc1), 20);
- TEST_DO(stats.assertChanges(0, 1));
- f.notifyPut(toGid(doc1), 10, 10);
- TEST_DO(stats.assertChanges(0, 1));
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyPutDone(toGid(doc1), 10, 10);
+ TEST_DO(f.assertChanges(0, 1));
f.notifyRemoveDone(toGid(doc1), 20);
- TEST_DO(stats.assertChanges(0, 1));
- f.notifyPut(toGid(doc1), 11, 30);
- TEST_DO(stats.assertChanges(1, 1));
- f.removeListeners("testdoc", {});
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyPutDone(toGid(doc1), 11, 30);
+ TEST_DO(f.assertChanges(1, 1));
}
-TEST_F("Test that pending removes are merged", Fixture)
+TEST_F("Test that pending removes are merged", StatsFixture)
{
- auto &stats = f.addStats();
- auto listener = std::make_unique<MyListener>(stats, "test", "testdoc");
- f.addListener(std::move(listener));
f.notifyRemove(toGid(doc1), 20);
- TEST_DO(stats.assertChanges(0, 1));
+ TEST_DO(f.assertChanges(0, 1));
f.notifyRemove(toGid(doc1), 40);
- TEST_DO(stats.assertChanges(0, 1));
- f.notifyPut(toGid(doc1), 10, 10);
- TEST_DO(stats.assertChanges(0, 1));
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyPutDone(toGid(doc1), 10, 10);
+ TEST_DO(f.assertChanges(0, 1));
f.notifyRemoveDone(toGid(doc1), 20);
- TEST_DO(stats.assertChanges(0, 1));
- f.notifyPut(toGid(doc1), 11, 30);
- TEST_DO(stats.assertChanges(0, 1));
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyPutDone(toGid(doc1), 11, 30);
+ TEST_DO(f.assertChanges(0, 1));
f.notifyRemoveDone(toGid(doc1), 40);
- TEST_DO(stats.assertChanges(0, 1));
- f.notifyPut(toGid(doc1), 12, 50);
- TEST_DO(stats.assertChanges(1, 1));
- f.removeListeners("testdoc", {});
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyPutDone(toGid(doc1), 12, 50);
+ TEST_DO(f.assertChanges(1, 1));
+}
+
+TEST_F("Test that out of order notifyRemoveDone is handled", StatsFixture)
+{
+ f.notifyRemove(toGid(doc1), 20);
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyRemove(toGid(doc1), 40);
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyRemoveDone(toGid(doc1), 40);
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyRemoveDone(toGid(doc1), 20);
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyPutDone(toGid(doc1), 12, 50);
+ TEST_DO(f.assertChanges(1, 1));
+}
+
+TEST_F("Test that out of order notifyPutDone is partially handled", StatsFixture)
+{
+ f.notifyRemove(toGid(doc1), 20);
+ TEST_DO(f.assertChanges(0, 1));
+ f.notifyPutDone(toGid(doc1), 12, 50);
+ TEST_DO(f.assertChanges(1, 1));
+ f.notifyPutDone(toGid(doc1), 11, 40);
+ TEST_DO(f.assertChanges(1, 1));
+ f.notifyPutDone(toGid(doc1), 13, 55);
+ TEST_DO(f.assertChanges(2, 1));
+ f.notifyRemoveDone(toGid(doc1), 20);
+ TEST_DO(f.assertChanges(2, 1));
}
}