summaryrefslogtreecommitdiff
path: root/jstests/core/administrative/profile/profile_insert.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/administrative/profile/profile_insert.js')
-rw-r--r--jstests/core/administrative/profile/profile_insert.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/jstests/core/administrative/profile/profile_insert.js b/jstests/core/administrative/profile/profile_insert.js
new file mode 100644
index 00000000000..83cc920e200
--- /dev/null
+++ b/jstests/core/administrative/profile/profile_insert.js
@@ -0,0 +1,88 @@
+// Confirms that profiled insert execution contains all expected metrics with proper values.
+//
+// The test runs commands that are not allowed with security token: setProfilingLevel.
+// @tags: [
+// not_allowed_with_security_token,
+// # Asserts on the number of index keys inserted.
+// assumes_no_implicit_index_creation,
+// assumes_write_concern_unchanged,
+// does_not_support_stepdowns,
+// requires_profiling,
+// ]
+
+(function() {
+"use strict";
+
+// For 'getLatestProfilerEntry()'.
+load("jstests/libs/clustered_collections/clustered_collection_util.js");
+load("jstests/libs/profiler.js");
+
+var testDB = db.getSiblingDB("profile_insert");
+assert.commandWorked(testDB.dropDatabase());
+var coll = testDB.getCollection("test");
+
+testDB.setProfilingLevel(2);
+
+//
+// Test single insert.
+//
+var doc = {_id: 1};
+assert.commandWorked(coll.insert(doc));
+
+var profileObj = getLatestProfilerEntry(testDB);
+
+const collectionIsClustered = ClusteredCollectionUtil.areAllCollectionsClustered(db.getMongo());
+// A clustered collection has no actual index on _id.
+let expectedKeysInserted = collectionIsClustered ? 0 : 1;
+
+assert.eq(profileObj.ns, coll.getFullName(), tojson(profileObj));
+assert.eq(profileObj.op, "insert", tojson(profileObj));
+assert.eq(profileObj.ninserted, 1, tojson(profileObj));
+assert.eq(profileObj.keysInserted, expectedKeysInserted, tojson(profileObj));
+assert.eq(profileObj.command.ordered, true, tojson(profileObj));
+assert.eq(profileObj.protocol, "op_msg", tojson(profileObj));
+assert(profileObj.hasOwnProperty("responseLength"), tojson(profileObj));
+
+assert(profileObj.hasOwnProperty("numYield"), tojson(profileObj));
+assert(profileObj.hasOwnProperty("locks"), tojson(profileObj));
+assert(profileObj.hasOwnProperty("millis"), tojson(profileObj));
+assert(profileObj.hasOwnProperty("ts"), tojson(profileObj));
+assert(profileObj.hasOwnProperty("client"), tojson(profileObj));
+assert.eq(profileObj.appName, "MongoDB Shell", tojson(profileObj));
+
+//
+// Test multi-insert.
+//
+coll.drop();
+
+var docArray = [{_id: 1}, {_id: 2}];
+var bulk = coll.initializeUnorderedBulkOp();
+bulk.insert(docArray[0]);
+bulk.insert(docArray[1]);
+assert.commandWorked(bulk.execute());
+
+profileObj = getLatestProfilerEntry(testDB);
+
+expectedKeysInserted = collectionIsClustered ? 0 : 2;
+
+assert.eq(profileObj.ninserted, 2, tojson(profileObj));
+assert.eq(profileObj.keysInserted, expectedKeysInserted, tojson(profileObj));
+assert.eq(profileObj.appName, "MongoDB Shell", tojson(profileObj));
+
+//
+// Test insert options.
+//
+coll.drop();
+doc = {
+ _id: 1
+};
+var wtimeout = 60000;
+assert.commandWorked(coll.insert(doc, {writeConcern: {w: 1, wtimeout: wtimeout}, ordered: false}));
+
+profileObj = getLatestProfilerEntry(testDB);
+
+assert.eq(profileObj.command.ordered, false, tojson(profileObj));
+assert.eq(profileObj.command.writeConcern.w, 1, tojson(profileObj));
+assert.eq(profileObj.command.writeConcern.wtimeout, wtimeout, tojson(profileObj));
+assert.eq(profileObj.appName, "MongoDB Shell", tojson(profileObj));
+})();