diff options
Diffstat (limited to 'src/mongo/db/query/projection_ast_test.cpp')
| -rw-r--r-- | src/mongo/db/query/projection_ast_test.cpp | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/src/mongo/db/query/projection_ast_test.cpp b/src/mongo/db/query/projection_ast_test.cpp index 619bd9a1dde..ea1eb2b683d 100644 --- a/src/mongo/db/query/projection_ast_test.cpp +++ b/src/mongo/db/query/projection_ast_test.cpp @@ -41,6 +41,7 @@ #include "mongo/db/query/projection_ast_util.h" #include "mongo/db/query/projection_parser.h" #include "mongo/db/query/query_planner_test_fixture.h" +#include "mongo/db/query/query_shape/serialization_options.h" namespace { @@ -772,4 +773,62 @@ TEST_F(ProjectionASTTest, ShouldThrowWithPositionalOnExclusion) { DBException, 31395); } + +TEST_F(ProjectionASTTest, TestASTRedaction) { + SerializationOptions options = SerializationOptions::kDebugShapeAndMarkIdentifiers_FOR_TEST; + + auto proj = fromjson("{'a.b': 1}"); + BSONObj output = projection_ast::serialize(*parseWithFindFeaturesEnabled(proj).root(), options); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"HASH<a>":{"HASH<b>":true},"HASH<_id>":true})", + output); + + proj = fromjson("{'a.b': 0}"); + output = projection_ast::serialize(*parseWithFindFeaturesEnabled(proj).root(), options); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"HASH<a>":{"HASH<b>":false}})", + output); + + proj = fromjson("{a: 1, b: 1}"); + output = projection_ast::serialize(*parseWithFindFeaturesEnabled(proj).root(), options); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"HASH<a>":true,"HASH<b>":true,"HASH<_id>":true})", + output); + + // ElemMatch projection + proj = fromjson("{f: {$elemMatch: {foo: 'bar'}}}"); + output = projection_ast::serialize(*parseWithFindFeaturesEnabled(proj).root(), options); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"HASH<f>":{"$elemMatch":{"HASH<foo>":{"$eq":"?string"}}},"HASH<_id>":true})", + output); + + // Positional projection + proj = fromjson("{'x.$': 1}"); + output = projection_ast::serialize( + *parseWithFindFeaturesEnabled(proj, fromjson("{'x.a': 2}")).root(), {}); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"x.$":true,"_id":true})", + output); + + // Slice (first form) + proj = fromjson("{a: {$slice: 1}}"); + output = projection_ast::serialize(*parseWithFindFeaturesEnabled(proj).root(), options); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"HASH<a>":{"$slice":"?number"}})", + output); + + // Slice (second form) + proj = fromjson("{a: {$slice: [1, 3]}}"); + output = projection_ast::serialize(*parseWithFindFeaturesEnabled(proj).root(), options); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"HASH<a>":{"$slice":["?number","?number"]}})", + output); + + /// $meta projection + proj = fromjson("{foo: {$meta: 'indexKey'}}"); + output = projection_ast::serialize(*parseWithFindFeaturesEnabled(proj).root(), options); + ASSERT_BSONOBJ_EQ_AUTO( // + R"({"HASH<foo>":{"$meta":"indexKey"}})", + output); +} } // namespace |
