summaryrefslogtreecommitdiff
path: root/src/mongo/dbtests/querytests.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/dbtests/querytests.cpp')
-rw-r--r--src/mongo/dbtests/querytests.cpp56
1 files changed, 24 insertions, 32 deletions
diff --git a/src/mongo/dbtests/querytests.cpp b/src/mongo/dbtests/querytests.cpp
index 772cd354c0b..841086a01f2 100644
--- a/src/mongo/dbtests/querytests.cpp
+++ b/src/mongo/dbtests/querytests.cpp
@@ -295,8 +295,7 @@ public:
};
/**
- * An exception triggered during a get more request destroys the ClientCursor used by the get
- * more, preventing further iteration of the cursor in subsequent get mores.
+ * Setting killAllOperations causes further getmores to fail.
*/
class GetMoreKillOp : public ClientBase {
public:
@@ -313,7 +312,6 @@ public:
// Create a cursor on the collection, with a batch size of 200.
unique_ptr<DBClientCursor> cursor = _client.query(ns, "", 0, 0, 0, 0, 200);
- CursorId cursorId = cursor->getCursorId();
// Count 500 results, spanning a few batches of documents.
for (int i = 0; i < 500; ++i) {
@@ -324,23 +322,16 @@ public:
// Set the killop kill all flag, forcing the next get more to fail with a kill op
// exception.
getGlobalServiceContext()->setKillAllOperations();
- while (cursor->more()) {
- cursor->next();
- }
+ ASSERT_THROWS_CODE(([&] {
+ while (cursor->more()) {
+ cursor->next();
+ }
+ }()),
+ UserException,
+ ErrorCodes::InterruptedAtShutdown);
// Revert the killop kill all flag.
getGlobalServiceContext()->unsetKillAllOperations();
-
- // Check that the cursor has been removed.
- {
- AutoGetCollectionForReadCommand ctx(&_opCtx, NamespaceString(ns));
- ASSERT(0 == ctx.getCollection()->getCursorManager()->numCursors());
- }
-
- ASSERT_FALSE(CursorManager::eraseCursorGlobal(&_opCtx, cursorId));
-
- // Check that a subsequent get more fails with the cursor removed.
- ASSERT_THROWS(_client.getMore(ns, cursorId), UserException);
}
};
@@ -376,8 +367,10 @@ public:
// Send a get more with a namespace that is incorrect ('spoofed') for this cursor id.
// This is the invalaid get more request described in the comment preceding this class.
- _client.getMore("unittests.querytests.GetMoreInvalidRequest_WRONG_NAMESPACE_FOR_CURSOR",
- cursor->getCursorId());
+ ASSERT_THROWS(
+ _client.getMore("unittests.querytests.GetMoreInvalidRequest_WRONG_NAMESPACE_FOR_CURSOR",
+ cursor->getCursorId()),
+ UserException);
// Check that the cursor still exists
{
@@ -486,9 +479,7 @@ public:
insert(ns, BSON("a" << 3));
// We have overwritten the previous cursor position and should encounter a dead cursor.
- if (c->more()) {
- ASSERT_THROWS(c->nextSafe(), AssertionException);
- }
+ ASSERT_THROWS(c->more() ? c->nextSafe() : BSONObj(), AssertionException);
}
};
@@ -512,9 +503,7 @@ public:
insert(ns, BSON("a" << 4));
// We have overwritten the previous cursor position and should encounter a dead cursor.
- if (c->more()) {
- ASSERT_THROWS(c->nextSafe(), AssertionException);
- }
+ ASSERT_THROWS(c->more() ? c->nextSafe() : BSONObj(), AssertionException);
}
};
@@ -550,9 +539,8 @@ public:
void run() {
const char* ns = "unittests.querytests.TailCappedOnly";
_client.insert(ns, BSONObj());
- unique_ptr<DBClientCursor> c =
- _client.query(ns, BSONObj(), 0, 0, 0, QueryOption_CursorTailable);
- ASSERT(c->isDead());
+ ASSERT_THROWS(_client.query(ns, BSONObj(), 0, 0, 0, QueryOption_CursorTailable),
+ UserException);
}
};
@@ -687,7 +675,8 @@ public:
0,
0,
0,
- QueryOption_OplogReplay | QueryOption_CursorTailable);
+ QueryOption_OplogReplay | QueryOption_CursorTailable |
+ DBClientCursor::QueryOptionLocal_forceOpQuery);
ASSERT(c->more());
ASSERT_EQUALS(two, c->next()["ts"].Date());
long long cursorId = c->getCursorId();
@@ -1348,9 +1337,12 @@ public:
insertNext();
}
- while (c->more()) {
- c->next();
- }
+ ASSERT_THROWS(([&] {
+ while (c->more()) {
+ c->nextSafe();
+ }
+ }()),
+ UserException);
}
void insertNext() {