summaryrefslogtreecommitdiff
path: root/src/mongo/rpc
diff options
context:
space:
mode:
authorSpencer Jackson <spencer.jackson@mongodb.com>2018-08-22 15:26:28 -0400
committerSpencer Jackson <spencer.jackson@mongodb.com>2018-09-17 17:21:41 -0400
commit11892a26868b452a161b143bb93a04d2ac3b6748 (patch)
tree037fe2757ed1bea8ecd203280808eb22c1536128 /src/mongo/rpc
parente78dc4e8cf32da88062090410ab8617f604633c9 (diff)
downloadmongo-11892a26868b452a161b143bb93a04d2ac3b6748.tar.gz
SERVER-36606: Add large OP_MSG audit integration testing
Diffstat (limited to 'src/mongo/rpc')
-rw-r--r--src/mongo/rpc/op_msg_integration_test.cpp71
1 files changed, 71 insertions, 0 deletions
diff --git a/src/mongo/rpc/op_msg_integration_test.cpp b/src/mongo/rpc/op_msg_integration_test.cpp
index 4486c342e1d..20c3c38b1db 100644
--- a/src/mongo/rpc/op_msg_integration_test.cpp
+++ b/src/mongo/rpc/op_msg_integration_test.cpp
@@ -29,6 +29,7 @@
#include "mongo/platform/basic.h"
#include "mongo/client/dbclient_connection.h"
+#include "mongo/db/ops/write_ops.h"
#include "mongo/db/query/getmore_request.h"
#include "mongo/rpc/get_status_from_command_result.h"
#include "mongo/rpc/op_msg.h"
@@ -85,6 +86,76 @@ TEST(OpMsg, FireAndForgetInsertWorks) {
ASSERT_EQ(conn->count("test.collection"), 1u);
}
+TEST(OpMsg, DocumentSequenceLargeDocumentMultiInsertWorks) {
+ std::string errMsg;
+ auto conn = std::unique_ptr<DBClientBase>(
+ unittest::getFixtureConnectionString().connect("integration_test", errMsg));
+ uassert(ErrorCodes::SocketException, errMsg, conn);
+
+ conn->dropCollection("test.collection");
+
+ OpMsgBuilder msgBuilder;
+
+ OpMsgBuilder::DocSequenceBuilder sequenceBuilder = msgBuilder.beginDocSequence("documents");
+ for (size_t docID = 0; docID < 3; docID++) {
+ BSONObjBuilder docBuilder = sequenceBuilder.appendBuilder();
+ docBuilder.appendNumber("_id", docID);
+ std::string data(15000000, 'a');
+ docBuilder.append("data", std::move(data));
+ }
+ sequenceBuilder.done();
+
+
+ msgBuilder.setBody(fromjson(R"({
+ insert: "collection",
+ writeConcern: {w: 0},
+ $db: "test"
+ })"));
+
+ Message request = msgBuilder.finish();
+ Message reply;
+ ASSERT_TRUE(conn->call(request, reply, false));
+
+ ASSERT_EQ(conn->count("test.collection"), 3u);
+ conn->dropCollection("test.collection");
+}
+
+TEST(OpMsg, DocumentSequenceMaxWriteBatchWorks) {
+ std::string errMsg;
+ auto conn = std::unique_ptr<DBClientBase>(
+ unittest::getFixtureConnectionString().connect("integration_test", errMsg));
+ uassert(ErrorCodes::SocketException, errMsg, conn);
+
+ conn->dropCollection("test.collection");
+
+ OpMsgBuilder msgBuilder;
+
+ BSONObj body = fromjson(R"({
+ insert: "collection",
+ writeConcern: {w: 0},
+ $db: "test"
+ })");
+
+ constexpr StringData kSequenceName = "documents"_sd;
+ size_t targetSize = MaxMessageSizeBytes - body.objsize() - 4 - kSequenceName.size();
+ size_t documentSize = targetSize / write_ops::kMaxWriteBatchSize;
+ OpMsgBuilder::DocSequenceBuilder sequenceBuilder = msgBuilder.beginDocSequence(kSequenceName);
+ for (size_t i = 0; i < write_ops::kMaxWriteBatchSize; i++) {
+ BSONObjBuilder docBuilder = sequenceBuilder.appendBuilder();
+ docBuilder.append("a", std::string(documentSize - 13, 'b'));
+ }
+ sequenceBuilder.done();
+
+ msgBuilder.setBody(std::move(body));
+
+ Message request = msgBuilder.finish();
+ Message reply;
+ ASSERT_TRUE(conn->call(request, reply, false));
+
+ ASSERT_EQ(conn->count("test.collection"), write_ops::kMaxWriteBatchSize);
+ conn->dropCollection("test.collection");
+}
+
TEST(OpMsg, CloseConnectionOnFireAndForgetNotMasterError) {
const auto connStr = unittest::getFixtureConnectionString();