43 lines
1.5 KiB
JavaScript
43 lines
1.5 KiB
JavaScript
// Test that the shardCollection command fails when a preexisting document lacks a shard key field.
|
|
// SERVER-8772
|
|
(function() {
|
|
'use strict';
|
|
|
|
var st = new ShardingTest({shards: 1});
|
|
|
|
var db = st.s.getDB('testDb');
|
|
var coll = db.testColl;
|
|
|
|
assert.writeOK(coll.insert({x: 1, z: 1}));
|
|
assert.writeOK(coll.insert({y: 1, z: 1}));
|
|
|
|
assert.commandWorked(db.adminCommand({enableSharding: 'testDb'}));
|
|
|
|
/**
|
|
* Assert that the shardCollection command fails, with a preexisting index on the provided
|
|
* 'shardKey'.
|
|
*/
|
|
function assertInvalidShardKey(shardKey) {
|
|
// Manually create a shard key index.
|
|
coll.dropIndexes();
|
|
coll.ensureIndex(shardKey);
|
|
|
|
// Ensure that the shard key index identifies 'x' as present in one document and absent in
|
|
// the other.
|
|
assert.eq(1, coll.find({x: 1}).hint(shardKey).itcount());
|
|
assert.eq(1, coll.find({x: {$exists: false}}).hint(shardKey).itcount());
|
|
|
|
// Assert that the shardCollection command fails with the provided 'shardKey'.
|
|
assert.commandFailed(db.adminCommand({shardCollection: 'testDb.testColl', key: shardKey}),
|
|
'shardCollection should have failed on key ' + tojson(shardKey));
|
|
}
|
|
|
|
// Test single, compound, and hashed shard keys.
|
|
assertInvalidShardKey({x: 1});
|
|
assertInvalidShardKey({x: 1, y: 1});
|
|
assertInvalidShardKey({y: 1, x: 1});
|
|
assertInvalidShardKey({x: 'hashed'});
|
|
|
|
st.stop();
|
|
})();
|