diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2021-02-04 13:48:26 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2021-02-04 13:48:26 +0000 |
commit | 066d60092ba680331df7ec2769a0d140dbfab001 (patch) | |
tree | 7088dd2d198a9eef73512fe75a3e8505e9a641ba /searchcore | |
parent | 8224095b228cfa64c61baf3d7c152f9817d7e399 (diff) |
Split to one test file per fixture.
Diffstat (limited to 'searchcore')
3 files changed, 151 insertions, 132 deletions
diff --git a/searchcore/src/tests/proton/documentdb/documentbucketmover/CMakeLists.txt b/searchcore/src/tests/proton/documentdb/documentbucketmover/CMakeLists.txt index e1111343555..2a9215dd605 100644 --- a/searchcore/src/tests/proton/documentdb/documentbucketmover/CMakeLists.txt +++ b/searchcore/src/tests/proton/documentdb/documentbucketmover/CMakeLists.txt @@ -13,14 +13,6 @@ vespa_add_executable(searchcore_documentbucketmover_test_app TEST searchcore_test searchcore_server searchcore_feedoperation - #searchcore_persistenceengine - #searchcore_matching - #searchcore_attribute - #searchcore_documentmetastore - #searchcore_bucketdb - #searchcore_pcommon - #searchcore_grouping - #searchcore_fconfig ) vespa_add_test(NAME searchcore_documentbucketmover_test_app COMMAND searchcore_documentbucketmover_test_app) @@ -34,3 +26,14 @@ vespa_add_executable(searchcore_scaniterator_test_app TEST searchcore_feedoperation ) vespa_add_test(NAME searchcore_scaniterator_test_app COMMAND searchcore_scaniterator_test_app) + +vespa_add_executable(searchcore_documentmover_test_app TEST + SOURCES + documentmover_test.cpp + DEPENDS + searchcore_bucketmover_test + searchcore_server + searchcore_test + searchcore_feedoperation +) +vespa_add_test(NAME searchcore_documentmover_test_app COMMAND searchcore_documentmover_test_app) diff --git a/searchcore/src/tests/proton/documentdb/documentbucketmover/documentmover_test.cpp b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentmover_test.cpp new file mode 100644 index 00000000000..8b304bba4da --- /dev/null +++ b/searchcore/src/tests/proton/documentdb/documentbucketmover/documentmover_test.cpp @@ -0,0 +1,140 @@ +// Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#include "bucketmover_common.h" +#include <vespa/vespalib/testkit/testapp.h> + +#include <vespa/log/log.h> +LOG_SETUP("document_bucket_mover_test"); + +using namespace proton; +using namespace proton::move::test; +using document::BucketId; + +struct MySubDbTwoBuckets : public MySubDb +{ + MySubDbTwoBuckets(test::UserDocumentsBuilder &builder, + std::shared_ptr<BucketDBOwner> bucketDB, + uint32_t subDbId, + SubDbType subDbType) + : MySubDb(builder.getRepo(), bucketDB, subDbId, subDbType) + { + builder.createDocs(1, 1, 6); + builder.createDocs(2, 6, 9); + insertDocs(builder.getDocs()); + ASSERT_NOT_EQUAL(bucket(1), bucket(2)); + ASSERT_EQUAL(5u, docs(1).size()); + ASSERT_EQUAL(3u, docs(2).size()); + ASSERT_EQUAL(9u, _realRetriever->_docs.size()); + } +}; + +struct MoveFixture +{ + test::UserDocumentsBuilder _builder; + std::shared_ptr<BucketDBOwner> _bucketDB; + MyMoveOperationLimiter _limiter; + DocumentBucketMover _mover; + MySubDbTwoBuckets _source; + BucketDBOwner _bucketDb; + MyMoveHandler _handler; + PendingLidTracker _pendingLidsForCommit; + MoveFixture() + : _builder(), + _bucketDB(std::make_shared<BucketDBOwner>()), + _limiter(), + _mover(_limiter), + _source(_builder, _bucketDB, 0u, SubDbType::READY), + _bucketDb(), + _handler(_bucketDb) + { + } + void setupForBucket(const BucketId &bucket, + uint32_t sourceSubDbId, + uint32_t targetSubDbId) { + _source._subDb = MaintenanceDocumentSubDB(_source._subDb.name(), + sourceSubDbId, + _source._subDb.meta_store(), + _source._subDb.retriever(), + _source._subDb.feed_view(), + &_pendingLidsForCommit); + _mover.setupForBucket(bucket, &_source._subDb, targetSubDbId, _handler, _bucketDb); + } + bool moveDocuments(size_t maxDocsToMove) { + return _mover.moveDocuments(maxDocsToMove); + } +}; + +TEST("require that initial bucket mover is done") +{ + MyMoveOperationLimiter limiter; + DocumentBucketMover mover(limiter); + EXPECT_TRUE(mover.bucketDone()); + mover.moveDocuments(2); + EXPECT_TRUE(mover.bucketDone()); +} + +TEST_F("require that we can move all documents", MoveFixture) +{ + f.setupForBucket(f._source.bucket(1), 6, 9); + EXPECT_TRUE(f.moveDocuments(5)); + EXPECT_TRUE(f._mover.bucketDone()); + EXPECT_EQUAL(5u, f._handler._moves.size()); + EXPECT_EQUAL(5u, f._limiter.beginOpCount); + for (size_t i = 0; i < 5u; ++i) { + assertEqual(f._source.bucket(1), f._source.docs(1)[0], 6, 9, f._handler._moves[0]); + } +} + +TEST_F("require that move is stalled if document is pending commit", MoveFixture) +{ + f.setupForBucket(f._source.bucket(1), 6, 9); + { + IPendingLidTracker::Token token = f._pendingLidsForCommit.produce(1); + EXPECT_FALSE(f.moveDocuments(5)); + EXPECT_FALSE(f._mover.bucketDone()); + } + EXPECT_TRUE(f.moveDocuments(5)); + EXPECT_TRUE(f._mover.bucketDone()); + EXPECT_EQUAL(5u, f._handler._moves.size()); + EXPECT_EQUAL(5u, f._limiter.beginOpCount); + for (size_t i = 0; i < 5u; ++i) { + assertEqual(f._source.bucket(1), f._source.docs(1)[0], 6, 9, f._handler._moves[0]); + } +} + +TEST_F("require that bucket is cached when IDocumentMoveHandler handles move operation", MoveFixture) +{ + f.setupForBucket(f._source.bucket(1), 6, 9); + EXPECT_TRUE(f.moveDocuments(5)); + EXPECT_TRUE(f._mover.bucketDone()); + EXPECT_EQUAL(5u, f._handler._moves.size()); + EXPECT_EQUAL(5u, f._handler._numCachedBuckets); + EXPECT_FALSE(f._bucketDb.takeGuard()->isCachedBucket(f._source.bucket(1))); +} + +TEST_F("require that we can move documents in several steps", MoveFixture) +{ + f.setupForBucket(f._source.bucket(1), 6, 9); + f.moveDocuments(2); + EXPECT_FALSE(f._mover.bucketDone()); + EXPECT_EQUAL(2u, f._handler._moves.size()); + assertEqual(f._source.bucket(1), f._source.docs(1)[0], 6, 9, f._handler._moves[0]); + assertEqual(f._source.bucket(1), f._source.docs(1)[1], 6, 9, f._handler._moves[1]); + EXPECT_TRUE(f.moveDocuments(2)); + EXPECT_FALSE(f._mover.bucketDone()); + EXPECT_EQUAL(4u, f._handler._moves.size()); + assertEqual(f._source.bucket(1), f._source.docs(1)[2], 6, 9, f._handler._moves[2]); + assertEqual(f._source.bucket(1), f._source.docs(1)[3], 6, 9, f._handler._moves[3]); + EXPECT_TRUE(f.moveDocuments(2)); + EXPECT_TRUE(f._mover.bucketDone()); + EXPECT_EQUAL(5u, f._handler._moves.size()); + assertEqual(f._source.bucket(1), f._source.docs(1)[4], 6, 9, f._handler._moves[4]); + EXPECT_TRUE(f.moveDocuments(2)); + EXPECT_TRUE(f._mover.bucketDone()); + EXPECT_EQUAL(5u, f._handler._moves.size()); +} + +TEST_MAIN() +{ + TEST_RUN_ALL(); +} diff --git a/searchcore/src/tests/proton/documentdb/documentbucketmover/scaniterator_test.cpp b/searchcore/src/tests/proton/documentdb/documentbucketmover/scaniterator_test.cpp index 15c951e4fee..5da5d5ff21e 100644 --- a/searchcore/src/tests/proton/documentdb/documentbucketmover/scaniterator_test.cpp +++ b/searchcore/src/tests/proton/documentdb/documentbucketmover/scaniterator_test.cpp @@ -13,130 +13,6 @@ using document::BucketId; using ScanItr = bucketdb::ScanIterator; using ScanPass = ScanItr::Pass; -struct MySubDbTwoBuckets : public MySubDb -{ - MySubDbTwoBuckets(test::UserDocumentsBuilder &builder, - std::shared_ptr<BucketDBOwner> bucketDB, - uint32_t subDbId, - SubDbType subDbType) - : MySubDb(builder.getRepo(), bucketDB, subDbId, subDbType) - { - builder.createDocs(1, 1, 6); - builder.createDocs(2, 6, 9); - insertDocs(builder.getDocs()); - ASSERT_NOT_EQUAL(bucket(1), bucket(2)); - ASSERT_EQUAL(5u, docs(1).size()); - ASSERT_EQUAL(3u, docs(2).size()); - ASSERT_EQUAL(9u, _realRetriever->_docs.size()); - } -}; - -struct MoveFixture -{ - test::UserDocumentsBuilder _builder; - std::shared_ptr<BucketDBOwner> _bucketDB; - MyMoveOperationLimiter _limiter; - DocumentBucketMover _mover; - MySubDbTwoBuckets _source; - BucketDBOwner _bucketDb; - MyMoveHandler _handler; - PendingLidTracker _pendingLidsForCommit; - MoveFixture() - : _builder(), - _bucketDB(std::make_shared<BucketDBOwner>()), - _limiter(), - _mover(_limiter), - _source(_builder, _bucketDB, 0u, SubDbType::READY), - _bucketDb(), - _handler(_bucketDb) - { - } - void setupForBucket(const BucketId &bucket, - uint32_t sourceSubDbId, - uint32_t targetSubDbId) { - _source._subDb = MaintenanceDocumentSubDB(_source._subDb.name(), - sourceSubDbId, - _source._subDb.meta_store(), - _source._subDb.retriever(), - _source._subDb.feed_view(), - &_pendingLidsForCommit); - _mover.setupForBucket(bucket, &_source._subDb, targetSubDbId, _handler, _bucketDb); - } - bool moveDocuments(size_t maxDocsToMove) { - return _mover.moveDocuments(maxDocsToMove); - } -}; - -TEST("require that initial bucket mover is done") -{ - MyMoveOperationLimiter limiter; - DocumentBucketMover mover(limiter); - EXPECT_TRUE(mover.bucketDone()); - mover.moveDocuments(2); - EXPECT_TRUE(mover.bucketDone()); -} - -TEST_F("require that we can move all documents", MoveFixture) -{ - f.setupForBucket(f._source.bucket(1), 6, 9); - EXPECT_TRUE(f.moveDocuments(5)); - EXPECT_TRUE(f._mover.bucketDone()); - EXPECT_EQUAL(5u, f._handler._moves.size()); - EXPECT_EQUAL(5u, f._limiter.beginOpCount); - for (size_t i = 0; i < 5u; ++i) { - assertEqual(f._source.bucket(1), f._source.docs(1)[0], 6, 9, f._handler._moves[0]); - } -} - -TEST_F("require that move is stalled if document is pending commit", MoveFixture) -{ - f.setupForBucket(f._source.bucket(1), 6, 9); - { - IPendingLidTracker::Token token = f._pendingLidsForCommit.produce(1); - EXPECT_FALSE(f.moveDocuments(5)); - EXPECT_FALSE(f._mover.bucketDone()); - } - EXPECT_TRUE(f.moveDocuments(5)); - EXPECT_TRUE(f._mover.bucketDone()); - EXPECT_EQUAL(5u, f._handler._moves.size()); - EXPECT_EQUAL(5u, f._limiter.beginOpCount); - for (size_t i = 0; i < 5u; ++i) { - assertEqual(f._source.bucket(1), f._source.docs(1)[0], 6, 9, f._handler._moves[0]); - } -} - -TEST_F("require that bucket is cached when IDocumentMoveHandler handles move operation", MoveFixture) -{ - f.setupForBucket(f._source.bucket(1), 6, 9); - EXPECT_TRUE(f.moveDocuments(5)); - EXPECT_TRUE(f._mover.bucketDone()); - EXPECT_EQUAL(5u, f._handler._moves.size()); - EXPECT_EQUAL(5u, f._handler._numCachedBuckets); - EXPECT_FALSE(f._bucketDb.takeGuard()->isCachedBucket(f._source.bucket(1))); -} - -TEST_F("require that we can move documents in several steps", MoveFixture) -{ - f.setupForBucket(f._source.bucket(1), 6, 9); - f.moveDocuments(2); - EXPECT_FALSE(f._mover.bucketDone()); - EXPECT_EQUAL(2u, f._handler._moves.size()); - assertEqual(f._source.bucket(1), f._source.docs(1)[0], 6, 9, f._handler._moves[0]); - assertEqual(f._source.bucket(1), f._source.docs(1)[1], 6, 9, f._handler._moves[1]); - EXPECT_TRUE(f.moveDocuments(2)); - EXPECT_FALSE(f._mover.bucketDone()); - EXPECT_EQUAL(4u, f._handler._moves.size()); - assertEqual(f._source.bucket(1), f._source.docs(1)[2], 6, 9, f._handler._moves[2]); - assertEqual(f._source.bucket(1), f._source.docs(1)[3], 6, 9, f._handler._moves[3]); - EXPECT_TRUE(f.moveDocuments(2)); - EXPECT_TRUE(f._mover.bucketDone()); - EXPECT_EQUAL(5u, f._handler._moves.size()); - assertEqual(f._source.bucket(1), f._source.docs(1)[4], 6, 9, f._handler._moves[4]); - EXPECT_TRUE(f.moveDocuments(2)); - EXPECT_TRUE(f._mover.bucketDone()); - EXPECT_EQUAL(5u, f._handler._moves.size()); -} - struct ScanFixtureBase { test::UserDocumentsBuilder _builder; |