diff options
-rw-r--r-- | buildscripts/resmokeconfig/suites/integration_tests_standalone_audit.yml | 21 | ||||
-rw-r--r-- | etc/evergreen.yml | 10 | ||||
-rw-r--r-- | src/mongo/rpc/op_msg_integration_test.cpp | 71 |
3 files changed, 102 insertions, 0 deletions
diff --git a/buildscripts/resmokeconfig/suites/integration_tests_standalone_audit.yml b/buildscripts/resmokeconfig/suites/integration_tests_standalone_audit.yml new file mode 100644 index 00000000000..80903ff03e8 --- /dev/null +++ b/buildscripts/resmokeconfig/suites/integration_tests_standalone_audit.yml @@ -0,0 +1,21 @@ +test_kind: cpp_integration_test + +selector: + root: build/integration_tests.txt + +executor: + archive: + hooks: + - ValidateCollections + config: {} + hooks: + - class: ValidateCollections + - class: CleanEveryN + n: 20 + fixture: + class: MongoDFixture + mongod_options: + auditDestination: console + set_parameters: + enableTestCommands: 1 + auditAuthorizationSuccess: 1 diff --git a/etc/evergreen.yml b/etc/evergreen.yml index 0c1ef8fcd40..1cd0fbd778e 100644 --- a/etc/evergreen.yml +++ b/etc/evergreen.yml @@ -5006,6 +5006,15 @@ tasks: run_multiple_jobs: true - <<: *task_template + name: integration_tests_standalone_audit + commands: + - func: "do setup" + - func: "run tests" + vars: + resmoke_args: --suites=integration_tests_standalone_audit --storageEngine=wiredTiger + run_multiple_jobs: true + +- <<: *task_template name: integration_tests_replset commands: - func: "do setup" @@ -10779,6 +10788,7 @@ buildvariants: - name: integration_tests_replset - name: integration_tests_sharded - name: integration_tests_standalone + - name: integration_tests_standalone_audit - name: jsCore - name: jsCore_ese - name: jsCore_auth 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(); |