summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/unpack_bucket_exec_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/unpack_bucket_exec_test.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/unpack_bucket_exec_test.cpp80
1 files changed, 63 insertions, 17 deletions
diff --git a/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/unpack_bucket_exec_test.cpp b/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/unpack_bucket_exec_test.cpp
index ae409de7e69..fcc63c7aaaa 100644
--- a/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/unpack_bucket_exec_test.cpp
+++ b/src/mongo/db/pipeline/document_source_internal_unpack_bucket_test/unpack_bucket_exec_test.cpp
@@ -560,30 +560,33 @@ TEST_F(InternalUnpackBucketExecTest, BucketUnpackerThrowsOnUndefinedMetadata) {
ASSERT_THROWS_CODE(unpack->getNext(), AssertionException, 5369600);
}
-TEST_F(InternalUnpackBucketExecTest, BucketUnpackerThrowsOnMissingMetadataWhenExpectedInBuckets) {
+TEST_F(InternalUnpackBucketExecTest, BucketUnpackerThrowsWhenMetadataIsPresentUnexpectedly) {
auto expCtx = getExpCtx();
auto spec =
BSON("$_internalUnpackBucket"
<< BSON("exclude" << BSONArray() << DocumentSourceInternalUnpackBucket::kTimeFieldName
- << kUserDefinedTimeName
- << DocumentSourceInternalUnpackBucket::kMetaFieldName
- << kUserDefinedMetaName));
+ << kUserDefinedTimeName));
auto unpack = DocumentSourceInternalUnpackBucket::createFromBson(spec.firstElement(), expCtx);
auto source =
- DocumentSourceMock::createForTest({"{data: {_id: {'1':1, "
- "'0':2, '2': 3}, time: {'1':1, '0': 2, '2': 3}}}"},
+ DocumentSourceMock::createForTest({"{meta: {'m1': 999, 'm2': 9999}, data: {_id: {'1':1, "
+ "'0':2, '2': 3}, time: {'1':1, '0': 2, '2': 3}}}",
+ "{meta: null, data: {_id: {'1':4, "
+ "'0':5, '2':6}, time: {'1':4, '0': 5, '2': 6}}}"},
expCtx);
unpack->setSource(source.get());
- ASSERT_THROWS_CODE(unpack->getNext(), AssertionException, 5369600);
+
+ ASSERT_THROWS_CODE(unpack->getNext(), AssertionException, 5369601);
}
-TEST_F(InternalUnpackBucketExecTest, BucketUnpackerThrowsWhenMetadataIsPresentUnexpectedly) {
+TEST_F(InternalUnpackBucketExecTest, BucketUnpackerHandlesNullMetadata) {
auto expCtx = getExpCtx();
auto spec =
BSON("$_internalUnpackBucket"
<< BSON("exclude" << BSONArray() << DocumentSourceInternalUnpackBucket::kTimeFieldName
- << kUserDefinedTimeName));
+ << kUserDefinedTimeName
+ << DocumentSourceInternalUnpackBucket::kMetaFieldName
+ << kUserDefinedMetaName));
auto unpack = DocumentSourceInternalUnpackBucket::createFromBson(spec.firstElement(), expCtx);
auto source =
@@ -594,10 +597,39 @@ TEST_F(InternalUnpackBucketExecTest, BucketUnpackerThrowsWhenMetadataIsPresentUn
expCtx);
unpack->setSource(source.get());
- ASSERT_THROWS_CODE(unpack->getNext(), AssertionException, 5369601);
+ auto next = unpack->getNext();
+ ASSERT_TRUE(next.isAdvanced());
+ ASSERT_DOCUMENT_EQ(next.getDocument(),
+ Document(fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1}")));
+
+ next = unpack->getNext();
+ ASSERT_TRUE(next.isAdvanced());
+ ASSERT_DOCUMENT_EQ(next.getDocument(),
+ Document(fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2}")));
+
+ next = unpack->getNext();
+ ASSERT_TRUE(next.isAdvanced());
+ ASSERT_DOCUMENT_EQ(next.getDocument(),
+ Document(fromjson("{time: 3, myMeta: {m1: 999, m2: 9999}, _id: 3}")));
+
+ // Second bucket
+ next = unpack->getNext();
+ ASSERT_TRUE(next.isAdvanced());
+ ASSERT_DOCUMENT_EQ(next.getDocument(), Document(fromjson("{time: 4, myMeta: null, _id: 4}")));
+
+ next = unpack->getNext();
+ ASSERT_TRUE(next.isAdvanced());
+ ASSERT_DOCUMENT_EQ(next.getDocument(), Document(fromjson("{time: 5, myMeta: null, _id: 5}")));
+
+ next = unpack->getNext();
+ ASSERT_TRUE(next.isAdvanced());
+ ASSERT_DOCUMENT_EQ(next.getDocument(), Document(fromjson("{time: 6, myMeta: null, _id: 6}")));
+
+ next = unpack->getNext();
+ ASSERT_TRUE(next.isEOF());
}
-TEST_F(InternalUnpackBucketExecTest, BucketUnpackerHandlesNullMetadata) {
+TEST_F(InternalUnpackBucketExecTest, BucketUnpackerHandlesMissingMetadata) {
auto expCtx = getExpCtx();
auto spec =
BSON("$_internalUnpackBucket"
@@ -607,12 +639,26 @@ TEST_F(InternalUnpackBucketExecTest, BucketUnpackerHandlesNullMetadata) {
<< kUserDefinedMetaName));
auto unpack = DocumentSourceInternalUnpackBucket::createFromBson(spec.firstElement(), expCtx);
- auto source =
- DocumentSourceMock::createForTest({"{meta: {'m1': 999, 'm2': 9999}, data: {_id: {'1':1, "
- "'0':2, '2': 3}, time: {'1':1, '0': 2, '2': 3}}}",
- "{meta: null, data: {_id: {'1':4, "
- "'0':5, '2':6}, time: {'1':4, '0': 5, '2': 6}}}"},
- expCtx);
+ auto source = DocumentSourceMock::createForTest(
+ {
+ R"(
+{
+ meta: {
+ 'm1': 999, 'm2': 9999
+ },
+ data: {
+ _id: {'1':1, '0':2, '2': 3},
+ time: {'1':1, '0': 2, '2': 3}
+ }
+})",
+ R"(
+{
+ data: {
+ _id: {'1':4, '0':5, '2':6},
+ time: {'1':4, '0': 5, '2': 6}
+ }
+})"},
+ expCtx);
unpack->setSource(source.get());
auto next = unpack->getNext();