summaryrefslogtreecommitdiff
path: root/jstests/core/indexStatsCommand.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/indexStatsCommand.js')
-rw-r--r--jstests/core/indexStatsCommand.js88
1 files changed, 88 insertions, 0 deletions
diff --git a/jstests/core/indexStatsCommand.js b/jstests/core/indexStatsCommand.js
new file mode 100644
index 00000000000..2a53f602147
--- /dev/null
+++ b/jstests/core/indexStatsCommand.js
@@ -0,0 +1,88 @@
+db.indexStatsCommand.drop();
+db.createCollection("indexStatsCommand");
+
+t = db.indexStatsCommand;
+
+for (var i = 0; i < 3000; ++i) {
+ t.insert({i: i, d: i % 13});
+}
+
+function textWithIndexVersion(version) {
+ var indexName = 'test_d_' + version;
+ t.ensureIndex({d: 1}, {v: version, name: indexName});
+
+ var result = t.indexStats({index: indexName});
+ if (result["bad cmd"]) {
+ print("storageDetails command not available: skipping");
+ return;
+ }
+
+ assert.commandWorked(result);
+
+ assert(result.index === indexName);
+ assert(result.isIdIndex === false);
+ assert(isObject(result.keyPattern));
+ assert.neq(result.keyPattern, null);
+ assert(isString(result.storageNs));
+ assert(isNumber(result.bucketBodyBytes));
+ assert.eq(result.depth, 1);
+ assert(isObject(result.overall));
+ assert.neq(result.overall, null);
+
+ function checkStats(data) {
+ assert(data.count instanceof NumberLong);
+ assert(isNumber(data.mean));
+ assert(isNumber(data.stddev));
+ assert(isNumber(data.min));
+ assert(isNumber(data.max));
+ }
+
+ function checkAreaStats(data) {
+ assert(isNumber(data.numBuckets));
+
+ assert(isObject(data.keyCount));
+ assert.neq(data.keyCount, null);
+ checkStats(data.keyCount);
+
+ assert(isObject(data.usedKeyCount));
+ assert.neq(data.usedKeyCount, null);
+ checkStats(data.usedKeyCount);
+
+ assert(isObject(data.bsonRatio));
+ assert.neq(data.bsonRatio, null);
+ checkStats(data.bsonRatio);
+
+ assert(isObject(data.keyNodeRatio));
+ assert.neq(data.keyNodeRatio, null);
+ checkStats(data.keyNodeRatio);
+
+ assert(isObject(data.fillRatio));
+ assert.neq(data.fillRatio, null);
+ checkStats(data.fillRatio);
+ }
+
+ assert(isObject(result.overall));
+ checkAreaStats(result.overall);
+
+ assert(result.perLevel instanceof Array);
+ for (var i = 0; i < result.perLevel.length; ++i) {
+ assert(isObject(result.perLevel[i]));
+ checkAreaStats(result.perLevel[i]);
+ }
+
+ result = t.indexStats();
+ assert.commandFailed(result);
+ assert(result.errmsg.match(/index name is required/));
+
+ result = t.indexStats({index: "nonexistent"})
+ assert.commandFailed(result);
+ assert(result.errmsg.match(/index does not exist/));
+
+ result = t.indexStats({index: "_id_", expandNodes: ['string']})
+ assert.commandFailed(result);
+ assert(result.errmsg.match(/expandNodes.*numbers/));
+
+ t.dropIndex(indexName);
+}
+
+[0, 1].map(textWithIndexVersion);