Skip to content

Commit

Permalink
SERVER-36606: Add large OP_MSG audit integration testing
Browse files Browse the repository at this point in the history
  • Loading branch information
spencerjackson committed Sep 17, 2018
1 parent e78dc4e commit 11892a2
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 0 deletions.
Original file line number Diff line number Diff line change
@@ -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
10 changes: 10 additions & 0 deletions etc/evergreen.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5005,6 +5005,15 @@ tasks:
resmoke_args: --suites=integration_tests_standalone --storageEngine=wiredTiger
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:
Expand Down Expand Up @@ -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
Expand Down
71 changes: 71 additions & 0 deletions src/mongo/rpc/op_msg_integration_test.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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();

Expand Down

0 comments on commit 11892a2

Please sign in to comment.