// dumprestore8.js // This file tests that indexes and capped collection options get properly dumped and restored. // It checks that this works both when doing a full database dump/restore and when doing it just for a single db or collection t = new ToolTest( "dumprestore8" ); t.startDB( "foo" ); db = t.db; dbname = db.getName(); dbname2 = "NOT_"+dbname; db.dropDatabase(); assert.eq( 0 , db.foo.count() , "setup1" ); db.foo.save( { a : 1, b : 1 } ); db.foo.ensureIndex({a:1}); db.foo.ensureIndex({b:1, _id:-1}); assert.eq( 1 , db.foo.count() , "setup2" ); assert.eq( 0 , db.bar.count() , "setup3" ); db.createCollection("bar", {capped:true, size:1000, max:10}); for (var i = 0; i < 1000; i++) { db.bar.save( { x : i } ); } db.bar.ensureIndex({x:1}); barDocCount = db.bar.count(); assert.gt( barDocCount, 0 , "No documents inserted" ); assert.lt( db.bar.count(), 1000 , "Capped collection didn't evict documents" ); assert.eq( 5 , db.foo.getIndexes().length + db.bar.getIndexes().length, "Indexes weren't created right" ); // Full dump/restore t.runTool( "dump" , "--out" , t.ext ); db.dropDatabase(); assert.eq( 0 , db.foo.count() , "foo not dropped" ); assert.eq( 0 , db.bar.count() , "bar not dropped" ); assert.eq( 0 , db.bar.getIndexes().length , "indexes on bar not dropped" ); assert.eq( 0 , db.foo.getIndexes().length , "indexes on foo not dropped" ); t.runTool( "restore" , "--dir" , t.ext ); assert.soon( "db.foo.findOne()" , "no data after sleep" ); assert.eq( 1 , db.foo.count() , "wrong number of docs restored to foo" ); assert.eq( barDocCount, db.bar.count(), "wrong number of docs restored to bar" ); for (var i = 0; i < 10; i++) { db.bar.save({x:i}); } assert.eq( barDocCount, db.bar.count(), "Capped collection didn't evict documents after restore." ); assert.eq( 5 , db.foo.getIndexes().length + db.bar.getIndexes().length, "Indexes weren't created correctly by restore"); // Dump/restore single DB dumppath = t.ext + "singledbdump/"; mkdir(dumppath); t.runTool( "dump" , "-d", dbname, "--out" , dumppath ); db.dropDatabase(); assert.eq( 0 , db.foo.count() , "foo not dropped2" ); assert.eq( 0 , db.bar.count() , "bar not dropped2" ); assert.eq( 0 , db.foo.getIndexes().length , "indexes on foo not dropped2" ); assert.eq( 0 , db.bar.getIndexes().length , "indexes on bar not dropped2" ); t.runTool( "restore" , "-d", dbname2, "--dir" , dumppath + dbname ); db = db.getSiblingDB(dbname2); assert.soon( "db.foo.findOne()" , "no data after sleep 2" ); assert.eq( 1 , db.foo.count() , "wrong number of docs restored to foo 2" ); assert.eq( barDocCount, db.bar.count(), "wrong number of docs restored to bar 2" ); for (var i = 0; i < 10; i++) { db.bar.save({x:i}); } assert.eq( barDocCount, db.bar.count(), "Capped collection didn't evict documents after restore 2." ); assert.eq( 5 , db.foo.getIndexes().length + db.bar.getIndexes().length, "Indexes weren't created correctly by restore 2"); // Dump/restore single collection dumppath = t.ext + "singlecolldump/"; mkdir(dumppath); t.runTool( "dump" , "-d", dbname2, "-c", "bar", "--out" , dumppath ); db.dropDatabase(); assert.eq( 0 , db.bar.count() , "bar not dropped3" ); assert.eq( 0 , db.bar.getIndexes().length , "indexes not dropped3" ); t.runTool( "restore" , "-d", dbname, "-c", "baz", "--dir" , dumppath + dbname2 + "/bar.bson" ); db = db.getSiblingDB(dbname); assert.soon( "db.baz.findOne()" , "no data after sleep 2" ); assert.eq( barDocCount, db.baz.count(), "wrong number of docs restored to bar 2" ); for (var i = 0; i < 10; i++) { db.baz.save({x:i}); } assert.eq( barDocCount, db.baz.count(), "Capped collection didn't evict documents after restore 3." ); assert.eq( 2 , db.baz.getIndexes().length , "Indexes weren't created correctly by restore 3" ); t.stop();