diff options
Diffstat (limited to 'src/mongo/gotools/test/qa-tests/jstests/export/force_table_scan.js')
-rw-r--r-- | src/mongo/gotools/test/qa-tests/jstests/export/force_table_scan.js | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/src/mongo/gotools/test/qa-tests/jstests/export/force_table_scan.js b/src/mongo/gotools/test/qa-tests/jstests/export/force_table_scan.js new file mode 100644 index 00000000000..5076e476f45 --- /dev/null +++ b/src/mongo/gotools/test/qa-tests/jstests/export/force_table_scan.js @@ -0,0 +1,111 @@ +(function() { + + if (typeof getToolTest === "undefined") { + load('jstests/configs/plain_28.config.js'); + } + + // Tests running mongoexport with --forceTableScan specified. + + jsTest.log('Testing exporting with --forceTableScan'); + + var toolTest = getToolTest('force_table_scan'); + var commonToolArgs = getCommonToolArguments(); + + // the export target + var exportTarget = 'force_table_scan_export.json'; + removeFile(exportTarget); + + // the db and collection we'll use + var testDB = toolTest.db.getSiblingDB('test'); + var testColl = testDB.data; + + // insert some data + for (var i = 0; i < 50; i++) { + testColl.insert({_id: i}); + } + // sanity check the insertion worked + assert.eq(50, testColl.count()); + + // set the profiling level to high, so that + // we can inspect all queries + assert.eq(1, testDB.setProfilingLevel(2).ok); + + // the profiling collection + var profilingColl = testDB.system.profile; + + // run mongoexport without --forceTableScan + var ret = toolTest.runTool.apply(toolTest, ['export', + '--out', exportTarget, + '--db', 'test', + '--collection', 'data'] + .concat(commonToolArgs)); + assert.eq(0, ret); + + // grab the query from the profiling collection + var queries = profilingColl.find({op: 'query', ns: 'test.data'}).toArray(); + + // there should only be one query so far, and it should have snapshot set + assert.eq(1, queries.length); + assert.eq(true, queries[0].query.$snapshot || queries[0].query.snapshot); + + // remove the export file + removeFile(exportTarget); + + // run mongoexport again, with --forceTableScan + ret = toolTest.runTool.apply(toolTest, ['export', + '--out', exportTarget, + '--db', 'test', + '--collection', 'data', + '--forceTableScan'] + .concat(commonToolArgs)); + assert.eq(0, ret); + + // grab the queries again + queries = profilingColl.find({op: 'query', ns: 'test.data'}).sort({ts: 1}).toArray(); + + // there should be two queries, and the second one should not + // have snapshot set + assert.eq(2, queries.length); + assert(!queries[1].query['$snapshot']); + + // wipe the collection + testColl.remove({}); + + // import the data back in + ret = toolTest.runTool.apply(toolTest, ['import', + '--file', exportTarget, + '--db', 'test', + '--collection', 'data'] + .concat(commonToolArgs)); + assert.eq(0, ret); + + // make sure that the export with --forceTableScan exported the correct data + assert.eq(50, testColl.count()); + for (i = 0; i < 50; i++) { + assert.eq(1, testColl.count({_id: i})); + } + + // remove the export file + removeFile(exportTarget); + + // run mongoexport again, without --forceTableScan but with --sort. --forceTableScan + // should be implicitly set + ret = toolTest.runTool.apply(toolTest, ['export', + '--out', exportTarget, + '--db', 'test', + '--collection', 'data', + '--sort', '{_id:1}'] + .concat(commonToolArgs)); + assert.eq(0, ret); + + // grab the queries again + queries = profilingColl.find({op: 'query', ns: 'test.data'}).sort({ts: 1}).toArray(); + + // there should be 3 queries, and the last one should not have snapshot set + assert.eq(3, queries.length); + assert(!queries[2].query.$snapshot); + + // success + toolTest.stop(); + +}()); |