From fc5bc0947ceedee3b61b2d922cabd3e5df7ec07c Mon Sep 17 00:00:00 2001 From: Bernard Gorman Date: Sat, 24 Nov 2018 16:56:20 +0000 Subject: SERVER-38408 Return postBatchResumeToken with each mongoD change stream batch --- src/mongo/db/query/cursor_response_test.cpp | 30 +++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) (limited to 'src/mongo/db/query/cursor_response_test.cpp') diff --git a/src/mongo/db/query/cursor_response_test.cpp b/src/mongo/db/query/cursor_response_test.cpp index 2ae05e88a7d..e1adef1fbd7 100644 --- a/src/mongo/db/query/cursor_response_test.cpp +++ b/src/mongo/db/query/cursor_response_test.cpp @@ -34,6 +34,7 @@ #include "mongo/rpc/op_msg_rpc_impls.h" +#include "mongo/db/pipeline/resume_token.h" #include "mongo/unittest/unittest.h" namespace mongo { @@ -334,6 +335,35 @@ TEST(CursorResponseTest, serializeLatestOplogEntry) { ASSERT_EQ(*reparsedResponse.getLastOplogTimestamp(), Timestamp(1, 2)); } +TEST(CursorResponseTest, serializePostBatchResumeToken) { + std::vector batch = {BSON("_id" << 1), BSON("_id" << 2)}; + auto postBatchResumeToken = + ResumeToken::makeHighWaterMarkResumeToken(Timestamp(1, 2)).toDocument().toBson(); + CursorResponse response(NamespaceString("db.coll"), + CursorId(123), + batch, + boost::none, + boost::none, + postBatchResumeToken); + auto serialized = response.toBSON(CursorResponse::ResponseType::SubsequentResponse); + ASSERT_BSONOBJ_EQ(serialized, + BSON("cursor" << BSON("id" << CursorId(123) << "ns" + << "db.coll" + << "nextBatch" + << BSON_ARRAY(BSON("_id" << 1) << BSON("_id" << 2)) + << "postBatchResumeToken" + << postBatchResumeToken) + << "ok" + << 1)); + auto reparsed = CursorResponse::parseFromBSON(serialized); + ASSERT_OK(reparsed.getStatus()); + CursorResponse reparsedResponse = std::move(reparsed.getValue()); + ASSERT_EQ(reparsedResponse.getCursorId(), CursorId(123)); + ASSERT_EQ(reparsedResponse.getNSS().ns(), "db.coll"); + ASSERT_EQ(reparsedResponse.getBatch().size(), 2U); + ASSERT_BSONOBJ_EQ(*reparsedResponse.getPostBatchResumeToken(), postBatchResumeToken); +} + TEST(CursorResponseTest, cursorReturnDocumentSequences) { CursorResponseBuilder::Options options; options.isInitialResponse = true; -- cgit v1.2.1