diff options
Diffstat (limited to 'jstests/core/indexStatsCommand.js')
| -rw-r--r-- | jstests/core/indexStatsCommand.js | 88 |
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); |
