summaryrefslogtreecommitdiffstats
path: root/storage
diff options
context:
space:
mode:
authorTor Brede Vekterli <vekterli@oath.com>2018-05-31 11:19:33 +0000
committerTor Brede Vekterli <vekterli@oath.com>2018-06-01 12:39:13 +0000
commitca7df621548983bed8426cf03e2324241b656192 (patch)
tree6bd686d9e41c994accf0ad22b0d270f82c993400 /storage
parentc241a9556406797e6552b4fb234d522c67873375 (diff)
Wait for all started visitors to finish
Also correct wrong expected number of busy bounces in test
Diffstat (limited to 'storage')
-rw-r--r--storage/src/tests/visiting/visitormanagertest.cpp44
1 files changed, 30 insertions, 14 deletions
diff --git a/storage/src/tests/visiting/visitormanagertest.cpp b/storage/src/tests/visiting/visitormanagertest.cpp
index 8b17e851868..621764770c6 100644
--- a/storage/src/tests/visiting/visitormanagertest.cpp
+++ b/storage/src/tests/visiting/visitormanagertest.cpp
@@ -246,14 +246,15 @@ VisitorManagerTest::addSomeRemoves(bool removeAll)
void
VisitorManagerTest::tearDown()
{
- if (_top.get() != 0) {
+ if (_top) {
+ assert(_top->getNumReplies() == 0);
_top->close();
_top->flush();
- _top.reset(0);
+ _top.reset();
}
- _node.reset(0);
- _messageSessionFactory.reset(0);
- _manager = 0;
+ _node.reset();
+ _messageSessionFactory.reset();
+ _manager = nullptr;
}
TestVisitorMessageSession&
@@ -711,16 +712,17 @@ VisitorManagerTest::testVisitorCleanup()
_top->sendDown(cmd);
}
-
- // Should get 14 immediate replies - 10 failures and 4 busy
+ // Should get 16 immediate replies - 10 failures and 6 busy
{
- _top->waitForMessages(14, 60);
+ const int expected_total = 16;
+ _top->waitForMessages(expected_total, 60);
const msg_ptr_vector replies = _top->getRepliesOnce();
+ CPPUNIT_ASSERT_EQUAL(size_t(expected_total), replies.size());
int failures = 0;
int busy = 0;
- for (uint32_t i=0; i< 14; ++i) {
+ for (uint32_t i=0; i< expected_total; ++i) {
std::shared_ptr<api::StorageMessage> msg(replies[i]);
CPPUNIT_ASSERT_EQUAL(api::MessageType::VISITOR_CREATE_REPLY, msg->getType());
std::shared_ptr<api::CreateVisitorReply> reply(
@@ -741,9 +743,11 @@ VisitorManagerTest::testVisitorCleanup()
}
CPPUNIT_ASSERT_EQUAL(10, failures);
- CPPUNIT_ASSERT_EQUAL(4, busy);
+ CPPUNIT_ASSERT_EQUAL(expected_total - 10, busy);
}
+ // 4 pending
+
// Finish a visitor
std::vector<document::Document::SP > docs;
std::vector<document::DocumentId> docIds;
@@ -753,15 +757,17 @@ VisitorManagerTest::testVisitorCleanup()
// Should get a reply for the visitor.
verifyCreateVisitorReply(api::ReturnCode::OK);
+ // 3 pending
+
// Fail a visitor
getMessagesAndReply(1, getSession(1), docs, docIds, api::ReturnCode::INTERNAL_FAILURE);
// Should get a reply for the visitor.
verifyCreateVisitorReply(api::ReturnCode::INTERNAL_FAILURE);
- while (_manager->getActiveVisitorCount() > 2) {
- FastOS_Thread::Sleep(10);
- }
+ // 2 pending
+
+ CPPUNIT_ASSERT_EQUAL(2u, _manager->getActiveVisitorCount());
// Start a bunch of more visitors
for (uint32_t i=0; i<10; ++i) {
@@ -778,7 +784,7 @@ VisitorManagerTest::testVisitorCleanup()
// Should now get 8 busy.
_top->waitForMessages(8, 60);
const msg_ptr_vector replies = _top->getRepliesOnce();
- CPPUNIT_ASSERT_EQUAL(8, (int)replies.size());
+ CPPUNIT_ASSERT_EQUAL(size_t(8), replies.size());
for (uint32_t i=0; i< replies.size(); ++i) {
std::shared_ptr<api::StorageMessage> msg(replies[i]);
@@ -789,6 +795,16 @@ VisitorManagerTest::testVisitorCleanup()
CPPUNIT_ASSERT_EQUAL(api::ReturnCode::BUSY, reply->getResult().getResult());
}
+
+ // 4 still pending, need to clean up our stuff before tearing down.
+ CPPUNIT_ASSERT_EQUAL(4u, _manager->getActiveVisitorCount());
+
+ for (uint32_t i = 0; i < 4; ++i) {
+ getMessagesAndReply(1, getSession(i + 2), docs, docIds);
+ verifyCreateVisitorReply(api::ReturnCode::OK);
+ }
+
+ CPPUNIT_ASSERT_EQUAL(0u, _manager->getActiveVisitorCount());
}
void