diff options
author | David Storch <david.storch@10gen.com> | 2015-04-09 13:47:02 -0400 |
---|---|---|
committer | David Storch <david.storch@10gen.com> | 2015-04-09 16:42:23 -0400 |
commit | 8f7ad88b463c5dea8bca8d8e0626fa80f35e3a47 (patch) | |
tree | d1ab084f18438324c5e3fe017f14e9898c47a2f1 /jstests/core/natural.js | |
parent | af4422b9845911ff0fa16392e0177edefda01328 (diff) | |
download | mongo-8f7ad88b463c5dea8bca8d8e0626fa80f35e3a47.tar.gz |
SERVER-17718 remove test natural.js
The same test coverage is provided by more easily maintainable unit tests.
We should be able to test $natural hint/sort without depending on $showDiskLoc.
Diffstat (limited to 'jstests/core/natural.js')
-rw-r--r-- | jstests/core/natural.js | 379 |
1 files changed, 0 insertions, 379 deletions
diff --git a/jstests/core/natural.js b/jstests/core/natural.js deleted file mode 100644 index 51f60b2c7a5..00000000000 --- a/jstests/core/natural.js +++ /dev/null @@ -1,379 +0,0 @@ -// SERVER-14580: Test $natural - -// Iterate cursor and check that field is increasing or decreasing -// name - Test name -// cur - cursor -// field - field name to check -// dir - direction for test (-1 for decreasing or 1 for increasing) -// isMongos - true/false -// errorExpected - expected error true/false -function checkQuery(name, cur, field, dir, isMongos, errorExpected) { - var minVal = -1; - var maxVal = Number.MAX_VALUE; - var lastVal = minVal; - var lastDiskLoc = {file: minVal, offset: minVal, initOffset: minVal}; - - if (dir === -1) { - lastVal = maxVal; - lastDiskLoc = {file: maxVal, offset: maxVal, initOffset: maxVal}; - } - try { - while(cur.hasNext()) { - // Field is an increasing or decreasing value - var val = cur.next(); - delete(val.pad); - // Only test diskLoc if specified from projection in query - var testdl = false; - if ("diskLoc" in val) { - testdl = true; - // Reset last offset if file changes - if (val.diskLoc.file != lastDiskLoc.file) { - lastDiskLoc.offset = lastDiskLoc.initOffset; - } - } - if (dir === 1) { - assert.gte(val[field], lastVal, name+" "+field); - // diskLoc tests are informational, not assertable - if (testdl) { - if (val.diskLoc.file < lastDiskLoc.file) { - print("Warning: "+name+" diskLoc file: "+ - val.diskLoc.file+" < "+lastDiskLoc.file); - printjson(val); - } - if (val.diskLoc.offset <= lastDiskLoc.offset) { - print("Warning: "+name+" diskLoc file: "+ - val.diskLoc.offset+" <= "+lastDiskLoc.offset); - printjson(val); - } - } - } else { - assert.lte(val[field], lastVal, name+" "+field); - // diskLoc tests are informational, not assertable - if (testdl) { - if (val.diskLoc.file > lastDiskLoc.file) { - print("Warning: "+name+" diskLoc file: "+ - val.diskLoc.file+" > "+lastDiskLoc.file); - printjson(val); - } - if (val.diskLoc.offset >= lastDiskLoc.offset) { - print("Warning: "+name+" diskLoc file: "+ - val.diskLoc.offset+" >= "+lastDiskLoc.offset); - printjson(val); - } - } - } - lastVal = val[field]; - lastDiskLoc = val.diskLoc; - } - } - // Check if error is expected - catch(err) { - // Rethrow if no error is expected - if (!errorExpected) { - // isMongos should swallow assert, as docs do not have a preserved order - if (!isMongos) { - throw(err); - } - } - } -} - -// Run test cases -// test - test object -// db - connection to DB -// isMongo - connected to mongos, true/false -var runTests = function(test, db, isMongos) { - - var name = test.name; - if (isMongos) { - name += " sharding"; - // Not a shard test if no shardKey specified - if (!("shardKey" in test)) { - return; - } - } - - // print test name and test info - jsTest.log(name); - printjson(test); - - // Set collection name, with prefix - var collName = "Natural "+name; - - var collOptions = {}; - if ("collOptions" in test) { - collOptions = test.collOptions; - } - - // Optional test attributes - // Test throws error - var err = false; - if ("errorExpected" in test) { - err = test.errorExpected; - } - - db.createCollection(collName, collOptions); - var coll = db[collName]; - coll.remove({}); - - // Set indexes on collection - test.indexes.forEach(function(idx) { - // Test has second arg to ensureIndex - var idxOpt = null; - if ("indexOpt" in idx) { - idxOpt = idx.indexOpt; - } - coll.ensureIndex(idx.index, idxOpt); - }); - - // shard collection if connected to mongos - if (isMongo) { - db.getMongo().getDB("admin").runCommand({shardCollection : coll+"", key: test.shardKey}); - // pre-split collection on shardKey - var splitCmd = {split: coll+"", middle: {}}; - for (var k in test.shardKey) { - splitCmd.middle[k] = docNum/2; - } - db.getMongo().getDB("admin").runCommand(splitCmd); - } - - // Insert docs - test.inserts(coll); - - printjson(coll.getDB().stats()); - - // Note: $meta not supported before 2.6 - var dl = {diskLoc: {$meta: "diskloc"}}; - - var projs = []; - if ("projections" in test) { - projs = test.projections; - } - var order = test.orderField; - test.queries.forEach(function(q) { - // Tests with hint should override sort $natural - if ("hints" in test) { - test.hints.forEach(function(hint) { - checkQuery(name+" hint override", - coll.find(q).sort({$natural: -1}).hint(hint), order, 1, isMongos, err); - }); - } - // Check all queries with sort & hint $natural in both directions: -1 & 1 - // Project the diskLoc - else { - [-1, 1].forEach(function(dir) { - checkQuery(name+" sort "+dir, - coll.find(q, dl).sort({$natural: dir}), - order, dir, isMongos, err); - checkQuery(name+" hint "+dir, - coll.find(q, dl).hint({$natural: dir}), - order, dir, isMongos, err); - checkQuery(name+" sort/hint "+dir, - coll.find(q, dl).sort({$natural: dir}).hint({$natural: dir}), - order, dir, isMongos, err); - checkQuery(name+" sort/hint opposite", - coll.find(q, dl).sort({$natural: dir}).hint({$natural: dir*-1}), - order, dir, isMongos, err); - // Test various projections - projs.forEach(function(proj) { - checkQuery(name+" proj sort "+dir, - coll.find(q, proj).sort({$natural: dir}), - order, dir, isMongos, err); - checkQuery(name+" proj hint "+dir, - coll.find(q, proj).hint({$natural: dir}), - order, dir, isMongos, err); - checkQuery(name+" proj sort/hint "+dir, - coll.find(q, proj).sort({$natural: dir}).hint({$natural: dir}), - order, dir, isMongos, err); - checkQuery(name+" proj sort/hint opposite", - coll.find(q, proj).sort({$natural: dir}).hint({$natural: dir*-1}), - order, dir, isMongos, err); - }); - }); - } - }); - - // Drop collection - assert.doesNotThrow(function() {return coll.drop();}, [], "Coll drop"+coll); -}; - -// Test cases, each test is a doc -// name - Test name -// indexes - array of index docs -// shardKey - shard key to use for sharding test -// inserts - function to insert docs under test into collection -// queries - array of query docs to execute on collection -// projections - array of projections to apply to query -// orderField - field name which is inserted in order -// hints - array of hint docs -// errorExpected - if test is expected to fail (default false is unspecified) - -var docNum = 1000; -var padSize = Math.pow(2,16); -var padding = ""; -for (var i=0; i< padSize; i++) { - padding += "a"; -} -tests = [ - {name: "Regular index", - indexes: [{index: {a: 1}}], - shardKey: {a: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) - {c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{}, - {a: {$gt: 80}}, - {a: {$lt: 30}}], - orderField: "c" - }, - {name: "Regular index - covered query", - indexes: [{index: {a: 1}}], - shardKey: {a: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{}, - {a: {$gt: 80}}, - {a: {$lt: 30}}], - projections: [{a: 1, c: 1, _id: 0}, {c: 1, _id: 0}], - orderField: "c" - }, - {name: "Hint index", - indexes: [{index: {a: 1}}, {index: {b: 1}}], - shardKey: {a: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum*10), b: i%7, c: i, pad: padding});}}, - queries: [{}, - {a: {$gt: 90000}}, - {a: {$lt: 20000}}], - orderField: "a", - hints: [{a: 1}, "a_1"] - }, - {name: "Regular index duplicate", - indexes: [{index: {b: 1}}], - shardKey: {a: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{b: {$lt: 4}}, - {b: {$gt: 5}}], - orderField: "c" - }, - {name: "Compound index", - indexes: [{index: {a: 1, b: 1}}], - shardKey: {a: 1, b: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{a: {$gt: 20}, b: {$lt: 4}}, - {a: {$gt: 20}, b: {$gt: 5}}], - orderField: "c" - }, - {name: "Unique index", - indexes: [{index: {a: 1, unique: true}}], - shardKey: {a: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{a: {$gt: 80}}, - {a: {$gt: 30}}], - orderField: "c" - }, - {name: "Geo 2d index", - indexes: [{index: {b: "2d"}}], - shardKey: {b: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), - b: {loc: [i%90, 45-i%45]}, - c: i, - pad: padding});}}, - queries: [{b: {$near: [1, 2]}}], - orderField: "c", - errorExpected: true - }, - {name: "Geo 2dsphere index", - indexes: [{index: {b: "2dsphere"}}], - shardKey: {b: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), - b: {type: "Point", coordinates: [i%90, 45-i%45]}, - c: i, - pad: padding});}}, - queries: [{b: {$near: {$geometry: {type: "Point", coordinates: [1, 2]}}}}], - orderField: "c", - errorExpected: true - }, - {name: "Geo geoHaystack index", - indexes: [{index: {b: "geoHaystack"}}], - shardKey: {b: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), - b: {type: "Point", coordinates: [i%90, 45-i%45]}, - c: i});}}, - queries: [{b: {$near: {$geometry: {type: "Point", coordinates: [1, 2]}}}}], - orderField: "c", - errorExpected: true - }, - {name: "Text index", - indexes: [{index: {b: "text"}}], - shardKey: {b: 1}, - inserts: function(c) {var words = ["bird", "cat", "dog", "goat"]; - for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), - b: words[i%4], - c: i, - pad: padding});}}, - queries: [{$text: {$search: "cat"}}, - {b: "cat"}], - orderField: "c", - errorExpected: true - }, - {name: "Sparse index", - indexes: [{index: {b: 1}, indexOpt: {sparse: true}}], - shardKey: {c: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{b: {$gt: 3}}], - orderField: "c" - }, - {name: "Hashed index", - indexes: [{index: {b: "hashed"}}], - shardKey: {b: 1}, - inserts: function(c) {for (var i=0; i< docNum; i++) { - c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{b: {$lt: 4}}, - {b: {$gt: 5}}], - orderField: "c" - }, - {name: "TTL index", - // expire is set to 5 years - indexes: [{index: {a: 1}, index2: {expireAfterSeconds: 60*60*24*365*5}}], - shardKey: {a: 1}, - inserts: function(c) {var myDate = new Date(); - for (var i=0; i< docNum; i++) { - // Year is set to a random value from 2000-2019 - myDate.setYear(Math.floor(Math.random()*docNum%20+2000)); - c.insert({a: myDate, b: i%7, c: i, pad: padding});}}, - queries: [{a: {$lt: ISODate("2012-01-01T00:00:00Z")}}, - {a: {$gt: ISODate("2015-01-01T00:00:00Z")}}], - orderField: "c" - }, - {name: "Capped", - // cap collection at 75% of docNum - collOptions: {capped: true, - size: (padSize+100)*(docNum-(docNum*0.25)), - max: docNum-(docNum*0.25)}, - indexes: [{index: {a: 1}}], - inserts: function(c) {for (var i=0; i< docNum; i++) - {c.insert({a: Math.floor(Math.random()*docNum), b: i%7, c: i, pad: padding});}}, - queries: [{}, - {a: {$gt: 80}}, - {a: {$lt: 30}}], - orderField: "c" - } -]; - - -// Main program -// Determine if test is standalone or sharded (connected to Mongos) -var isMongo = ("isdbgrid" == db.runCommand("ismaster").msg); - -// Execute tests -for (var i=0; i<tests.length; i++) { - runTests(tests[i], db, isMongo); -} |