summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/document_source_group_test.cpp
diff options
context:
space:
mode:
authorLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
committerLucas de Castro Borges <lucas@gnuabordo.com.br>2025-02-18 17:02:53 -0300
commit959575a5ca598bf5f37fb5cebe7ed1d80d3d71f7 (patch)
treeacc8d60aedb12b70048e676e8a7349deb0010db8 /src/mongo/db/pipeline/document_source_group_test.cpp
parent76588293975fc059cf076779e4283e6ffaf8afff (diff)
New upstream version 6.0.20upstream
Diffstat (limited to 'src/mongo/db/pipeline/document_source_group_test.cpp')
-rw-r--r--src/mongo/db/pipeline/document_source_group_test.cpp97
1 files changed, 97 insertions, 0 deletions
diff --git a/src/mongo/db/pipeline/document_source_group_test.cpp b/src/mongo/db/pipeline/document_source_group_test.cpp
index 9a621cffdcd..f3bb0863adf 100644
--- a/src/mongo/db/pipeline/document_source_group_test.cpp
+++ b/src/mongo/db/pipeline/document_source_group_test.cpp
@@ -246,6 +246,103 @@ TEST_F(DocumentSourceGroupTest, ShouldNotReportDottedGroupKeyAsARename) {
ASSERT_EQ(modifiedPathsRet.renames.size(), 0UL);
}
+TEST_F(DocumentSourceGroupTest, GroupRedactsCorrectWithIdNull) {
+ auto spec = fromjson(R"({
+ $group: {
+ _id: null,
+ foo: { $count: {} }
+ }
+ })");
+ auto docSource = DocumentSourceGroup::createFromBson(spec.firstElement(), getExpCtx());
+ ASSERT_BSONOBJ_EQ_AUTO( // NOLINT
+ R"({"$group":{"_id":"?null","HASH<foo>":{"$sum":"?number"}}})",
+ redact(*docSource));
+}
+
+TEST_F(DocumentSourceGroupTest, GroupRedactsCorrectWithIdSingleField) {
+ auto spec = fromjson(R"({
+ $group: {
+ _id: '$foo'
+ }
+ })");
+ auto docSource = DocumentSourceGroup::createFromBson(spec.firstElement(), getExpCtx());
+ ASSERT_BSONOBJ_EQ_AUTO( // NOLINT
+ R"({
+ "$group": {
+ "_id": "$HASH<foo>"
+ }
+ })",
+ redact(*docSource));
+}
+
+TEST_F(DocumentSourceGroupTest, GroupRedactsCorrectWithIdDocument) {
+ auto spec = fromjson(R"({
+ $group: {
+ _id: {
+ x: '$x',
+ y: '$z'
+ },
+ foo: {
+ $sum: {
+ $multiply: ['$a.b', '$c', '$d']
+ }
+ },
+ bar: {
+ $first: '$baz'
+ }
+ }
+ })");
+ auto docSource = DocumentSourceGroup::createFromBson(spec.firstElement(), getExpCtx());
+ ASSERT_BSONOBJ_EQ_AUTO( // NOLINT
+ R"({
+ "$group": {
+ "_id": {
+ "HASH<x>": "$HASH<x>",
+ "HASH<y>": "$HASH<z>"
+ },
+ "HASH<foo>": {
+ "$sum": {
+ "$multiply": ["$HASH<a>.HASH<b>", "$HASH<c>", "$HASH<d>"]
+ }
+ },
+ "HASH<bar>": {
+ "$first": "$HASH<baz>"
+ }
+ }
+ })",
+ redact(*docSource));
+}
+
+TEST_F(DocumentSourceGroupTest, StreamingGroupRedactsCorrectly) {
+ auto spec = fromjson(R"({
+ $_internalStreamingGroup: {
+ _id: {
+ a: "$a",
+ b: "$b"
+ },
+ a: {
+ $first: '$b'
+ },
+ $monotonicIdFields: [ "a", "b" ]
+ }
+ })");
+ auto docSource = DocumentSourceStreamingGroup::createFromBson(spec.firstElement(), getExpCtx());
+ ASSERT_BSONOBJ_EQ_AUTO( // NOLINT
+ R"({
+ "$_internalStreamingGroup": {
+ "_id": {
+ "HASH<a>": "$HASH<a>",
+ "HASH<b>": "$HASH<b>"
+ },
+ "HASH<a>": {
+ "$first": "$HASH<b>"
+ },
+ "$monotonicIdFields": [ "HASH<a>", "HASH<b>" ]
+ }
+ })",
+ redact(*docSource));
+}
+
BSONObj toBson(const intrusive_ptr<DocumentSource>& source) {
vector<Value> arr;
source->serializeToArray(arr);