summaryrefslogtreecommitdiffstats
path: root/storage/src/tests/distributor/idealstatemanagertest.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'storage/src/tests/distributor/idealstatemanagertest.cpp')
-rw-r--r--storage/src/tests/distributor/idealstatemanagertest.cpp174
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