diff options
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.cpp | 80 |
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(); |