summaryrefslogtreecommitdiff
path: root/src/mongo/db/pipeline/aggregation_request_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mongo/db/pipeline/aggregation_request_test.cpp')
-rw-r--r--src/mongo/db/pipeline/aggregation_request_test.cpp54
1 files changed, 35 insertions, 19 deletions
diff --git a/src/mongo/db/pipeline/aggregation_request_test.cpp b/src/mongo/db/pipeline/aggregation_request_test.cpp
index e148cef9b25..ba036c71bf4 100644
--- a/src/mongo/db/pipeline/aggregation_request_test.cpp
+++ b/src/mongo/db/pipeline/aggregation_request_test.cpp
@@ -38,6 +38,8 @@
#include "mongo/db/pipeline/document.h"
#include "mongo/db/pipeline/document_value_test_util.h"
#include "mongo/db/pipeline/value.h"
+#include "mongo/db/query/query_request.h"
+#include "mongo/db/repl/read_concern_args.h"
#include "mongo/unittest/unittest.h"
#include "mongo/util/assert_util.h"
@@ -54,12 +56,12 @@ const Document kDefaultCursorOptionDocument{
TEST(AggregationRequestTest, ShouldParseAllKnownOptions) {
NamespaceString nss("a.collection");
const BSONObj inputBson = fromjson(
- "{pipeline: [{$match: {a: 'abc'}}], explain: true, allowDiskUse: true, fromRouter: true, "
+ "{pipeline: [{$match: {a: 'abc'}}], explain: false, allowDiskUse: true, fromRouter: true, "
"bypassDocumentValidation: true, collation: {locale: 'en_US'}, cursor: {batchSize: 10}, "
- "hint: {a: 1}, comment: 'agg_comment'}");
+ "hint: {a: 1}, maxTimeMS: 100, readConcern: {level: 'linearizable'}, "
+ "$queryOptions: {$readPreference: 'nearest'}, comment: 'agg_comment'}}");
auto request = unittest::assertGet(AggregationRequest::parseFromBSON(nss, inputBson));
- ASSERT_TRUE(request.getExplain());
- ASSERT(*request.getExplain() == ExplainOptions::Verbosity::kQueryPlanner);
+ ASSERT_FALSE(request.getExplain());
ASSERT_TRUE(request.shouldAllowDiskUse());
ASSERT_TRUE(request.isFromRouter());
ASSERT_TRUE(request.shouldBypassDocumentValidation());
@@ -69,6 +71,21 @@ TEST(AggregationRequestTest, ShouldParseAllKnownOptions) {
ASSERT_BSONOBJ_EQ(request.getCollation(),
BSON("locale"
<< "en_US"));
+ ASSERT_EQ(request.getMaxTimeMS(), 100u);
+ ASSERT_BSONOBJ_EQ(request.getReadConcern(),
+ BSON("level"
+ << "linearizable"));
+ ASSERT_BSONOBJ_EQ(request.getUnwrappedReadPref(),
+ BSON("$readPreference"
+ << "nearest"));
+}
+
+TEST(AggregationRequestTest, ShouldParseExplicitExplainTrue) {
+ NamespaceString nss("a.collection");
+ const BSONObj inputBson = fromjson("{pipeline: [], explain: true, cursor: {}}");
+ auto request = unittest::assertGet(AggregationRequest::parseFromBSON(nss, inputBson));
+ ASSERT_TRUE(request.getExplain());
+ ASSERT(*request.getExplain() == ExplainOptions::Verbosity::kQueryPlanner);
}
TEST(AggregationRequestTest, ShouldParseExplicitExplainFalseWithCursorOption) {
@@ -123,6 +140,9 @@ TEST(AggregationRequestTest, ShouldNotSerializeOptionalValuesIfEquivalentToDefau
request.setCollation(BSONObj());
request.setHint(BSONObj());
request.setComment("");
+ request.setMaxTimeMS(0u);
+ request.setUnwrappedReadPref(BSONObj());
+ request.setReadConcern(BSONObj());
auto expectedSerialization =
Document{{AggregationRequest::kCommandName, nss.coll()},
@@ -138,6 +158,7 @@ TEST(AggregationRequestTest, ShouldSerializeOptionalValuesIfSet) {
request.setFromRouter(true);
request.setBypassDocumentValidation(true);
request.setBatchSize(10);
+ request.setMaxTimeMS(10u);
const auto hintObj = BSON("a" << 1);
request.setHint(hintObj);
const auto comment = std::string("agg_comment");
@@ -145,6 +166,12 @@ TEST(AggregationRequestTest, ShouldSerializeOptionalValuesIfSet) {
const auto collationObj = BSON("locale"
<< "en_US");
request.setCollation(collationObj);
+ const auto readPrefObj = BSON("$readPreference"
+ << "nearest");
+ request.setUnwrappedReadPref(readPrefObj);
+ const auto readConcernObj = BSON("level"
+ << "linearizable");
+ request.setReadConcern(readConcernObj);
auto expectedSerialization =
Document{{AggregationRequest::kCommandName, nss.coll()},
@@ -156,7 +183,10 @@ TEST(AggregationRequestTest, ShouldSerializeOptionalValuesIfSet) {
{AggregationRequest::kCursorName,
Value(Document({{AggregationRequest::kBatchSizeName, 10}}))},
{AggregationRequest::kHintName, hintObj},
- {AggregationRequest::kCommentName, comment}};
+ {AggregationRequest::kCommentName, comment},
+ {repl::ReadConcernArgs::kReadConcernFieldName, readConcernObj},
+ {QueryRequest::kUnwrappedReadPrefField, readPrefObj},
+ {QueryRequest::cmdOptionMaxTimeMS, 10}};
ASSERT_DOCUMENT_EQ(request.serializeToCommandObj(), expectedSerialization);
}
@@ -352,19 +382,5 @@ TEST(AggregationRequestTest, ShouldIgnoreWriteConcernOption) {
ASSERT_OK(AggregationRequest::parseFromBSON(nss, inputBson).getStatus());
}
-TEST(AggregationRequestTest, ShouldIgnoreMaxTimeMsOption) {
- NamespaceString nss("a.collection");
- const BSONObj inputBson =
- fromjson("{pipeline: [{$match: {a: 'abc'}}], cursor: {}, maxTimeMS: 'invalid'}");
- ASSERT_OK(AggregationRequest::parseFromBSON(nss, inputBson).getStatus());
-}
-
-TEST(AggregationRequestTest, ShouldIgnoreReadConcernOption) {
- NamespaceString nss("a.collection");
- const BSONObj inputBson =
- fromjson("{pipeline: [{$match: {a: 'abc'}}], cursor: {}, readConcern: 'invalid'}");
- ASSERT_OK(AggregationRequest::parseFromBSON(nss, inputBson).getStatus());
-}
-
} // namespace
} // namespace mongo