diff options
Diffstat (limited to 'storage/src/tests/distributor/idealstatemanagertest.cpp')
-rw-r--r-- | storage/src/tests/distributor/idealstatemanagertest.cpp | 174 |
1 files changed, 69 insertions, 105 deletions
diff --git a/storage/src/tests/distributor/idealstatemanagertest.cpp b/storage/src/tests/distributor/idealstatemanagertest.cpp index 7401e083900..fc26a8c9cce 100644 --- a/storage/src/tests/distributor/idealstatemanagertest.cpp +++ b/storage/src/tests/distributor/idealstatemanagertest.cpp @@ -1,5 +1,4 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include <vespa/vdstestlib/cppunit/macros.h> #include <tests/common/dummystoragelink.h> #include <vespa/storageapi/message/persistence.h> #include <vespa/storage/distributor/bucketdbupdater.h> @@ -12,81 +11,68 @@ #include <vespa/document/bucket/fixed_bucket_spaces.h> #include <vespa/document/test/make_document_bucket.h> #include <vespa/document/test/make_bucket_space.h> +#include <vespa/vespalib/gtest/gtest.h> using document::test::makeDocumentBucket; using document::test::makeBucketSpace; using document::FixedBucketSpaces; +using namespace ::testing; -namespace storage { -namespace distributor { +namespace storage::distributor { -class IdealStateManagerTest : public CppUnit::TestFixture, - public DistributorTestUtil -{ -public: +struct IdealStateManagerTest : Test, DistributorTestUtil { IdealStateManagerTest() - : CppUnit::TestFixture(), - DistributorTestUtil(), - _bucketSpaces() + : Test(), + DistributorTestUtil(), + _bucketSpaces() {} - void setUp() override { + void SetUp() override { createLinks(); _bucketSpaces = getBucketSpaces(); }; - void tearDown() override { + void TearDown() override { close(); } - void testSibling(); - void testClearActiveOnNodeDown(); - void testRecheckWhenActive(); - void testRecheckWhenPending(); - void testOpsGenerationBusy(); - void testStatusPage(); - void testDisabledStateChecker(); - void testBlockIdealStateOpsOnFullRequestBucketInfo(); - void testBlockCheckForAllOperationsToSpecificBucket(); - void setSystemState(const lib::ClusterState& systemState) { _distributor->enableClusterStateBundle(lib::ClusterStateBundle(systemState)); } - CPPUNIT_TEST_SUITE(IdealStateManagerTest); - CPPUNIT_TEST(testSibling); - CPPUNIT_TEST(testClearActiveOnNodeDown); - CPPUNIT_TEST(testRecheckWhenActive); - CPPUNIT_TEST(testStatusPage); - CPPUNIT_TEST(testDisabledStateChecker); - CPPUNIT_TEST(testBlockIdealStateOpsOnFullRequestBucketInfo); - CPPUNIT_TEST(testBlockCheckForAllOperationsToSpecificBucket); - CPPUNIT_TEST_SUITE_END(); -private: + bool checkBlock(const IdealStateOperation& op, + const document::Bucket& bucket, + const PendingMessageTracker& tracker) const + { + return op.checkBlock(bucket, tracker); + } + + bool checkBlockForAllNodes(const IdealStateOperation& op, + const document::Bucket& bucket, + const PendingMessageTracker& tracker) const + { + return op.checkBlockForAllNodes(bucket, tracker); + } + std::vector<document::BucketSpace> _bucketSpaces; std::string makeBucketStatusString(const std::string &defaultSpaceBucketStatus); }; -CPPUNIT_TEST_SUITE_REGISTRATION(IdealStateManagerTest); - -void -IdealStateManagerTest::testSibling() -{ - CPPUNIT_ASSERT_EQUAL(document::BucketId(1,1), - getIdealStateManager().getDistributorComponent() - .getSibling(document::BucketId(1, 0))); - CPPUNIT_ASSERT_EQUAL(document::BucketId(1,0), - getIdealStateManager().getDistributorComponent() - .getSibling(document::BucketId(1, 1))); - CPPUNIT_ASSERT_EQUAL(document::BucketId(2,3), - getIdealStateManager().getDistributorComponent() - .getSibling(document::BucketId(2, 1))); - CPPUNIT_ASSERT_EQUAL(document::BucketId(2,1), - getIdealStateManager().getDistributorComponent() - .getSibling(document::BucketId(2, 3))); +TEST_F(IdealStateManagerTest, sibling) { + EXPECT_EQ(document::BucketId(1,1), + getIdealStateManager().getDistributorComponent() + .getSibling(document::BucketId(1, 0))); + EXPECT_EQ(document::BucketId(1,0), + getIdealStateManager().getDistributorComponent() + .getSibling(document::BucketId(1, 1))); + EXPECT_EQ(document::BucketId(2,3), + getIdealStateManager().getDistributorComponent() + .getSibling(document::BucketId(2, 1))); + EXPECT_EQ(document::BucketId(2,1), + getIdealStateManager().getDistributorComponent() + .getSibling(document::BucketId(2, 3))); } -void -IdealStateManagerTest::testStatusPage() { +TEST_F(IdealStateManagerTest, status_page) { close(); getDirConfig().getConfig("stor-distributormanager").set("splitsize", "100"); getDirConfig().getConfig("stor-distributormanager").set("splitcount", "1000000"); @@ -101,15 +87,14 @@ IdealStateManagerTest::testStatusPage() { std::ostringstream ost; getIdealStateManager().getBucketStatus(ost); - CPPUNIT_ASSERT_EQUAL(makeBucketStatusString("BucketId(0x4000000000000002) : [node(idx=0,crc=0xff,docs=10/10,bytes=10/10,trusted=true,active=true,ready=false)]<br>\n" + EXPECT_EQ(makeBucketStatusString("BucketId(0x4000000000000002) : [node(idx=0,crc=0xff,docs=10/10,bytes=10/10,trusted=true,active=true,ready=false)]<br>\n" "<b>BucketId(0x4000000000000005):</b> <i> : split: [Splitting bucket because its maximum size (200 b, 100 docs, 100 meta, 200 b total) is " "higher than the configured limit of (100, 1000000)]</i> [node(idx=0,crc=0xff,docs=100/100,bytes=200/200,trusted=true," "active=true,ready=false)]<br>\n"), - ost.str()); + ost.str()); } -void -IdealStateManagerTest::testDisabledStateChecker() { +TEST_F(IdealStateManagerTest, disabled_state_checker) { setupDistributor(1, 1, "distributor:1 storage:1"); getConfig().setSplitSize(100); @@ -122,7 +107,7 @@ IdealStateManagerTest::testDisabledStateChecker() { std::ostringstream ost; getIdealStateManager().getBucketStatus(ost); - CPPUNIT_ASSERT_EQUAL(makeBucketStatusString( + EXPECT_EQ(makeBucketStatusString( "BucketId(0x4000000000000002) : [node(idx=0,crc=0xff,docs=10/10,bytes=10/10,trusted=true,active=true,ready=false)]<br>\n" "<b>BucketId(0x4000000000000005):</b> <i> : split: [Splitting bucket because its maximum size (200 b, 100 docs, 100 meta, 200 b total) is " "higher than the configured limit of (100, 1000000)]</i> [node(idx=0,crc=0xff,docs=100/100,bytes=200/200,trusted=true," @@ -130,14 +115,11 @@ IdealStateManagerTest::testDisabledStateChecker() { ost.str()); tick(); - CPPUNIT_ASSERT_EQUAL(std::string(""), - _distributor->getActiveIdealStateOperations()); + EXPECT_EQ("", _distributor->getActiveIdealStateOperations()); } -void -IdealStateManagerTest::testClearActiveOnNodeDown() -{ +TEST_F(IdealStateManagerTest, clear_active_on_node_down) { setSystemState(lib::ClusterState("distributor:1 storage:3")); for (int i = 1; i < 4; i++) { insertBucketInfo(document::BucketId(16, i), 0, 0xff, 100, 200); @@ -152,24 +134,19 @@ IdealStateManagerTest::testClearActiveOnNodeDown() tick(); } - CPPUNIT_ASSERT_EQUAL( - std::string("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n" - "setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000002)) (pri 100)\n" - "setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000003)) (pri 100)\n"), - _distributor->getActiveIdealStateOperations()); + EXPECT_EQ("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n" + "setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000002)) (pri 100)\n" + "setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000003)) (pri 100)\n", + _distributor->getActiveIdealStateOperations()); setSystemState(lib::ClusterState("distributor:1 storage:3 .0.s:d")); - CPPUNIT_ASSERT_EQUAL(std::string(""), - _distributor->getActiveIdealStateOperations()); - CPPUNIT_ASSERT_EQUAL(uint32_t(0), - _distributor->getPendingMessageTracker() - .getNodeInfo().getPendingCount(0)); + EXPECT_EQ("", _distributor->getActiveIdealStateOperations()); + EXPECT_EQ(0, _distributor->getPendingMessageTracker() + .getNodeInfo().getPendingCount(0)); } -void -IdealStateManagerTest::testRecheckWhenActive() -{ +TEST_F(IdealStateManagerTest, recheck_when_active) { for (uint32_t j = 0; j < 3; j++) { insertBucketInfo(document::BucketId(16, 1), j, 0xff - j, 100, 200); } @@ -178,26 +155,21 @@ IdealStateManagerTest::testRecheckWhenActive() tick(); - CPPUNIT_ASSERT_EQUAL( - std::string("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n"), - _distributor->getActiveIdealStateOperations()); + EXPECT_EQ("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n", + _distributor->getActiveIdealStateOperations()); tick(); - CPPUNIT_ASSERT_EQUAL( - std::string("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n"), - _distributor->getActiveIdealStateOperations()); + EXPECT_EQ("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n", + _distributor->getActiveIdealStateOperations()); tick(); - CPPUNIT_ASSERT_EQUAL( - std::string("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n"), - _distributor->getActiveIdealStateOperations()); + EXPECT_EQ("setbucketstate to [0] Bucket(BucketSpace(0x0000000000000001), BucketId(0x4000000000000001)) (pri 100)\n", + _distributor->getActiveIdealStateOperations()); } -void -IdealStateManagerTest::testBlockIdealStateOpsOnFullRequestBucketInfo() -{ +TEST_F(IdealStateManagerTest, block_ideal_state_ops_on_full_request_bucket_info) { setupDistributor(2, 10, "distributor:1 storage:2"); framework::defaultimplementation::FakeClock clock; @@ -209,45 +181,39 @@ IdealStateManagerTest::testBlockIdealStateOpsOnFullRequestBucketInfo() // RequestBucketInfoCommand does not have a specific bucketid since it's // sent to the entire node. It will then use a null bucketid. { - std::shared_ptr<api::RequestBucketInfoCommand> msg( - new api::RequestBucketInfoCommand(makeBucketSpace(), buckets)); - msg->setAddress( - api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 4)); + auto msg = std::make_shared<api::RequestBucketInfoCommand>(makeBucketSpace(), buckets); + msg->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 4)); tracker.insert(msg); } { RemoveBucketOperation op("storage", BucketAndNodes(makeDocumentBucket(bid), toVector<uint16_t>(3, 4))); - CPPUNIT_ASSERT(op.isBlocked(tracker)); + EXPECT_TRUE(op.isBlocked(tracker)); } { // Don't trigger on requests to other nodes. RemoveBucketOperation op("storage", BucketAndNodes(makeDocumentBucket(bid), toVector<uint16_t>(3, 5))); - CPPUNIT_ASSERT(!op.isBlocked(tracker)); + EXPECT_FALSE(op.isBlocked(tracker)); } // Don't block on null-bucket messages that aren't RequestBucketInfo. { - std::shared_ptr<api::CreateVisitorCommand> msg( - new api::CreateVisitorCommand(makeBucketSpace(), "foo", "bar", "baz")); - msg->setAddress( - api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 7)); + auto msg = std::make_shared<api::CreateVisitorCommand>(makeBucketSpace(), "foo", "bar", "baz"); + msg->setAddress(api::StorageMessageAddress("storage", lib::NodeType::STORAGE, 7)); tracker.insert(msg); } { RemoveBucketOperation op("storage", BucketAndNodes(makeDocumentBucket(bid), toVector<uint16_t>(7))); - CPPUNIT_ASSERT(!op.isBlocked(tracker)); + EXPECT_FALSE(op.isBlocked(tracker)); } } -void -IdealStateManagerTest::testBlockCheckForAllOperationsToSpecificBucket() -{ +TEST_F(IdealStateManagerTest, block_check_for_all_operations_to_specific_bucket) { setupDistributor(2, 10, "distributor:1 storage:2"); framework::defaultimplementation::FakeClock clock; PendingMessageTracker tracker(_node->getComponentRegister()); @@ -263,9 +229,9 @@ IdealStateManagerTest::testBlockCheckForAllOperationsToSpecificBucket() RemoveBucketOperation op("storage", BucketAndNodes(makeDocumentBucket(bid), toVector<uint16_t>(7))); // Not blocked for exact node match. - CPPUNIT_ASSERT(!op.checkBlock(makeDocumentBucket(bid), tracker)); + EXPECT_FALSE(checkBlock(op, makeDocumentBucket(bid), tracker)); // But blocked for bucket match! - CPPUNIT_ASSERT(op.checkBlockForAllNodes(makeDocumentBucket(bid), tracker)); + EXPECT_TRUE(checkBlockForAllNodes(op, makeDocumentBucket(bid), tracker)); } } @@ -282,6 +248,4 @@ IdealStateManagerTest::makeBucketStatusString(const std::string &defaultSpaceBuc return ost.str(); } -} // distributor -} // storage - +} // storage::distributor |