summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@yahoo-inc.com>2017-02-17 14:09:42 +0000
committerTor Egge <Tor.Egge@yahoo-inc.com>2017-02-17 14:09:42 +0000
commit39b0109937c1fc18904f663dc4e626342b059b77 (patch)
tree3cbdc67cad632583b52ce0e809fdb34dcd4299fe
parenteca2aa078e4c9daeeaf53636cd5f3a78856c7909 (diff)
Add unit test for gid to lid change listener.
-rw-r--r--searchcore/CMakeLists.txt1
-rw-r--r--searchcore/src/tests/proton/reference/gid_to_lid_change_listener/CMakeLists.txt10
-rw-r--r--searchcore/src/tests/proton/reference/gid_to_lid_change_listener/DESC1
-rw-r--r--searchcore/src/tests/proton/reference/gid_to_lid_change_listener/FILES1
-rw-r--r--searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp105
5 files changed, 118 insertions, 0 deletions
diff --git a/searchcore/CMakeLists.txt b/searchcore/CMakeLists.txt
index 7546389aeb6..e98e1af15e6 100644
--- a/searchcore/CMakeLists.txt
+++ b/searchcore/CMakeLists.txt
@@ -117,6 +117,7 @@ vespa_define_module(
src/tests/proton/persistenceconformance
src/tests/proton/persistenceengine
src/tests/proton/proton
+ src/tests/proton/reference/gid_to_lid_change_listener
src/tests/proton/reference/gid_to_lid_mapper
src/tests/proton/reference/document_db_referent_registry
src/tests/proton/reprocessing/attribute_reprocessing_initializer
diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/CMakeLists.txt b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/CMakeLists.txt
new file mode 100644
index 00000000000..f51f0110f7f
--- /dev/null
+++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/CMakeLists.txt
@@ -0,0 +1,10 @@
+# Copyright 2017 Yahoo Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(searchcore_gid_to_lid_change_listener_test_app TEST
+ SOURCES
+ gid_to_lid_change_listener_test.cpp
+ DEPENDS
+ searchcore_reference
+ searchcore_documentmetastore
+ searchcore_bucketdb
+)
+vespa_add_test(NAME searchcore_gid_to_lid_change_listener_test_app COMMAND searchcore_gid_to_lid_change_listener_test_app)
diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/DESC b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/DESC
new file mode 100644
index 00000000000..ab26dd60a1b
--- /dev/null
+++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/DESC
@@ -0,0 +1 @@
+gid_to_lid_change_listener test. Take a look at gid_to_lid_change_listener_test.cpp for details.
diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/FILES b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/FILES
new file mode 100644
index 00000000000..ad1848502a5
--- /dev/null
+++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/FILES
@@ -0,0 +1 @@
+gid_to_lid_change_listener_test.cpp
diff --git a/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp
new file mode 100644
index 00000000000..fb762bd0d44
--- /dev/null
+++ b/searchcore/src/tests/proton/reference/gid_to_lid_change_listener/gid_to_lid_change_listener_test.cpp
@@ -0,0 +1,105 @@
+// 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/documentid.h>
+#include <vespa/searchlib/common/sequencedtaskexecutor.h>
+#include <vespa/searchcore/proton/common/monitored_refcount.h>
+#include <vespa/searchcore/proton/reference/gid_to_lid_change_listener.h>
+#include <vespa/log/log.h>
+LOG_SETUP("gid_to_lid_change_listener_test");
+
+using document::GlobalId;
+using document::BucketId;
+using document::DocumentId;
+using vespalib::GenerationHandler;
+using search::attribute::Config;
+using search::attribute::BasicType;
+using search::attribute::ReferenceAttribute;
+
+namespace proton {
+
+namespace {
+
+GlobalId toGid(vespalib::stringref docId) {
+ return DocumentId(docId).getGlobalId();
+}
+
+vespalib::string doc1("id:test:music::1");
+vespalib::string doc2("id:test:music::2");
+vespalib::string doc3("id:test:music::3");
+
+}
+
+struct Fixture
+{
+ std::shared_ptr<ReferenceAttribute> _attr;
+ search::SequencedTaskExecutor _writer;
+ MonitoredRefCount _refCount;
+ std::unique_ptr<GidToLidChangeListener> _listener;
+
+ Fixture()
+ : _attr(std::make_shared<ReferenceAttribute>("test", Config(BasicType::REFERENCE))),
+ _writer(1),
+ _refCount(),
+ _listener()
+ {
+ }
+
+ void ensureDocIdLimit(uint32_t docIdLimit) {
+ while (_attr->getNumDocs() < docIdLimit) {
+ uint32_t newDocId = 0u;
+ _attr->addDoc(newDocId);
+ _attr->commit();
+ }
+ }
+
+ void set(uint32_t doc, const GlobalId &gid) {
+ _attr->update(doc, gid);
+ }
+
+ void commit() { _attr->commit(); }
+
+ const ReferenceAttribute::Reference *getRef(uint32_t doc) {
+ return _attr->getReference(doc);
+ }
+
+ void assertRefLid(uint32_t expLid, uint32_t doc) {
+ auto ref = getRef(doc);
+ EXPECT_TRUE(ref != nullptr);
+ EXPECT_EQUAL(expLid, ref->lid());
+ }
+
+ void allocListener() {
+ _listener = std::make_unique<GidToLidChangeListener>(_writer, _attr, _refCount);
+ }
+
+ void notifyGidToLidChange(const GlobalId &gid, uint32_t referencedDoc) {
+ _listener->notifyGidToLidChange(gid, referencedDoc);
+ }
+};
+
+TEST_F("Test that we can use gid to lid change listener", Fixture)
+{
+ f.ensureDocIdLimit(4);
+ f.set(1, toGid(doc1));
+ f.set(2, toGid(doc2));
+ f.set(3, toGid(doc1));
+ f.commit();
+ TEST_DO(f.assertRefLid(0, 1));
+ TEST_DO(f.assertRefLid(0, 2));
+ TEST_DO(f.assertRefLid(0, 3));
+ f.allocListener();
+ f.notifyGidToLidChange(toGid(doc1), 10);
+ f.notifyGidToLidChange(toGid(doc2), 20);
+ f.notifyGidToLidChange(toGid(doc3), 30);
+ TEST_DO(f.assertRefLid(10, 1));
+ TEST_DO(f.assertRefLid(20, 2));
+ TEST_DO(f.assertRefLid(10, 3));
+}
+
+}
+
+TEST_MAIN()
+{
+ TEST_RUN_ALL();
+}