/* * Test renameCollection functionality across different databases. * * @tags: [ * # On sharded cluster primary shard for database can land in different * # shards and rename across different primary shards is not allowed. * assumes_against_mongod_not_mongos, * assumes_no_implicit_index_creation, * # Rename between DBs with different shard primary is not supported * assumes_unsharded_collection, * requires_capped, * requires_collstats, * requires_non_retryable_commands, * uses_rename, * ] */ // Set up namespaces a and b. var db_a = db.getSiblingDB("db_a"); var db_b = db.getSiblingDB("db_b"); var a = db_a.rename7; var b = db_b.rename7; // Ensure that the databases are created db_a.coll.insert({}); db_b.coll.insert({}); a.drop(); b.drop(); // Put some documents and indexes in a. a.save({a: 1}); a.save({a: 2}); a.save({a: 3}); a.createIndex({a: 1}); a.createIndex({b: 1}); assert.commandWorked(db.adminCommand({renameCollection: "db_a.rename7", to: "db_b.rename7"})); assert.eq(0, a.countDocuments({})); assert(db_a.getCollectionNames().indexOf("rename7") < 0); assert.eq(3, b.countDocuments({})); assert(db_b.getCollectionNames().indexOf("rename7") >= 0); a.drop(); b.drop(); // Test that the dropTarget option works when renaming across databases. a.save({}); b.save({}); assert.commandFailed(db.adminCommand({renameCollection: "db_a.rename7", to: "db_b.rename7"})); assert.commandWorked( db.adminCommand({renameCollection: "db_a.rename7", to: "db_b.rename7", dropTarget: true})); a.drop(); b.drop(); // Capped collection testing. db_a.createCollection("rename7_capped", {capped: true, size: 10000}); a = db_a.rename7_capped; b = db_b.rename7_capped; a.save({a: 1}); a.save({a: 2}); a.save({a: 3}); previousMaxSize = assert.commandWorked(a.stats()).maxSize; assert.commandWorked( db.adminCommand({renameCollection: "db_a.rename7_capped", to: "db_b.rename7_capped"})); assert.eq(0, a.countDocuments({})); assert(db_a.getCollectionNames().indexOf("rename7_capped") < 0); assert.eq(3, b.countDocuments({})); assert(db_b.getCollectionNames().indexOf("rename7_capped") >= 0); stats = assert.commandWorked(db_b.rename7_capped.stats()); printjson(stats); assert(stats.capped); assert.eq(previousMaxSize, stats.maxSize); a.drop(); b.drop();