summaryrefslogtreecommitdiff
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
parente78dc4e8cf32da88062090410ab8617f604633c9 (diff)
downloadmongo-11892a26868b452a161b143bb93a04d2ac3b6748.tar.gz
SERVER-36606: Add large OP_MSG audit integration testing
-rw-r--r--buildscripts/resmokeconfig/suites/integration_tests_standalone_audit.yml21
-rw-r--r--etc/evergreen.yml10
-rw-r--r--src/mongo/rpc/op_msg_integration_test.cpp71
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();