summaryrefslogtreecommitdiff
path: root/jstests/core/create_collection.js
diff options
context:
space:
mode:
Diffstat (limited to 'jstests/core/create_collection.js')
-rw-r--r--jstests/core/create_collection.js315
1 files changed, 156 insertions, 159 deletions
diff --git a/jstests/core/create_collection.js b/jstests/core/create_collection.js
index 06c820f1462..2ac8692b16b 100644
--- a/jstests/core/create_collection.js
+++ b/jstests/core/create_collection.js
@@ -5,163 +5,160 @@
// Tests for the "create" command.
(function() {
- "use strict";
-
- load("jstests/libs/get_index_helpers.js");
-
- // "create" command rejects invalid options.
- db.create_collection.drop();
- assert.commandFailedWithCode(db.createCollection("create_collection", {unknown: 1}), 40415);
-
- // Cannot create a collection with null characters.
- assert.commandFailedWithCode(db.createCollection("\0ab"), ErrorCodes.InvalidNamespace);
- assert.commandFailedWithCode(db.createCollection("a\0b"), ErrorCodes.InvalidNamespace);
- assert.commandFailedWithCode(db.createCollection("ab\0"), ErrorCodes.InvalidNamespace);
-
- //
- // Tests for "idIndex" field.
- //
-
- // "idIndex" field not allowed with "viewOn".
- db.create_collection.drop();
- assert.commandWorked(db.createCollection("create_collection"));
- assert.commandFailedWithCode(db.runCommand({
- create: "create_view",
- viewOn: "create_collection",
- idIndex: {key: {_id: 1}, name: "_id_"}
- }),
- ErrorCodes.InvalidOptions);
-
- // "idIndex" field not allowed with "autoIndexId".
- db.create_collection.drop();
- assert.commandFailedWithCode(
- db.createCollection("create_collection",
- {autoIndexId: false, idIndex: {key: {_id: 1}, name: "_id_"}}),
- ErrorCodes.InvalidOptions);
-
- // "idIndex" field must be an object.
- db.create_collection.drop();
- assert.commandFailedWithCode(db.createCollection("create_collection", {idIndex: 1}),
- ErrorCodes.TypeMismatch);
-
- // "idIndex" field cannot be empty.
- db.create_collection.drop();
- assert.commandFailedWithCode(db.createCollection("create_collection", {idIndex: {}}),
- ErrorCodes.FailedToParse);
-
- // "idIndex" field must be a specification for an _id index.
- db.create_collection.drop();
- assert.commandFailedWithCode(
- db.createCollection("create_collection", {idIndex: {key: {a: 1}, name: "a_1"}}),
- ErrorCodes.BadValue);
-
- // "idIndex" field must have "key" equal to {_id: 1}.
- db.create_collection.drop();
- assert.commandFailedWithCode(
- db.createCollection("create_collection", {idIndex: {key: {a: 1}, name: "_id_"}}),
- ErrorCodes.BadValue);
-
- // The name of an _id index gets corrected to "_id_".
- db.create_collection.drop();
- assert.commandWorked(
- db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "a_1"}}));
- var indexSpec = GetIndexHelpers.findByKeyPattern(db.create_collection.getIndexes(), {_id: 1});
- assert.neq(indexSpec, null);
- assert.eq(indexSpec.name, "_id_", tojson(indexSpec));
-
- // "idIndex" field must only contain fields that are allowed for an _id index.
- db.create_collection.drop();
- assert.commandFailedWithCode(
- db.createCollection("create_collection",
- {idIndex: {key: {_id: 1}, name: "_id_", sparse: true}}),
- ErrorCodes.InvalidIndexSpecificationOption);
-
- // "create" creates v=2 _id index when "v" is not specified in "idIndex".
- db.create_collection.drop();
- assert.commandWorked(
- db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "_id_"}}));
- indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
- assert.neq(indexSpec, null);
- assert.eq(indexSpec.v, 2, tojson(indexSpec));
-
- // "create" creates v=1 _id index when "idIndex" has "v" equal to 1.
- db.create_collection.drop();
- assert.commandWorked(
- db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "_id_", v: 1}}));
- indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
- assert.neq(indexSpec, null);
- assert.eq(indexSpec.v, 1, tojson(indexSpec));
-
- // "create" creates v=2 _id index when "idIndex" has "v" equal to 2.
- db.create_collection.drop();
- assert.commandWorked(
- db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "_id_", v: 2}}));
- indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
- assert.neq(indexSpec, null);
- assert.eq(indexSpec.v, 2, tojson(indexSpec));
-
- // "collation" field of "idIndex" must match collection default collation.
- db.create_collection.drop();
- assert.commandFailedWithCode(
- db.createCollection("create_collection",
- {idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "en_US"}}}),
- ErrorCodes.BadValue);
-
- db.create_collection.drop();
- assert.commandFailedWithCode(db.createCollection("create_collection", {
- collation: {locale: "fr_CA"},
- idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "en_US"}}
- }),
- ErrorCodes.BadValue);
-
- db.create_collection.drop();
- assert.commandFailedWithCode(db.createCollection("create_collection", {
- collation: {locale: "fr_CA"},
- idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "simple"}}
- }),
- ErrorCodes.BadValue);
-
- db.create_collection.drop();
- assert.commandWorked(db.createCollection("create_collection", {
- collation: {locale: "en_US", strength: 3},
- idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "en_US"}}
- }));
- indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
- assert.neq(indexSpec, null);
- assert.eq(indexSpec.collation.locale, "en_US", tojson(indexSpec));
-
- // If "collation" field is not present in "idIndex", _id index inherits collection default
- // collation.
- db.create_collection.drop();
- assert.commandWorked(db.createCollection(
- "create_collection",
- {collation: {locale: "en_US"}, idIndex: {key: {_id: 1}, name: "_id_"}}));
- indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
- assert.neq(indexSpec, null);
- assert.eq(indexSpec.collation.locale, "en_US", tojson(indexSpec));
-
- //
- // Tests the combination of the "capped", "size" and "max" fields in createCollection().
- //
-
- // When "capped" is true, the "size" field needs to be present.
- assert.commandFailedWithCode(db.createCollection('capped_no_size_no_max', {capped: true}),
- ErrorCodes.InvalidOptions);
- assert.commandFailedWithCode(db.createCollection('capped_no_size', {capped: true, max: 10}),
- ErrorCodes.InvalidOptions);
- db.no_capped.drop();
- assert.commandWorked(db.createCollection('no_capped'), {capped: false});
- db.capped_no_max.drop();
- assert.commandWorked(db.createCollection('capped_no_max', {capped: true, size: 256}));
- db.capped_with_max_and_size.drop();
- assert.commandWorked(
- db.createCollection('capped_with_max_and_size', {capped: true, max: 10, size: 256}));
-
- // When the "size" field is present, "capped" needs to be true.
- assert.commandFailedWithCode(db.createCollection('size_no_capped', {size: 256}),
- ErrorCodes.InvalidOptions);
- assert.commandFailedWithCode(
- db.createCollection('size_capped_false', {capped: false, size: 256}),
- ErrorCodes.InvalidOptions);
-
+"use strict";
+
+load("jstests/libs/get_index_helpers.js");
+
+// "create" command rejects invalid options.
+db.create_collection.drop();
+assert.commandFailedWithCode(db.createCollection("create_collection", {unknown: 1}), 40415);
+
+// Cannot create a collection with null characters.
+assert.commandFailedWithCode(db.createCollection("\0ab"), ErrorCodes.InvalidNamespace);
+assert.commandFailedWithCode(db.createCollection("a\0b"), ErrorCodes.InvalidNamespace);
+assert.commandFailedWithCode(db.createCollection("ab\0"), ErrorCodes.InvalidNamespace);
+
+//
+// Tests for "idIndex" field.
+//
+
+// "idIndex" field not allowed with "viewOn".
+db.create_collection.drop();
+assert.commandWorked(db.createCollection("create_collection"));
+assert.commandFailedWithCode(db.runCommand({
+ create: "create_view",
+ viewOn: "create_collection",
+ idIndex: {key: {_id: 1}, name: "_id_"}
+}),
+ ErrorCodes.InvalidOptions);
+
+// "idIndex" field not allowed with "autoIndexId".
+db.create_collection.drop();
+assert.commandFailedWithCode(
+ db.createCollection("create_collection",
+ {autoIndexId: false, idIndex: {key: {_id: 1}, name: "_id_"}}),
+ ErrorCodes.InvalidOptions);
+
+// "idIndex" field must be an object.
+db.create_collection.drop();
+assert.commandFailedWithCode(db.createCollection("create_collection", {idIndex: 1}),
+ ErrorCodes.TypeMismatch);
+
+// "idIndex" field cannot be empty.
+db.create_collection.drop();
+assert.commandFailedWithCode(db.createCollection("create_collection", {idIndex: {}}),
+ ErrorCodes.FailedToParse);
+
+// "idIndex" field must be a specification for an _id index.
+db.create_collection.drop();
+assert.commandFailedWithCode(
+ db.createCollection("create_collection", {idIndex: {key: {a: 1}, name: "a_1"}}),
+ ErrorCodes.BadValue);
+
+// "idIndex" field must have "key" equal to {_id: 1}.
+db.create_collection.drop();
+assert.commandFailedWithCode(
+ db.createCollection("create_collection", {idIndex: {key: {a: 1}, name: "_id_"}}),
+ ErrorCodes.BadValue);
+
+// The name of an _id index gets corrected to "_id_".
+db.create_collection.drop();
+assert.commandWorked(
+ db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "a_1"}}));
+var indexSpec = GetIndexHelpers.findByKeyPattern(db.create_collection.getIndexes(), {_id: 1});
+assert.neq(indexSpec, null);
+assert.eq(indexSpec.name, "_id_", tojson(indexSpec));
+
+// "idIndex" field must only contain fields that are allowed for an _id index.
+db.create_collection.drop();
+assert.commandFailedWithCode(
+ db.createCollection("create_collection",
+ {idIndex: {key: {_id: 1}, name: "_id_", sparse: true}}),
+ ErrorCodes.InvalidIndexSpecificationOption);
+
+// "create" creates v=2 _id index when "v" is not specified in "idIndex".
+db.create_collection.drop();
+assert.commandWorked(
+ db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "_id_"}}));
+indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
+assert.neq(indexSpec, null);
+assert.eq(indexSpec.v, 2, tojson(indexSpec));
+
+// "create" creates v=1 _id index when "idIndex" has "v" equal to 1.
+db.create_collection.drop();
+assert.commandWorked(
+ db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "_id_", v: 1}}));
+indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
+assert.neq(indexSpec, null);
+assert.eq(indexSpec.v, 1, tojson(indexSpec));
+
+// "create" creates v=2 _id index when "idIndex" has "v" equal to 2.
+db.create_collection.drop();
+assert.commandWorked(
+ db.createCollection("create_collection", {idIndex: {key: {_id: 1}, name: "_id_", v: 2}}));
+indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
+assert.neq(indexSpec, null);
+assert.eq(indexSpec.v, 2, tojson(indexSpec));
+
+// "collation" field of "idIndex" must match collection default collation.
+db.create_collection.drop();
+assert.commandFailedWithCode(
+ db.createCollection("create_collection",
+ {idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "en_US"}}}),
+ ErrorCodes.BadValue);
+
+db.create_collection.drop();
+assert.commandFailedWithCode(db.createCollection("create_collection", {
+ collation: {locale: "fr_CA"},
+ idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "en_US"}}
+}),
+ ErrorCodes.BadValue);
+
+db.create_collection.drop();
+assert.commandFailedWithCode(db.createCollection("create_collection", {
+ collation: {locale: "fr_CA"},
+ idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "simple"}}
+}),
+ ErrorCodes.BadValue);
+
+db.create_collection.drop();
+assert.commandWorked(db.createCollection("create_collection", {
+ collation: {locale: "en_US", strength: 3},
+ idIndex: {key: {_id: 1}, name: "_id_", collation: {locale: "en_US"}}
+}));
+indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
+assert.neq(indexSpec, null);
+assert.eq(indexSpec.collation.locale, "en_US", tojson(indexSpec));
+
+// If "collation" field is not present in "idIndex", _id index inherits collection default
+// collation.
+db.create_collection.drop();
+assert.commandWorked(db.createCollection(
+ "create_collection", {collation: {locale: "en_US"}, idIndex: {key: {_id: 1}, name: "_id_"}}));
+indexSpec = GetIndexHelpers.findByName(db.create_collection.getIndexes(), "_id_");
+assert.neq(indexSpec, null);
+assert.eq(indexSpec.collation.locale, "en_US", tojson(indexSpec));
+
+//
+// Tests the combination of the "capped", "size" and "max" fields in createCollection().
+//
+
+// When "capped" is true, the "size" field needs to be present.
+assert.commandFailedWithCode(db.createCollection('capped_no_size_no_max', {capped: true}),
+ ErrorCodes.InvalidOptions);
+assert.commandFailedWithCode(db.createCollection('capped_no_size', {capped: true, max: 10}),
+ ErrorCodes.InvalidOptions);
+db.no_capped.drop();
+assert.commandWorked(db.createCollection('no_capped'), {capped: false});
+db.capped_no_max.drop();
+assert.commandWorked(db.createCollection('capped_no_max', {capped: true, size: 256}));
+db.capped_with_max_and_size.drop();
+assert.commandWorked(
+ db.createCollection('capped_with_max_and_size', {capped: true, max: 10, size: 256}));
+
+// When the "size" field is present, "capped" needs to be true.
+assert.commandFailedWithCode(db.createCollection('size_no_capped', {size: 256}),
+ ErrorCodes.InvalidOptions);
+assert.commandFailedWithCode(db.createCollection('size_capped_false', {capped: false, size: 256}),
+ ErrorCodes.InvalidOptions);
})();