aboutsummaryrefslogtreecommitdiffstats
path: root/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp')
-rw-r--r--searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp123
1 files changed, 123 insertions, 0 deletions
diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp
new file mode 100644
index 00000000000..072d618d359
--- /dev/null
+++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_registrator/gid_to_lid_change_registrator_test.cpp
@@ -0,0 +1,123 @@
+// Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/vespalib/stllike/string.h>
+#include <vespa/document/base/globalid.h>
+#include <vespa/searchcore/proton/reference/i_gid_to_lid_change_handler.h>
+#include <vespa/searchcore/proton/reference/i_gid_to_lid_change_listener.h>
+#include <vespa/searchcore/proton/reference/gid_to_lid_change_registrator.h>
+#include <vespa/vespalib/test/insertion_operators.h>
+#include <map>
+#include <vespa/log/log.h>
+LOG_SETUP("gid_to_lid_change_registrator_test");
+
+namespace proton {
+
+class MyListener : public IGidToLidChangeListener
+{
+ vespalib::string _docTypeName;
+ vespalib::string _name;
+public:
+ MyListener(const vespalib::string &docTypeName, const vespalib::string &name)
+ : _docTypeName(docTypeName),
+ _name(name)
+ {
+ }
+ virtual ~MyListener() { }
+ virtual void notifyGidToLidChange(document::GlobalId, uint32_t) override { }
+ virtual void notifyRegistered() override { }
+ virtual const vespalib::string &getName() const override { return _name; }
+ virtual const vespalib::string &getDocTypeName() const override { return _docTypeName; }
+};
+
+using AddEntry = std::pair<vespalib::string, vespalib::string>;
+using RemoveEntry = std::pair<vespalib::string, std::set<vespalib::string>>;
+
+class MyHandler : public IGidToLidChangeHandler {
+ std::vector<AddEntry> _adds;
+ std::vector<RemoveEntry> _removes;
+public:
+ MyHandler()
+ : IGidToLidChangeHandler(),
+ _adds(),
+ _removes()
+ {
+ }
+
+ ~MyHandler() { }
+
+ virtual void addListener(std::unique_ptr<IGidToLidChangeListener> listener) override {
+ _adds.emplace_back(listener->getDocTypeName(), listener->getName());
+ }
+
+ virtual void removeListeners(const vespalib::string &docTypeName,
+ const std::set<vespalib::string> &keepNames) override {
+ _removes.emplace_back(docTypeName, keepNames);
+ }
+
+ void assertAdds(const std::vector<AddEntry> &expAdds)
+ {
+ EXPECT_EQUAL(expAdds, _adds);
+ }
+
+ void assertRemoves(const std::vector<RemoveEntry> &expRemoves)
+ {
+ EXPECT_EQUAL(expRemoves, _removes);
+ }
+};
+
+struct Fixture
+{
+ std::shared_ptr<MyHandler> _handler;
+
+ Fixture()
+ : _handler(std::make_shared<MyHandler>())
+ {
+ }
+
+ ~Fixture()
+ {
+ }
+
+ std::unique_ptr<GidToLidChangeRegistrator>
+ getRegistrator(const vespalib::string &docTypeName) {
+ return std::make_unique<GidToLidChangeRegistrator>(_handler, docTypeName);
+ }
+
+ void assertAdds(const std::vector<AddEntry> &expAdds) {
+ _handler->assertAdds(expAdds);
+ }
+
+ void assertRemoves(const std::vector<RemoveEntry> &expRemoves) {
+ _handler->assertRemoves(expRemoves);
+ }
+};
+
+TEST_F("Test that we can register a listener", Fixture)
+{
+ auto registrator = f.getRegistrator("testdoc");
+ TEST_DO(f.assertAdds({}));
+ TEST_DO(f.assertRemoves({}));
+ registrator->addListener(std::make_unique<MyListener>("testdoc", "f1"));
+ registrator.reset();
+ TEST_DO(f.assertAdds({{"testdoc","f1"}}));
+ TEST_DO(f.assertRemoves({{"testdoc",{"f1"}}}));
+}
+
+TEST_F("Test that we can register multiple listeners", Fixture)
+{
+ auto registrator = f.getRegistrator("testdoc");
+ TEST_DO(f.assertAdds({}));
+ TEST_DO(f.assertRemoves({}));
+ registrator->addListener(std::make_unique<MyListener>("testdoc", "f1"));
+ registrator->addListener(std::make_unique<MyListener>("testdoc", "f2"));
+ registrator.reset();
+ TEST_DO(f.assertAdds({{"testdoc","f1"},{"testdoc","f2"}}));
+ TEST_DO(f.assertRemoves({{"testdoc",{"f1","f2"}}}));
+}
+
+}
+
+TEST_MAIN()
+{
+ TEST_RUN_ALL();
+}