diff options
author | Benety Goh <benety@mongodb.com> | 2015-01-20 09:23:42 -0500 |
---|---|---|
committer | Benety Goh <benety@mongodb.com> | 2015-01-21 09:16:04 -0500 |
commit | 7d504b66098d1cfcafdb536ff0db3f7eb53f8c99 (patch) | |
tree | cda2934cb2de79ec86f0a39f8d59b585bcad6363 /jstests/core/create_indexes.js | |
parent | 876f5f475bf9242c098e6de641aa7ee0982803c2 (diff) | |
download | mongo-7d504b66098d1cfcafdb536ff0db3f7eb53f8c99.tar.gz |
SERVER-16930 createIndexes should always set numIndexesBefore and numIndexesAfter when it runs successfully
Diffstat (limited to 'jstests/core/create_indexes.js')
-rw-r--r-- | jstests/core/create_indexes.js | 189 |
1 files changed, 106 insertions, 83 deletions
diff --git a/jstests/core/create_indexes.js b/jstests/core/create_indexes.js index e78c87a30ea..2ace0cbb20e 100644 --- a/jstests/core/create_indexes.js +++ b/jstests/core/create_indexes.js @@ -1,83 +1,106 @@ -t = db.create_indexes; -t.drop(); - -// TODO: revisit this after createIndexes api stabilizes. -var isMongos = ("isdbgrid" == db.runCommand("ismaster").msg); -var extractResult = function(obj) { - if (!isMongos) return obj; - - // Sample mongos format: - // { - // raw: { - // "localhost:30000": { - // createdCollectionAutomatically: false, - // numIndexesBefore: 3, - // numIndexesAfter: 5, - // ok: 1 - // } - // }, - // ok: 1 - // } - - var numFields = 0; - var result = null; - for (var field in obj.raw) { - result = obj.raw[field]; - numFields++; - } - - assert.neq(null, result); - assert.eq(1, numFields); - return result; -}; - - -res = t.runCommand( "createIndexes", { indexes : [ { key : { "x" : 1 }, name : "x_1" } ] } ); -res = extractResult( res ); -assert( res.createdCollectionAutomatically ); -assert.eq( 1, res.numIndexesBefore ); -assert.eq( 2, res.numIndexesAfter ); - -res = t.runCommand( "createIndexes", { indexes : [ { key : { "x" : 1 }, name : "x_1" } ] } ); -res = extractResult( res ); -assert.eq( 2, res.numIndexesBefore ); -assert.isnull( res.numIndexesAfter ); - -res = t.runCommand( "createIndexes", { indexes : [ { key : { "x" : 1 }, name : "x_1" }, - { key : { "y" : 1 }, name : "y_1" } ] } ); -res = extractResult( res ); -assert( !res.createdCollectionAutomatically ); -assert.eq( 2, res.numIndexesBefore ); -assert.eq( 3, res.numIndexesAfter ); - -res = t.runCommand( "createIndexes", { indexes : [ { key : { "a" : 1 }, name : "a_1" }, - { key : { "b" : 1 }, name : "b_1" } ] } ); -res = extractResult( res ); -assert( !res.createdCollectionAutomatically ); -assert.eq( 3, res.numIndexesBefore ); -assert.eq( 5, res.numIndexesAfter ); - -res = t.runCommand( "createIndexes", { indexes : [ { key : { "a" : 1 }, name : "a_1" }, - { key : { "b" : 1 }, name : "b_1" } ] } ); -res = extractResult( res ); -assert.eq( 5, res.numIndexesBefore ); -assert.isnull( res.numIndexesAfter ); - -res = t.runCommand( "createIndexes", { indexes : [ {} ] } ); -assert( !res.ok ); - -res = t.runCommand( "createIndexes", { indexes : [ {} , { key : { m : 1 }, name : "asd" } ] } ); -assert( !res.ok ); - -assert.eq( 5, t.getIndexes().length ); - -res = t.runCommand( "createIndexes", - { indexes : [ { key : { "c" : 1 }, sparse : true, name : "c_1" } ] } ) -assert.eq( 6, t.getIndexes().length ); -assert.eq( 1, t.getIndexes().filter( function(z){ return z.sparse; } ).length ); - -res = t.runCommand( "createIndexes", - { indexes : [ { key : { "x" : "foo" }, name : "x_1" } ] } ); -assert( !res.ok ) - -assert.eq( 6, t.getIndexes().length ); +(function() { + 'use strict'; + + var t = db.create_indexes; + t.drop(); + + // TODO: revisit this after createIndexes api stabilizes. + var isMongos = ("isdbgrid" == db.runCommand("ismaster").msg); + var extractResult = function(obj) { + if (!isMongos) return obj; + + // Sample mongos format: + // { + // raw: { + // "localhost:30000": { + // createdCollectionAutomatically: false, + // numIndexesBefore: 3, + // numIndexesAfter: 5, + // ok: 1 + // } + // }, + // ok: 1 + // } + + var numFields = 0; + var result = null; + for (var field in obj.raw) { + result = obj.raw[field]; + numFields++; + } + + assert.neq(null, result); + assert.eq(1, numFields); + return result; + }; + + + var res = assert.commandWorked(t.runCommand('createIndexes', + {indexes: [{key: {x: 1}, name: 'x_1'}]})); + res = extractResult( res ); + assert( res.createdCollectionAutomatically ); + assert.eq( 1, res.numIndexesBefore ); + assert.eq( 2, res.numIndexesAfter ); + assert.isnull(res.note, + 'createIndexes.note should not be present in results when adding a new index: ' + + tojson(res)); + + res = assert.commandWorked(t.runCommand('createIndexes', + {indexes: [{key: {x: 1}, name: 'x_1'}]})); + res = extractResult( res ); + assert.eq( 2, res.numIndexesBefore ); + assert.eq(2, res.numIndexesAfter, + 'numIndexesAfter missing from createIndexes result when adding a duplicate index: ' + + tojson(res)); + assert(res.note, + 'createIndexes.note should be present in results when adding a duplicate index: ' + + tojson(res)); + + res = t.runCommand( "createIndexes", { indexes : [ { key : { "x" : 1 }, name : "x_1" }, + { key : { "y" : 1 }, name : "y_1" } ] } ); + res = extractResult( res ); + assert( !res.createdCollectionAutomatically ); + assert.eq( 2, res.numIndexesBefore ); + assert.eq( 3, res.numIndexesAfter ); + + res = assert.commandWorked(t.runCommand('createIndexes', + {indexes: [{key: {a: 1}, name: 'a_1'}, {key: {b: 1}, name: 'b_1'}]})); + res = extractResult( res ); + assert( !res.createdCollectionAutomatically ); + assert.eq( 3, res.numIndexesBefore ); + assert.eq( 5, res.numIndexesAfter ); + assert.isnull(res.note, + 'createIndexes.note should not be present in results when adding new indexes: ' + + tojson(res)); + + res = assert.commandWorked(t.runCommand('createIndexes', + {indexes: [{key: {a: 1}, name: 'a_1'}, {key: {b: 1}, name: 'b_1'}]})); + + res = extractResult( res ); + assert.eq( 5, res.numIndexesBefore ); + assert.eq(5, res.numIndexesAfter, + 'numIndexesAfter missing from createIndexes result when adding duplicate indexes: ' + + tojson(res)); + assert(res.note, + 'createIndexes.note should be present in results when adding a duplicate index: ' + + tojson(res)); + + res = t.runCommand( "createIndexes", { indexes : [ {} ] } ); + assert( !res.ok ); + + res = t.runCommand( "createIndexes", { indexes : [ {} , { key : { m : 1 }, name : "asd" } ] } ); + assert( !res.ok ); + + assert.eq( 5, t.getIndexes().length ); + + res = t.runCommand( "createIndexes", + { indexes : [ { key : { "c" : 1 }, sparse : true, name : "c_1" } ] } ) + assert.eq( 6, t.getIndexes().length ); + assert.eq( 1, t.getIndexes().filter( function(z){ return z.sparse; } ).length ); + + res = t.runCommand( "createIndexes", + { indexes : [ { key : { "x" : "foo" }, name : "x_1" } ] } ); + assert( !res.ok ) + + assert.eq( 6, t.getIndexes().length ); +}()); |