0
0
mirror of https://github.com/mongodb/mongo.git synced 2024-11-24 16:46:00 +01:00

SERVER-92613:refactor jstests/sharding/opcounters.js as a unit test (#25429)

GitOrigin-RevId: accc8e0525cffc4f4253d4165bcda7bf15eef64e
This commit is contained in:
niazpavelatmongo 2024-07-30 11:40:02 -07:00 committed by MongoDB Bot
parent 9b0c4ae757
commit 80e1153600
2 changed files with 134 additions and 0 deletions

View File

@ -83,12 +83,24 @@ TEST_F(DBDirectClientTest, NoAuth) {
}
TEST_F(DBDirectClientTest, InsertSingleDocumentSuccessful) {
auto globalDeletesCountBefore = globalOpCounters.getDelete()->load();
auto globalInsertsCountBefore = globalOpCounters.getInsert()->load();
auto globalUpdatesCountBefore = globalOpCounters.getUpdate()->load();
auto globalCommandsCountBefore = globalOpCounters.getCommand()->load();
DBDirectClient client(_opCtx);
write_ops::InsertCommandRequest insertOp(kNs);
insertOp.setDocuments({BSON("_id" << 1)});
auto insertReply = client.insert(insertOp);
ASSERT_EQ(insertReply.getN(), 1);
ASSERT_FALSE(insertReply.getWriteErrors());
auto globalCommandsCountAfter = globalOpCounters.getCommand()->load();
auto globalDeletesCountAfter = globalOpCounters.getDelete()->load();
auto globalInsertsCountAfter = globalOpCounters.getInsert()->load();
auto globalUpdatesCountAfter = globalOpCounters.getUpdate()->load();
ASSERT_EQ(1, globalInsertsCountAfter - globalInsertsCountBefore);
ASSERT_EQ(0, globalDeletesCountAfter - globalDeletesCountBefore);
ASSERT_EQ(0, globalCommandsCountAfter - globalCommandsCountBefore);
ASSERT_EQ(0, globalUpdatesCountAfter - globalUpdatesCountBefore);
}
TEST_F(DBDirectClientTest, InsertDuplicateDocumentDoesNotThrow) {
@ -103,6 +115,10 @@ TEST_F(DBDirectClientTest, InsertDuplicateDocumentDoesNotThrow) {
}
TEST_F(DBDirectClientTest, UpdateSingleDocumentSuccessfully) {
auto globalDeletesCountBefore = globalOpCounters.getDelete()->load();
auto globalInsertsCountBefore = globalOpCounters.getInsert()->load();
auto globalUpdatesCountBefore = globalOpCounters.getUpdate()->load();
auto globalCommandsCountBefore = globalOpCounters.getCommand()->load();
DBDirectClient client(_opCtx);
write_ops::UpdateCommandRequest updateOp(kNs);
updateOp.setUpdates({[&] {
@ -118,6 +134,14 @@ TEST_F(DBDirectClientTest, UpdateSingleDocumentSuccessfully) {
// No documents there initially
ASSERT_EQ(updateReply.getNModified(), 0);
ASSERT_FALSE(updateReply.getWriteErrors());
auto globalCommandsCountAfter = globalOpCounters.getCommand()->load();
auto globalDeletesCountAfter = globalOpCounters.getDelete()->load();
auto globalInsertsCountAfter = globalOpCounters.getInsert()->load();
auto globalUpdatesCountAfter = globalOpCounters.getUpdate()->load();
ASSERT_EQ(0, globalInsertsCountAfter - globalInsertsCountBefore);
ASSERT_EQ(0, globalDeletesCountAfter - globalDeletesCountBefore);
ASSERT_EQ(0, globalCommandsCountAfter - globalCommandsCountBefore);
ASSERT_EQ(1, globalUpdatesCountAfter - globalUpdatesCountBefore);
}
TEST_F(DBDirectClientTest, UpdateDuplicateImmutableFieldDoesNotThrow) {
@ -144,6 +168,11 @@ TEST_F(DBDirectClientTest, DeleteSingleDocumentSuccessful) {
write_ops::InsertCommandRequest insertOp(kNs);
insertOp.setDocuments({BSON("_id" << 1)});
auto insertReply = client.insert(insertOp);
auto globalDeletesCountBefore = globalOpCounters.getDelete()->load();
auto globalInsertsCountBefore = globalOpCounters.getInsert()->load();
auto globalUpdatesCountBefore = globalOpCounters.getUpdate()->load();
auto globalCommandsCountBefore = globalOpCounters.getCommand()->load();
// Delete document
write_ops::DeleteCommandRequest deleteOp(kNs);
deleteOp.setDeletes({[&] {
@ -155,6 +184,14 @@ TEST_F(DBDirectClientTest, DeleteSingleDocumentSuccessful) {
auto deleteReply = client.remove(deleteOp);
ASSERT_EQ(deleteReply.getN(), 1);
ASSERT_FALSE(deleteReply.getWriteErrors());
auto globalCommandsCountAfter = globalOpCounters.getCommand()->load();
auto globalDeletesCountAfter = globalOpCounters.getDelete()->load();
auto globalInsertsCountAfter = globalOpCounters.getInsert()->load();
auto globalUpdatesCountAfter = globalOpCounters.getUpdate()->load();
ASSERT_EQ(0, globalInsertsCountAfter - globalInsertsCountBefore);
ASSERT_EQ(1, globalDeletesCountAfter - globalDeletesCountBefore);
ASSERT_EQ(0, globalCommandsCountAfter - globalCommandsCountBefore);
ASSERT_EQ(0, globalUpdatesCountAfter - globalUpdatesCountBefore);
}
TEST_F(DBDirectClientTest, DeleteDocumentIncorrectHintDoesNotThrow) {

View File

@ -248,6 +248,103 @@ TEST_F(WriteOpsRetryability, PerformInsertsSuccess) {
ASSERT_TRUE(result.results[1].isOK());
}
TEST_F(WriteOpsRetryability, OpCountersInsertSuccess) {
const NamespaceString nss = NamespaceString::createNamespaceString_forTest("foo.bar");
auto globalDeletesCountBeforeInsert = globalOpCounters.getDelete()->load();
auto globalInsertsCountBeforeInsert = globalOpCounters.getInsert()->load();
auto globalUpdatesCountBeforeInsert = globalOpCounters.getUpdate()->load();
auto globalCommandsCountBeforeInsert = globalOpCounters.getCommand()->load();
auto opCtxRaii = makeOperationContext();
// Use an unreplicated write block to avoid setting up more structures.
repl::UnreplicatedWritesBlock unreplicated(opCtxRaii.get());
setUpReplication(getServiceContext());
// Test that the insert operation will only increase the insert count.
write_ops::InsertCommandRequest insertOp(nss);
insertOp.getWriteCommandRequestBase().setOrdered(true);
insertOp.setDocuments({BSON("_id" << 0), BSON("_id" << 1)});
write_ops_exec::WriteResult result = write_ops_exec::performInserts(opCtxRaii.get(), insertOp);
ASSERT_EQ(2, result.results.size());
ASSERT_TRUE(result.results[0].isOK());
ASSERT_TRUE(result.results[1].isOK());
auto globalCommandsCountAfterInsert = globalOpCounters.getCommand()->load();
auto globalDeletesCountAfterInsert = globalOpCounters.getDelete()->load();
auto globalInsertsCountAfterInsert = globalOpCounters.getInsert()->load();
auto globalUpdatesCountAfterInsert = globalOpCounters.getUpdate()->load();
ASSERT_EQ(2, globalInsertsCountAfterInsert - globalInsertsCountBeforeInsert);
ASSERT_EQ(0, globalDeletesCountAfterInsert - globalDeletesCountBeforeInsert);
ASSERT_EQ(0, globalCommandsCountAfterInsert - globalCommandsCountBeforeInsert);
ASSERT_EQ(0, globalUpdatesCountAfterInsert - globalUpdatesCountBeforeInsert);
}
TEST_F(WriteOpsRetryability, OpCountersUpdateSuccess) {
const NamespaceString nss = NamespaceString::createNamespaceString_forTest("foo.bar");
auto globalDeletesCountBeforeUpdate = globalOpCounters.getDelete()->load();
auto globalInsertsCountBeforeUpdate = globalOpCounters.getInsert()->load();
auto globalUpdatesCountBeforeUpdate = globalOpCounters.getUpdate()->load();
auto globalCommandsCountBeforeUpdate = globalOpCounters.getCommand()->load();
auto opCtxRaii = makeOperationContext();
// Use an unreplicated write block to avoid setting up more structures.
repl::UnreplicatedWritesBlock unreplicated(opCtxRaii.get());
setUpReplication(getServiceContext());
// Test that the update operation will only increase the update count.
write_ops::UpdateCommandRequest updateOp(nss);
updateOp.setUpdates({[&] {
write_ops::UpdateOpEntry entry;
entry.setQ(BSON("_id" << 1));
entry.setU(write_ops::UpdateModification::parseFromClassicUpdate(BSON("x" << 1)));
entry.setUpsert(true);
return entry;
}()});
write_ops_exec::WriteResult result = write_ops_exec::performUpdates(opCtxRaii.get(), updateOp);
auto globalCommandsCountAfterUpdate = globalOpCounters.getCommand()->load();
auto globalDeletesCountAfterUpdate = globalOpCounters.getDelete()->load();
auto globalInsertsCountAfterUpdate = globalOpCounters.getInsert()->load();
auto globalUpdatesCountAfterUpdate = globalOpCounters.getUpdate()->load();
ASSERT_EQ(0, globalInsertsCountAfterUpdate - globalInsertsCountBeforeUpdate);
ASSERT_EQ(0, globalDeletesCountAfterUpdate - globalDeletesCountBeforeUpdate);
ASSERT_EQ(0, globalCommandsCountAfterUpdate - globalCommandsCountBeforeUpdate);
ASSERT_EQ(1, globalUpdatesCountAfterUpdate - globalUpdatesCountBeforeUpdate);
}
TEST_F(WriteOpsRetryability, OpCountersDeleteSuccess) {
const NamespaceString nss = NamespaceString::createNamespaceString_forTest("foo.bar");
auto opCtxRaii = makeOperationContext();
// Use an unreplicated write block to avoid setting up more structures.
repl::UnreplicatedWritesBlock unreplicated(opCtxRaii.get());
setUpReplication(getServiceContext());
// An insert operation is needed for the delete
write_ops::InsertCommandRequest insertOp(nss);
insertOp.setDocuments({BSON("_id" << 1)});
write_ops_exec::WriteResult result = write_ops_exec::performInserts(opCtxRaii.get(), insertOp);
// Test that the delete operation will only increase the delete count.
auto globalDeletesCountBeforeDelete = globalOpCounters.getDelete()->load();
auto globalInsertsCountBeforeDelete = globalOpCounters.getInsert()->load();
auto globalUpdatesCountBeforeDelete = globalOpCounters.getUpdate()->load();
auto globalCommandsCountBeforeDelete = globalOpCounters.getCommand()->load();
write_ops::DeleteCommandRequest deleteOp(nss);
deleteOp.setDeletes({[&] {
write_ops::DeleteOpEntry entry;
entry.setQ(BSON("_id" << 1));
entry.setMulti(false);
return entry;
}()});
result = write_ops_exec::performDeletes(opCtxRaii.get(), deleteOp);
auto globalCommandsCountAfterDelete = globalOpCounters.getCommand()->load();
auto globalDeletesCountAfterDelete = globalOpCounters.getDelete()->load();
auto globalInsertsCountAfterDelete = globalOpCounters.getInsert()->load();
auto globalUpdatesCountAfterDelete = globalOpCounters.getUpdate()->load();
ASSERT_EQ(0, globalInsertsCountAfterDelete - globalInsertsCountBeforeDelete);
ASSERT_EQ(1, globalDeletesCountAfterDelete - globalDeletesCountBeforeDelete);
ASSERT_EQ(0, globalCommandsCountAfterDelete - globalCommandsCountBeforeDelete);
ASSERT_EQ(0, globalUpdatesCountAfterDelete - globalUpdatesCountBeforeDelete);
}
TEST_F(WriteOpsRetryability, PerformRetryableInsertsSuccess) {
auto opCtxRaii = makeOperationContext();
opCtxRaii->setLogicalSessionId({UUID::gen(), {}});