aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahoo-inc.com>2017-02-23 10:12:52 +0000
committerTor Egge <Tor.Egge@yahoo-inc.com>2017-02-23 10:12:52 +0000
commit36fd5eef8d36d1bc2ba5b6f020b32f7dc28937fa (patch)
tree7af6f2f3c1ab9d060318ca2d959c017f263c854a /searchcore/src/tests/proton/reference/gid_to_lid_change_handler/gid_to_lid_change_handler_test.cpp
parent2cf79892f7ce7ae3492825f048a81185efc75550 (diff)
Fix comments. Break long lines.
Rename reference attribute method to better match semantics. Add more test cases. Rename unit test class name and simplify implementation.
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.cpp120
1 files changed, 66 insertions, 54 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 705197630a5..4d5bbd52a14 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
@@ -27,32 +27,32 @@ vespalib::string doc1("id:test:music::1");
}
-class MyTarget {
+class ListenerStats {
using lock_guard = std::lock_guard<std::mutex>;
std::mutex _lock;
- std::vector<std::pair<GlobalId, uint32_t>> _changes;
+ uint32_t _changes;
uint32_t _createdListeners;
uint32_t _registeredListeners;
uint32_t _destroyedListeners;
public:
- MyTarget()
+ ListenerStats()
: _lock(),
- _changes(),
+ _changes(0u),
_createdListeners(0u),
_registeredListeners(0u),
_destroyedListeners(0u)
{
}
- ~MyTarget()
+ ~ListenerStats()
{
EXPECT_EQUAL(_createdListeners, _destroyedListeners);
}
- void notifyGidToLidChange(GlobalId gid, uint32_t lid) {
+ void notifyGidToLidChange() {
lock_guard guard(_lock);
- _changes.emplace_back(gid, lid);
+ ++_changes;
}
void markCreatedListener() { lock_guard guard(_lock); ++_createdListeners; }
void markRegisteredListener() { lock_guard guard(_lock); ++_registeredListeners; }
@@ -61,7 +61,6 @@ public:
uint32_t getCreatedListeners() const { return _createdListeners; }
uint32_t getRegisteredListeners() const { return _registeredListeners; }
uint32_t getDestroyedListeners() const { return _destroyedListeners; }
- const std::vector<std::pair<GlobalId, uint32_t>> &getChanges() const { return _changes; }
void assertCounts(uint32_t expCreatedListeners,
uint32_t expRegisteredListeners,
@@ -71,29 +70,29 @@ public:
EXPECT_EQUAL(expCreatedListeners, getCreatedListeners());
EXPECT_EQUAL(expRegisteredListeners, getRegisteredListeners());
EXPECT_EQUAL(expDestroyedListeners, getDestroyedListeners());
- EXPECT_EQUAL(expChanges, _changes.size());
+ EXPECT_EQUAL(expChanges, _changes);
}
};
class MyListener : public IGidToLidChangeListener
{
- MyTarget &_target;
+ ListenerStats &_stats;
vespalib::string _name;
vespalib::string _docTypeName;
public:
- MyListener(MyTarget &target,
+ MyListener(ListenerStats &stats,
const vespalib::string &name,
const vespalib::string &docTypeName)
: IGidToLidChangeListener(),
- _target(target),
+ _stats(stats),
_name(name),
_docTypeName(docTypeName)
{
- _target.markCreatedListener();
+ _stats.markCreatedListener();
}
- virtual ~MyListener() { _target.markDestroyedListener(); }
- virtual void notifyGidToLidChange(GlobalId gid, uint32_t lid) override { _target.notifyGidToLidChange(gid, lid); }
- virtual void notifyRegistered() override { _target.markRegisteredListener(); }
+ virtual ~MyListener() { _stats.markDestroyedListener(); }
+ virtual void notifyGidToLidChange(GlobalId, uint32_t) override { _stats.notifyGidToLidChange(); }
+ virtual void notifyRegistered() override { _stats.markRegisteredListener(); }
virtual const vespalib::string &getName() const override { return _name; }
virtual const vespalib::string &getDocTypeName() const override { return _docTypeName; }
};
@@ -102,13 +101,13 @@ struct Fixture
{
vespalib::ThreadStackExecutor _masterExecutor;
ExecutorThreadService _master;
- std::vector<std::shared_ptr<MyTarget>> _targets;
+ std::vector<std::shared_ptr<ListenerStats>> _statss;
std::shared_ptr<GidToLidChangeHandler> _handler;
Fixture()
: _masterExecutor(1, 128 * 1024),
_master(_masterExecutor),
- _targets(),
+ _statss(),
_handler(std::make_shared<GidToLidChangeHandler>(&_master))
{
}
@@ -124,9 +123,9 @@ struct Fixture
_master.sync();
}
- MyTarget &addTarget() {
- _targets.push_back(std::make_shared<MyTarget>());
- return *_targets.back();
+ ListenerStats &addStats() {
+ _statss.push_back(std::make_shared<ListenerStats>());
+ return *_statss.back();
}
void addListener(std::unique_ptr<IGidToLidChangeListener> listener) {
@@ -149,54 +148,67 @@ struct Fixture
TEST_F("Test that we can register a listener", Fixture)
{
- auto &target = f.addTarget();
- auto listener = std::make_unique<MyListener>(target, "test", "testdoc");
- TEST_DO(target.assertCounts(1, 0, 0, 0));
+ auto &stats = f.addStats();
+ auto listener = std::make_unique<MyListener>(stats, "test", "testdoc");
+ TEST_DO(stats.assertCounts(1, 0, 0, 0));
f.addListener(std::move(listener));
- TEST_DO(target.assertCounts(1, 1, 0, 0));
+ TEST_DO(stats.assertCounts(1, 1, 0, 0));
f.notifyGidToLidChange(toGid(doc1), 10);
- TEST_DO(target.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats.assertCounts(1, 1, 0, 1));
f.removeListeners("testdoc", {});
- TEST_DO(target.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats.assertCounts(1, 1, 1, 1));
}
TEST_F("Test that we can register multiple listeners", Fixture)
{
- auto &target1 = f.addTarget();
- auto &target2 = f.addTarget();
- auto &target3 = f.addTarget();
- auto listener1 = std::make_unique<MyListener>(target1, "test1", "testdoc");
- auto listener2 = std::make_unique<MyListener>(target2, "test2", "testdoc");
- auto listener3 = std::make_unique<MyListener>(target3, "test3", "testdoc2");
- TEST_DO(target1.assertCounts(1, 0, 0, 0));
- TEST_DO(target2.assertCounts(1, 0, 0, 0));
- TEST_DO(target3.assertCounts(1, 0, 0, 0));
+ auto &stats1 = f.addStats();
+ auto &stats2 = f.addStats();
+ auto &stats3 = f.addStats();
+ auto listener1 = std::make_unique<MyListener>(stats1, "test1", "testdoc");
+ auto listener2 = std::make_unique<MyListener>(stats2, "test2", "testdoc");
+ auto listener3 = std::make_unique<MyListener>(stats3, "test3", "testdoc2");
+ TEST_DO(stats1.assertCounts(1, 0, 0, 0));
+ TEST_DO(stats2.assertCounts(1, 0, 0, 0));
+ TEST_DO(stats3.assertCounts(1, 0, 0, 0));
f.addListener(std::move(listener1));
f.addListener(std::move(listener2));
f.addListener(std::move(listener3));
- TEST_DO(target1.assertCounts(1, 1, 0, 0));
- TEST_DO(target2.assertCounts(1, 1, 0, 0));
- TEST_DO(target3.assertCounts(1, 1, 0, 0));
+ TEST_DO(stats1.assertCounts(1, 1, 0, 0));
+ TEST_DO(stats2.assertCounts(1, 1, 0, 0));
+ TEST_DO(stats3.assertCounts(1, 1, 0, 0));
f.notifyGidToLidChange(toGid(doc1), 10);
- TEST_DO(target1.assertCounts(1, 1, 0, 1));
- TEST_DO(target2.assertCounts(1, 1, 0, 1));
- TEST_DO(target3.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats1.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats2.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats3.assertCounts(1, 1, 0, 1));
f.removeListeners("testdoc", {"test1"});
- TEST_DO(target1.assertCounts(1, 1, 0, 1));
- TEST_DO(target2.assertCounts(1, 1, 1, 1));
- TEST_DO(target3.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats1.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats2.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats3.assertCounts(1, 1, 0, 1));
f.removeListeners("testdoc", {});
- TEST_DO(target1.assertCounts(1, 1, 1, 1));
- TEST_DO(target2.assertCounts(1, 1, 1, 1));
- TEST_DO(target3.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats1.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats2.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats3.assertCounts(1, 1, 0, 1));
f.removeListeners("testdoc2", {"test3"});
- TEST_DO(target1.assertCounts(1, 1, 1, 1));
- TEST_DO(target2.assertCounts(1, 1, 1, 1));
- TEST_DO(target3.assertCounts(1, 1, 0, 1));
+ TEST_DO(stats1.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats2.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats3.assertCounts(1, 1, 0, 1));
f.removeListeners("testdoc2", {"foo"});
- TEST_DO(target1.assertCounts(1, 1, 1, 1));
- TEST_DO(target2.assertCounts(1, 1, 1, 1));
- TEST_DO(target3.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats1.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats2.assertCounts(1, 1, 1, 1));
+ TEST_DO(stats3.assertCounts(1, 1, 1, 1));
+}
+
+TEST_F("Test that we keep old listener when registering duplicate", Fixture)
+{
+ auto &stats = f.addStats();
+ auto listener = std::make_unique<MyListener>(stats, "test1", "testdoc");
+ TEST_DO(stats.assertCounts(1, 0, 0, 0));
+ f.addListener(std::move(listener));
+ TEST_DO(stats.assertCounts(1, 1, 0, 0));
+ listener = std::make_unique<MyListener>(stats, "test1", "testdoc");
+ TEST_DO(stats.assertCounts(2, 1, 0, 0));
+ f.addListener(std::move(listener));
+ TEST_DO(stats.assertCounts(2, 1, 1, 0));
}
}