summaryrefslogtreecommitdiff
path: root/jstests
diff options
context:
space:
mode:
authorJason Rassi <rassi@10gen.com>2015-05-14 07:35:11 -0400
committerRamon Fernandez <ramon.fernandez@mongodb.com>2015-05-19 15:38:12 -0400
commit137b088130d7f7fd4ebc8b09d79ed72de44925b5 (patch)
tree88adee924232e44342208a6a1a5ed7adb405c7a5 /jstests
parenta029932768cdc12dd86a0afee4a7411065230c5a (diff)
downloadmongo-137b088130d7f7fd4ebc8b09d79ed72de44925b5.tar.gz
SERVER-13875 Spec equivalence check ignore text/geo index versions
(cherry picked from commit 20e130aceda766c646d123d8a853ea5aabbeab26)
Diffstat (limited to 'jstests')
-rw-r--r--jstests/core/fts_index.js34
-rw-r--r--jstests/core/geo_s2indexversion1.js25
2 files changed, 56 insertions, 3 deletions
diff --git a/jstests/core/fts_index.js b/jstests/core/fts_index.js
index af927c86f48..88b1c5f9643 100644
--- a/jstests/core/fts_index.js
+++ b/jstests/core/fts_index.js
@@ -62,10 +62,12 @@ coll.drop();
//
// 3. Collections may have at most one text index.
//
-assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}));
-assert.eq(2, coll.getIndexes().length);
// ensureIndex() becomes a no-op on an equivalent index spec.
+assert.commandWorked(coll.getDB().createCollection(coll.getName()));
+assert.eq(1, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}));
+assert.eq(2, coll.getIndexes().length);
assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}));
assert.eq(2, coll.getIndexes().length);
assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}, {background: true}));
@@ -78,11 +80,37 @@ assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}, {textIndexVersion
assert.eq(2, coll.getIndexes().length);
assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}, {language_override: "language"}));
assert.eq(2, coll.getIndexes().length);
+coll.drop();
+
+// Two index specs are also considered equivalent if they differ only in 'textIndexVersion', and
+// ensureIndex() becomes a no-op on repeated requests that only differ in this way.
+assert.commandWorked(coll.getDB().createCollection(coll.getName()));
+assert.eq(1, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 1}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 2}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: "text"}));
+assert.eq(2, coll.getIndexes().length);
+coll.drop();
+
+assert.commandWorked(coll.getDB().createCollection(coll.getName()));
+assert.eq(1, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 2}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: "text"}, {textIndexVersion: 1}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: "text"}));
+assert.eq(2, coll.getIndexes().length);
+coll.drop();
// ensureIndex() fails if a second text index would be built.
+assert.commandWorked(coll.getDB().createCollection(coll.getName()));
+assert.eq(1, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({a: 1, b: "text", c: 1}));
+assert.eq(2, coll.getIndexes().length);
assert.commandFailed(coll.ensureIndex({a: 1, _fts: "text", _ftsx: 1, c: 1}, {weights: {d: 1}}));
assert.commandFailed(coll.ensureIndex({a: 1, b: "text", c: 1}, {default_language: "none"}));
-assert.commandFailed(coll.ensureIndex({a: 1, b: "text", c: 1}, {textIndexVersion: 1}));
assert.commandFailed(coll.ensureIndex({a: 1, b: "text", c: 1}, {language_override: "idioma"}));
assert.commandFailed(coll.ensureIndex({a: 1, b: "text", c: 1}, {weights: {d: 1}}));
assert.commandFailed(coll.ensureIndex({a: 1, b: "text", d: 1}));
diff --git a/jstests/core/geo_s2indexversion1.js b/jstests/core/geo_s2indexversion1.js
index bfb70e3a16c..8907142f84a 100644
--- a/jstests/core/geo_s2indexversion1.js
+++ b/jstests/core/geo_s2indexversion1.js
@@ -76,6 +76,31 @@ assert.eq(2, specObj["2dsphereIndexVersion"]);
coll.drop();
//
+// Two index specs are considered equivalent if they differ only in '2dsphereIndexVersion', and
+// ensureIndex() should become a no-op on repeated requests that only differ in this way.
+//
+
+assert.commandWorked(coll.getDB().createCollection(coll.getName()));
+assert.eq(1, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}));
+assert.eq(2, coll.getIndexes().length);
+coll.drop();
+
+assert.commandWorked(coll.getDB().createCollection(coll.getName()));
+assert.eq(1, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 2}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}, {"2dsphereIndexVersion": 1}));
+assert.eq(2, coll.getIndexes().length);
+assert.commandWorked(coll.ensureIndex({geo: "2dsphere"}));
+assert.eq(2, coll.getIndexes().length);
+coll.drop();
+
+//
// Test compatibility of various GeoJSON objects with both 2dsphere index versions.
//