diff options
| author | Lucas de Castro Borges <lucas@gnuabordo.com.br> | 2025-02-18 17:02:53 -0300 |
|---|---|---|
| committer | Lucas de Castro Borges <lucas@gnuabordo.com.br> | 2025-02-18 17:02:53 -0300 |
| commit | 959575a5ca598bf5f37fb5cebe7ed1d80d3d71f7 (patch) | |
| tree | acc8d60aedb12b70048e676e8a7349deb0010db8 /src/mongo/db/exec/bucket_unpacker_test.cpp | |
| parent | 76588293975fc059cf076779e4283e6ffaf8afff (diff) | |
New upstream version 6.0.20upstream
Diffstat (limited to 'src/mongo/db/exec/bucket_unpacker_test.cpp')
| -rw-r--r-- | src/mongo/db/exec/bucket_unpacker_test.cpp | 238 |
1 files changed, 163 insertions, 75 deletions
diff --git a/src/mongo/db/exec/bucket_unpacker_test.cpp b/src/mongo/db/exec/bucket_unpacker_test.cpp index 9eecea624c5..4a638467bea 100644 --- a/src/mongo/db/exec/bucket_unpacker_test.cpp +++ b/src/mongo/db/exec/bucket_unpacker_test.cpp @@ -170,6 +170,11 @@ public: } return root.obj(); } + + bool computedMetaProjFieldsContainsField(std::set<std::string>& computedMetaProjFields, + std::string field) { + return computedMetaProjFields.find(field) != computedMetaProjFields.end(); + } }; TEST_F(BucketUnpackerTest, UnpackBasicIncludeAllMeasurementFields) { @@ -178,7 +183,7 @@ TEST_F(BucketUnpackerTest, UnpackBasicIncludeAllMeasurementFields) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto unpacker = makeBucketUnpacker(std::move(fields), @@ -188,11 +193,12 @@ TEST_F(BucketUnpackerTest, UnpackBasicIncludeAllMeasurementFields) { ASSERT_TRUE(unpacker.hasNext()); assertGetNext(unpacker, - Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); + Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, - Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}); + assertGetNext( + unpacker, + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}); ASSERT_FALSE(unpacker.hasNext()); } @@ -201,7 +207,7 @@ TEST_F(BucketUnpackerTest, ExcludeASingleField) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto test = [&](BSONObj bucket) { @@ -211,12 +217,14 @@ TEST_F(BucketUnpackerTest, ExcludeASingleField) { kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, - Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); + assertGetNext( + unpacker, + Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, - Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, a: 2}")}); + assertGetNext( + unpacker, + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, a: 2}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -229,7 +237,7 @@ TEST_F(BucketUnpackerTest, EmptyIncludeGetsEmptyMeasurements) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto test = [&](BSONObj bucket) { @@ -255,7 +263,7 @@ TEST_F(BucketUnpackerTest, EmptyExcludeMaterializesAllFields) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto test = [&](BSONObj bucket) { @@ -264,13 +272,14 @@ TEST_F(BucketUnpackerTest, EmptyExcludeMaterializesAllFields) { std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, - Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); + assertGetNext( + unpacker, + Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); ASSERT_TRUE(unpacker.hasNext()); assertGetNext( unpacker, - Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}); + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -283,7 +292,7 @@ TEST_F(BucketUnpackerTest, SparseColumnsWhereOneColumnIsExhaustedBeforeTheOther) auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1}, b:{'1':1}}}"); auto test = [&](BSONObj bucket) { @@ -292,11 +301,13 @@ TEST_F(BucketUnpackerTest, SparseColumnsWhereOneColumnIsExhaustedBeforeTheOther) std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, - Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); + assertGetNext( + unpacker, + Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, - Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, b: 1}")}); + assertGetNext( + unpacker, + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, b: 1}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -310,7 +321,7 @@ TEST_F(BucketUnpackerTest, UnpackBasicIncludeWithDollarPrefix) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "$a:{'0':1, '1':2}, b:{'1':1}}}"); auto test = [&](BSONObj bucket) { @@ -319,13 +330,14 @@ TEST_F(BucketUnpackerTest, UnpackBasicIncludeWithDollarPrefix) { std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, - Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, $a: 1}")}); - - ASSERT_TRUE(unpacker.hasNext()); assertGetNext( unpacker, - Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, $a: 2, b: 1}")}); + Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, $a: 1}")}); + + ASSERT_TRUE(unpacker.hasNext()); + assertGetNext(unpacker, + Document{fromjson( + "{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, $a: 2, b: 1}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -338,7 +350,7 @@ TEST_F(BucketUnpackerTest, BucketsWithMetadataOnly) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}}}"); + "time: {'0':Date(1), '1':Date(2)}}}"); auto test = [&](BSONObj bucket) { auto unpacker = makeBucketUnpacker(fields, @@ -347,10 +359,10 @@ TEST_F(BucketUnpackerTest, BucketsWithMetadataOnly) { kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); assertGetNext(unpacker, - Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1}")}); + Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1}")}); ASSERT_TRUE(unpacker.hasNext()); assertGetNext(unpacker, - Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2}")}); + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -363,8 +375,8 @@ TEST_F(BucketUnpackerTest, UnorderedRowKeysDoesntAffectMaterialization) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'1':1, '0':2, '2': " - "3}, time: {'1':1, '0': 2, " - "'2': 3}}}"); + "3}, time: {'1':Date(1), '0': Date(2), " + "'2': Date(3)}}}"); auto test = [&](BSONObj bucket) { auto unpacker = makeBucketUnpacker(fields, @@ -373,15 +385,15 @@ TEST_F(BucketUnpackerTest, UnorderedRowKeysDoesntAffectMaterialization) { kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); assertGetNext(unpacker, - Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1}")}); + Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1}")}); ASSERT_TRUE(unpacker.hasNext()); assertGetNext(unpacker, - Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2}")}); + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2}")}); ASSERT_TRUE(unpacker.hasNext()); assertGetNext(unpacker, - Document{fromjson("{time: 3, myMeta: {m1: 999, m2: 9999}, _id: 3}")}); + Document{fromjson("{time: Date(3), myMeta: {m1: 999, m2: 9999}, _id: 3}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -393,8 +405,9 @@ TEST_F(BucketUnpackerTest, MissingMetaFieldDoesntMaterializeMetadata) { std::set<std::string> fields{}; auto bucket = fromjson( - "{control: {'version': 1}, data: {_id: {'0':1, '1':2, '2': 3}, time: {'0':1, '1': 2, '2': " - "3}}}"); + "{control: {'version': 1}, data: {_id: {'0':1, '1':2, '2': 3}, time: {'0':Date(1), '1': " + "Date(2), '2': " + "Date(3)}}}"); auto test = [&](BSONObj bucket) { auto unpacker = makeBucketUnpacker(fields, @@ -402,13 +415,13 @@ TEST_F(BucketUnpackerTest, MissingMetaFieldDoesntMaterializeMetadata) { std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 1, _id: 1}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(1), _id: 1}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 2, _id: 2}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(2), _id: 2}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 3, _id: 3}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(3), _id: 3}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -420,8 +433,9 @@ TEST_F(BucketUnpackerTest, MissingMetaFieldDoesntMaterializeMetadataUnorderedKey std::set<std::string> fields{}; auto bucket = fromjson( - "{control: {'version': 1}, data: {_id: {'1':1, '0':2, '2': 3}, time: {'1':1, '0': 2, '2': " - "3}}}"); + "{control: {'version': 1}, data: {_id: {'1':1, '0':2, '2': 3}, time: {'1':Date(1), '0': " + "Date(2), '2': " + "Date(3)}}}"); auto test = [&](BSONObj bucket) { auto unpacker = makeBucketUnpacker(fields, @@ -429,13 +443,13 @@ TEST_F(BucketUnpackerTest, MissingMetaFieldDoesntMaterializeMetadataUnorderedKey std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 1, _id: 1}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(1), _id: 1}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 2, _id: 2}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(2), _id: 2}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 3, _id: 3}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(3), _id: 3}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -448,8 +462,8 @@ TEST_F(BucketUnpackerTest, ExcludedMetaFieldDoesntMaterializeMetadataWhenBucketH auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2, '2': " - "3}, time: {'0':1, '1': 2, " - "'2': 3}}}"); + "3}, time: {'0':Date(1), '1': Date(2), " + "'2': Date(3)}}}"); auto test = [&](BSONObj bucket) { auto unpacker = makeBucketUnpacker(fields, @@ -457,13 +471,13 @@ TEST_F(BucketUnpackerTest, ExcludedMetaFieldDoesntMaterializeMetadataWhenBucketH std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 1, _id: 1}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(1), _id: 1}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 2, _id: 2}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(2), _id: 2}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 3, _id: 3}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(3), _id: 3}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -476,7 +490,7 @@ TEST_F(BucketUnpackerTest, UnpackerResetThrowsOnUndefinedMeta) { auto bucket = fromjson( "{control: {'version': 1}, meta: undefined, data: {_id: {'0':1, '1':2, '2': 3}, time: " - "{'0':1, '1': 2, '2': 3}}}"); + "{'0':Date(1), '1': Date(2), '2': Date(3)}}}"); auto test = [&](BSONObj bucket) { assertUnpackerThrowsCode(fields, @@ -495,8 +509,8 @@ TEST_F(BucketUnpackerTest, UnpackerResetThrowsOnUnexpectedMeta) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2, '2': " - "3}, time: {'0':1, '1': 2, " - "'2': 3}}}"); + "3}, time: {'0':Date(1), '1': Date(2), " + "'2': Date(3)}}}"); auto test = [&](BSONObj bucket) { assertUnpackerThrowsCode(fields, @@ -514,8 +528,9 @@ TEST_F(BucketUnpackerTest, NullMetaInBucketMaterializesAsNull) { std::set<std::string> fields{}; auto bucket = fromjson( - "{control: {'version': 1}, meta: null, data: {_id: {'0':4, '1':5, '2':6}, time: {'0':4, " - "'1': 5, '2': 6}}}"); + "{control: {'version': 1}, meta: null, data: {_id: {'0':4, '1':5, '2':6}, time: " + "{'0':Date(4), " + "'1': Date(5), '2': Date(6)}}}"); auto test = [&](BSONObj bucket) { auto unpacker = makeBucketUnpacker(fields, @@ -523,13 +538,13 @@ TEST_F(BucketUnpackerTest, NullMetaInBucketMaterializesAsNull) { std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 4, myMeta: null, _id: 4}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(4), myMeta: null, _id: 4}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 5, myMeta: null, _id: 5}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(5), myMeta: null, _id: 5}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 6, myMeta: null, _id: 6}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(6), myMeta: null, _id: 6}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -545,7 +560,7 @@ TEST_F(BucketUnpackerTest, GetNextHandlesMissingMetaInBucket) { control: {version: 1}, data: { _id: {'0':4, '1':5, '2':6}, - time: {'0':4, '1': 5, '2': 6} + time: {'0':Date(4), '1': Date(5), '2': Date(6)} } })"); @@ -555,13 +570,13 @@ TEST_F(BucketUnpackerTest, GetNextHandlesMissingMetaInBucket) { std::move(bucket), kUserDefinedMetaName.toString()); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 4, _id: 4}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(4), _id: 4}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 5, _id: 5}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(5), _id: 5}")}); ASSERT_TRUE(unpacker.hasNext()); - assertGetNext(unpacker, Document{fromjson("{time: 6, _id: 6}")}); + assertGetNext(unpacker, Document{fromjson("{time: Date(6), _id: 6}")}); ASSERT_FALSE(unpacker.hasNext()); }; @@ -606,7 +621,7 @@ TEST_F(BucketUnpackerTest, EraseMetaFromFieldSetAndDetermineIncludeMeta) { control: {version: 1}, data: { _id: {'0':4, '1':5, '2':6}, - time: {'0':4, '1': 5, '2': 6} + time: {'0':Date(4), '1': Date(5), '2': Date(6)} } })"); auto unpacker = makeBucketUnpacker(empFields, @@ -659,13 +674,83 @@ TEST_F(BucketUnpackerTest, EraseMetaFromFieldSetAndDetermineIncludeMeta) { ASSERT_FALSE(unpacker.includeMetaField()); } +TEST_F(BucketUnpackerTest, EraseUnneededComputedMetaProjFieldsWithInclusiveProject) { + auto bucket = fromjson(R"( +{ + control: {version: 1}, + data: { + _id: {'0':4, '1':5, '2':6}, + time: {'0':Date(4), '1': Date(5), '2': Date(6)} + } +})"); + std::set<std::string> unpackerFields{kUserDefinedTimeName.toString()}; + auto unpacker = makeBucketUnpacker(unpackerFields, + BucketSpec::Behavior::kInclude, + std::move(bucket), + kUserDefinedMetaName.toString()); + + // Add fields to '_computedMetaProjFields'. + unpacker.addComputedMetaProjFields({"hello"_sd, "bye"_sd}); + auto computedMetaProjFields = unpacker.bucketSpec().computedMetaProjFields(); + ASSERT_TRUE(computedMetaProjFieldsContainsField(computedMetaProjFields, "hello")); + ASSERT_TRUE(computedMetaProjFieldsContainsField(computedMetaProjFields, "bye")); + + auto spec = unpacker.bucketSpec(); + std::set<std::string> includeFields{kUserDefinedTimeName.toString(), "bye"}; + spec.setFieldSet(includeFields); + spec.setBehavior(BucketSpec::Behavior::kInclude); + + // This calls eraseUnneededComputedMetaProjFields(). + unpacker.setBucketSpec(std::move(spec)); + computedMetaProjFields = unpacker.bucketSpec().computedMetaProjFields(); + // As "hello" was not in the includes, it should be removed. + ASSERT_FALSE(computedMetaProjFieldsContainsField(computedMetaProjFields, "hello")); + // As "bye" was in the includes, it should still be in '_computedMetaProjFields'. + ASSERT_TRUE(computedMetaProjFieldsContainsField(computedMetaProjFields, "bye")); +} + +TEST_F(BucketUnpackerTest, EraseUnneededComputedMetaProjFieldsWithExclusiveProject) { + auto bucket = fromjson(R"( +{ + control: {version: 1}, + data: { + _id: {'0':4, '1':5, '2':6}, + time: {'0':Date(4), '1': Date(5), '2': Date(6)} + } +})"); + std::set<std::string> unpackerFields{kUserDefinedTimeName.toString()}; + auto unpacker = makeBucketUnpacker(unpackerFields, + BucketSpec::Behavior::kInclude, + std::move(bucket), + kUserDefinedMetaName.toString()); + + // Add fields to '_computedMetaProjFields'. + unpacker.addComputedMetaProjFields({"hello"_sd, "bye"_sd}); + auto computedMetaProjFields = unpacker.bucketSpec().computedMetaProjFields(); + ASSERT_TRUE(computedMetaProjFieldsContainsField(computedMetaProjFields, "hello")); + ASSERT_TRUE(computedMetaProjFieldsContainsField(computedMetaProjFields, "bye")); + + auto spec = unpacker.bucketSpec(); + std::set<std::string> excludeFields{kUserDefinedTimeName.toString(), "bye"}; + spec.setFieldSet(excludeFields); + spec.setBehavior(BucketSpec::Behavior::kExclude); + + // This calls eraseUnneededComputedMetaProjFields(). + unpacker.setBucketSpec(std::move(spec)); + computedMetaProjFields = unpacker.bucketSpec().computedMetaProjFields(); + // As "hello" was not excluded, it should still exist. + ASSERT_TRUE(computedMetaProjFieldsContainsField(computedMetaProjFields, "hello")); + // As "bye" was in the excludes, it should be removed from '_computedMetaProjFields'. + ASSERT_FALSE(computedMetaProjFieldsContainsField(computedMetaProjFields, "bye")); +} + TEST_F(BucketUnpackerTest, DetermineIncludeTimeField) { auto bucket = fromjson(R"( { control: {version: 1}, data: { _id: {'0':4, '1':5, '2':6}, - time: {'0':4, '1': 5, '2': 6} + time: {'0':Date(4), '1': Date(5), '2': Date(6)} } })"); std::set<std::string> unpackerFields{kUserDefinedTimeName.toString()}; @@ -900,7 +985,7 @@ TEST_F(BucketUnpackerTest, TamperedCompressedCountLess) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto compressedBucket = @@ -913,8 +998,9 @@ TEST_F(BucketUnpackerTest, TamperedCompressedCountLess) { std::move(modifiedCompressedBucket), kUserDefinedMetaName.toString()); - auto doc0 = Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; - auto doc1 = Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}; + auto doc0 = Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; + auto doc1 = + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}; // 1 is reported when asking for numberOfMeasurements() ASSERT_EQ(unpacker.numberOfMeasurements(), 1); @@ -935,7 +1021,7 @@ TEST_F(BucketUnpackerTest, TamperedCompressedCountMore) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto compressedBucket = @@ -948,8 +1034,9 @@ TEST_F(BucketUnpackerTest, TamperedCompressedCountMore) { std::move(modifiedCompressedBucket), kUserDefinedMetaName.toString()); - auto doc0 = Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; - auto doc1 = Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}; + auto doc0 = Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; + auto doc1 = + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}; ASSERT_EQ(unpacker.numberOfMeasurements(), 3); ASSERT_DOCUMENT_EQ(unpacker.extractSingleMeasurement(0), doc0); @@ -970,7 +1057,7 @@ TEST_F(BucketUnpackerTest, TamperedCompressedCountMissing) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto compressedBucket = @@ -983,8 +1070,9 @@ TEST_F(BucketUnpackerTest, TamperedCompressedCountMissing) { std::move(modifiedCompressedBucket), kUserDefinedMetaName.toString()); - auto doc0 = Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; - auto doc1 = Document{fromjson("{time: 2, myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}; + auto doc0 = Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; + auto doc1 = + Document{fromjson("{time: Date(2), myMeta: {m1: 999, m2: 9999}, _id: 2, a :2, b: 1}")}; // Missing count field will make the unpacker measure the number of time fields for an accurate // count @@ -1006,7 +1094,7 @@ TEST_F(BucketUnpackerTest, TamperedCompressedElementMismatchDataField) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto compressedBucket = @@ -1020,7 +1108,7 @@ TEST_F(BucketUnpackerTest, TamperedCompressedElementMismatchDataField) { std::move(modifiedCompressedBucket), kUserDefinedMetaName.toString()); - auto doc0 = Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; + auto doc0 = Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; ASSERT_EQ(unpacker.numberOfMeasurements(), 2); ASSERT_DOCUMENT_EQ(unpacker.extractSingleMeasurement(0), doc0); @@ -1041,7 +1129,7 @@ TEST_F(BucketUnpackerTest, TamperedCompressedElementMismatchTimeField) { auto bucket = fromjson( "{control: {'version': 1}, meta: {'m1': 999, 'm2': 9999}, data: {_id: {'0':1, '1':2}, " - "time: {'0':1, '1':2}, " + "time: {'0':Date(1), '1':Date(2)}, " "a:{'0':1, '1':2}, b:{'1':1}}}"); auto compressedBucket = @@ -1055,7 +1143,7 @@ TEST_F(BucketUnpackerTest, TamperedCompressedElementMismatchTimeField) { std::move(modifiedCompressedBucket), kUserDefinedMetaName.toString()); - auto doc0 = Document{fromjson("{time: 1, myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; + auto doc0 = Document{fromjson("{time: Date(1), myMeta: {m1: 999, m2: 9999}, _id: 1, a: 1}")}; ASSERT_EQ(unpacker.numberOfMeasurements(), 2); ASSERT_DOCUMENT_EQ(unpacker.extractSingleMeasurement(0), doc0); |
