summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_match_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/document_source_match_test.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_match_test.cpp23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/document_source_match_test.cpp b/src/mongo/db/pipeline/document_source_match_test.cpp
index d61262ed1f7..eb4d40bbc97 100644
--- a/src/mongo/db/pipeline/document_source_match_test.cpp
+++ b/src/mongo/db/pipeline/document_source_match_test.cpp
@@ -302,6 +302,29 @@ TEST_F(DocumentSourceMatchTest, MultipleMatchStagesShouldCombineIntoOne) {
"{c:1}]}"));
}
+TEST_F(DocumentSourceMatchTest, ShouldPropagatePauses) {
+ auto match = DocumentSourceMatch::create(BSON("a" << 1), getExpCtx());
+ auto mock = DocumentSourceMock::create({DocumentSource::GetNextResult::makePauseExecution(),
+ Document{{"a", 1}},
+ DocumentSource::GetNextResult::makePauseExecution(),
+ Document{{"a", 2}},
+ Document{{"a", 2}},
+ DocumentSource::GetNextResult::makePauseExecution(),
+ Document{{"a", 1}}});
+ match->setSource(mock.get());
+
+ ASSERT_TRUE(match->getNext().isPaused());
+ ASSERT_TRUE(match->getNext().isAdvanced());
+ ASSERT_TRUE(match->getNext().isPaused());
+
+ // {a: 2} doesn't match, should go directly to the next pause.
+ ASSERT_TRUE(match->getNext().isPaused());
+ ASSERT_TRUE(match->getNext().isAdvanced());
+ ASSERT_TRUE(match->getNext().isEOF());
+ ASSERT_TRUE(match->getNext().isEOF());
+ ASSERT_TRUE(match->getNext().isEOF());
+}
+
TEST(ObjectForMatch, ShouldExtractTopLevelFieldIfDottedFieldNeeded) {
Document input(fromjson("{a: 1, b: {c: 1, d: 1}}"));
BSONObj expected = fromjson("{b: {c: 1, d: 1}}");