diff options
author | Misha Tyulenev <misha@mongodb.com> | 2015-12-10 11:14:00 -0500 |
---|---|---|
committer | Misha Tyulenev <misha@mongodb.com> | 2015-12-10 15:09:50 -0500 |
commit | ea913733299778790e3a89e630a716ec7058c3a9 (patch) | |
tree | 64369b1d1b0821865922191ac727633df2cc5f84 /jstests/sharding/shard_collection_basic.js | |
parent | aa77f50235503a1c3c4883244ed9d805412c10fe (diff) | |
download | mongo-ea913733299778790e3a89e630a716ec7058c3a9.tar.gz |
SERVER-21134 add basic tests for shardCollection command
Diffstat (limited to 'jstests/sharding/shard_collection_basic.js')
-rw-r--r-- | jstests/sharding/shard_collection_basic.js | 181 |
1 files changed, 181 insertions, 0 deletions
diff --git a/jstests/sharding/shard_collection_basic.js b/jstests/sharding/shard_collection_basic.js new file mode 100644 index 00000000000..50e5a45bddf --- /dev/null +++ b/jstests/sharding/shard_collection_basic.js @@ -0,0 +1,181 @@ +// +// Basic tests for shardCollection. +// + +(function() { +'use strict'; + +var st = new ShardingTest({mongos:1, shards:2}); +var kDbName = 'db'; +var mongos = st.s0; + +function testAndClenaupWithKeyNoIndexFailed(keyDoc) { + assert.commandWorked(mongos.adminCommand({enableSharding : kDbName})); + + var ns = kDbName + '.foo'; + assert.commandFailed(mongos.adminCommand({ + shardCollection: ns, + key: keyDoc + })); + + assert.eq(mongos.getDB('config').collections.count({_id: ns, dropped: false}), 0); + mongos.getDB(kDbName).dropDatabase(); +} + +function testAndClenaupWithKeyOK(keyDoc) { + assert.commandWorked(mongos.adminCommand({enableSharding : kDbName})); + assert.commandWorked(mongos.getDB(kDbName).foo.createIndex(keyDoc)); + + var ns = kDbName + '.foo'; + assert.eq(mongos.getDB('config').collections.count({_id: ns, dropped: false}), 0); + + assert.commandWorked(mongos.adminCommand({ + shardCollection: ns, + key: keyDoc + })); + + assert.eq(mongos.getDB('config').collections.count({_id: ns, dropped: false}), 1); + mongos.getDB(kDbName).dropDatabase(); +} + +function testAndClenaupWithKeyNoIndexOK(keyDoc) { + assert.commandWorked(mongos.adminCommand({enableSharding : kDbName})); + + var ns = kDbName + '.foo'; + assert.eq(mongos.getDB('config').collections.count({_id: ns, dropped: false}), 0); + + assert.commandWorked(mongos.adminCommand({ + shardCollection: ns, + key: keyDoc + })); + + assert.eq(mongos.getDB('config').collections.count({_id: ns, dropped: false}), 1); + mongos.getDB(kDbName).dropDatabase(); +} + +// Fail if db is not sharded. +assert.commandFailed(mongos.adminCommand({ shardCollection: kDbName + '.foo', key: {_id:1} })); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); + +// Fail if db is not sharding enabled. +assert.commandFailed(mongos.adminCommand({ shardCollection: kDbName + '.foo', key: {_id:1} })); + +assert.commandWorked(mongos.adminCommand({enableSharding : kDbName})); + +// Verify wrong arguments errors. +assert.commandFailed(mongos.adminCommand({ shardCollection: 'foo', key: {_id:1} })); + +assert.commandFailed( + mongos.adminCommand({ shardCollection: 'foo', key: "aaa" }) +); + +// shardCollection may only be run against admin database. +assert.commandFailed( + mongos.getDB('test').runCommand({ shardCollection: kDbName + '.foo', key: {_id:1} })); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); +// Can't shard if key is not specified. +assert.commandFailed(mongos.adminCommand({ + shardCollection: kDbName + '.foo' })); + +assert.commandFailed(mongos.adminCommand({ + shardCollection: kDbName + '.foo', + key: {} +})); + +// Verify key format +assert.commandFailed(mongos.adminCommand({ + shardCollection: kDbName + '.foo', + key: {aKey: "hahahashed"} +})); + +// Error if a collection is already sharded. +assert.commandWorked(mongos.adminCommand({ + shardCollection: kDbName + '.foo', + key: {_id:1} +})); + +assert.commandFailed(mongos.adminCommand({ shardCollection: kDbName + '.foo', key: {_id:1} })); + +mongos.getDB(kDbName).dropDatabase(); + +// Shard empty collections no index required. +testAndClenaupWithKeyNoIndexOK({_id:1}); +testAndClenaupWithKeyNoIndexOK({_id:'hashed'}); + +// Shard by a plain key. +testAndClenaupWithKeyNoIndexOK({a:1}); + +// Cant shard collection with data and no index on the shard key. +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); +testAndClenaupWithKeyNoIndexFailed({a:1}); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); +testAndClenaupWithKeyOK({a:1}); + +// Shard by a hashed key. +testAndClenaupWithKeyNoIndexOK({a:'hashed'}); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); +testAndClenaupWithKeyNoIndexFailed({a:'hashed'}); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); +testAndClenaupWithKeyOK({a:'hashed'}); + +// Shard by a compound key. +testAndClenaupWithKeyNoIndexOK({x:1, y:1}); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({x: 1, y: 1})); +testAndClenaupWithKeyNoIndexFailed({x:1, y:1}); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({x: 1, y: 1})); +testAndClenaupWithKeyOK({x:1, y:1}); + +testAndClenaupWithKeyNoIndexFailed({x:'hashed', y:1}); +testAndClenaupWithKeyNoIndexFailed({x:'hashed', y:'hashed'}); + +// Shard by a key component. +testAndClenaupWithKeyOK({'z.x':1}); +testAndClenaupWithKeyOK({'z.x':'hashed'}); + +// Can't shard by a multikey. +assert.commandWorked(mongos.getDB(kDbName).foo.createIndex({a:1})); +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: [1,2,3,4,5], b:1})); +testAndClenaupWithKeyNoIndexFailed({a:1}); + +assert.commandWorked(mongos.getDB(kDbName).foo.createIndex({a:1, b:1})); +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: [1,2,3,4,5], b:1})); +testAndClenaupWithKeyNoIndexFailed({a:1, b:1}); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); +testAndClenaupWithKeyNoIndexFailed({a:'hashed'}); + +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: 1, b: 1})); +testAndClenaupWithKeyOK({a:'hashed'}); + +// Cant shard by a parallel arrays. +assert.writeOK(mongos.getDB(kDbName).foo.insert({a: [1,2,3,4,5], b: [1,2,3,4,5]})); +testAndClenaupWithKeyNoIndexFailed({a:1, b:1}); + +assert.commandWorked(mongos.adminCommand({enableSharding : kDbName})); + +// Can't shard on unique hashed key. +assert.commandFailed(mongos.adminCommand({ + shardCollection: kDbName + '.foo', + key: {aKey:"hashed"}, + unique: true +})); + +// If shardCollection has unique:true it must have a unique index. +assert.commandWorked(mongos.getDB(kDbName).foo.createIndex({aKey:1})); + +assert.commandFailed(mongos.adminCommand({ + shardCollection: kDbName + '.foo', + key: {aKey:1}, + unique: true +})); + +st.stop(); + +})() |