Files
mongo/jstests/multiVersion/multi_version_sharding_passthrough.js
2012-08-03 17:19:39 -04:00

390 lines
11 KiB
JavaScript

//
// Runs most sharding passthrough tests using different kinds of multi-version clusters
//
var testsToIgnore = [ /dbadmin/,
/error1/,
/features1/,
/fsync/,
/fsync2/,
/geo.*/,
/indexh/,
/remove5/,
/update4/,
/loglong/,
/logpath/,
/notablescan/,
/compact.*/,
/check_shard_index/,
/bench_test.*/,
/mr_replaceIntoDB/,
/mr_auth/,
/queryoptimizera/,
/features2/ ]
var testsThatAreBuggy = [ /apply_ops1/,
/count5/,
/cursor8/,
/or4/,
/shellkillop/,
/update4/,
/profile\d*/,
/error3/,
/capped.*/,
/apitest_db/,
/cursor6/,
/copydb-auth/,
/profile\d*/,
/dbhash/,
/median/,
/apitest_dbcollection/,
/evalb/,
/evald/,
/eval_nolock/,
/auth1/,
/auth2/,
/dropdb_race/,
/unix_socket\d*/ ]
function shouldRunTest( testFile, exceptPatterns ){
if( /[\/\\]_/.test( testFile.name ) || // underscore tests
! /\.js$/.test( testFile.name ) ) // isn't a .js file
{
print( " >>>>>>>> skipping " + testFile.name )
return false
}
var testName = testFile.name.replace( /\.js$/, "" )
var testSuffixAt = Math.max( testName.lastIndexOf( "/" ), testName.lastIndexOf( "\\" ) )
if( testSuffixAt >= 0 ) testName = testName.substring( testSuffixAt + 1 )
for( var i = 0; i < testsToIgnore.length; i++ ){
if( ! testsToIgnore[ i ].test( testName ) ) continue
print( " >>>>>>>>> skipping test that would correctly fail under sharding "
+ testName )
return false
}
for( var i = 0; i < testsThatAreBuggy.length; i++ ){
if( ! testsThatAreBuggy[ i ].test( testName ) ) continue
print( " !!!!!!!!!! skipping test that has failed under sharding but might not anymore "
+ testName )
return false
}
if( exceptPatterns ){
// Convert to array if not
if( exceptPatterns.test ) exceptPatterns = [ exceptPatterns ]
for( var i = 0; i < exceptPatterns.length; i++ ){
if( ! exceptPatterns[ i ].test( testName ) ) continue
print( " >>>>>>> skipping test that will fail due to a custom multi-version setup "
+ testName )
return false
}
}
return true
}
var runMultiVersionTest = function( opts ){
var oldOpts = {}
oldOpts.mongosOptions = ShardingTest.mongosOptions
oldOpts.rsOptions = ShardingTest.rsOptions
oldOpts.shardOptions = ShardingTest.shardOptions
oldOpts.configOptions = ShardingTest.configOptions
// Setup version context
Object.extend( ShardingTest, opts )
var st = new ShardingTest({ name : "sharding_mv_passthrough",
shards : 2,
verbose : 0,
mongos : 1 })
// Needed for some legacy tests
var oldMyShardingTest = typeof( myShardingTest ) == 'undefined' ? undefined : myShardingTest
myShardingTest = st
// End legacy
st.s.getDB( "admin" ).runCommand({ enableSharding : "test" })
// Setup db variable context
db = st.s.getDB( "test" )
db.shardedPassthrough = true
var files = listFiles( "jstests" )
var errors = []
files.forEach( function( testFile ){
if( ! shouldRunTest( testFile, opts.exceptPatterns ) ) return
print( " *******************************************" )
print( " Test : " + testFile.name + " ..." )
try {
print( " " + Date.timeFunc(
function() {
load( testFile.name );
}, 1) + "ms" ) // end print
}
catch( e ){
if( ! opts.continueOnError ) throw e
print( "Caught error : " )
printjson( e )
errors.push( e )
}
})
st.stop()
// Reset version context
myShardingTest = oldMyShardingTest
Object.extend( ShardingTest, oldOpts )
return errors
}
//
// ACTUAL TESTS TO BE RUN
//
//
// Run multi-version tests of 2.0/2.2 mongos/mongod tests
//
/*
jsTest.log( "Running single version 2.2 mongod/mongos passthrough tests..." )
runMultiVersionTest({
shardOptions : { binVersion : "latest" },
rsOptions : { binVersion : "latest" },
mongosOptions : { binVersion : "latest" },
configOptions : { binVersion : "latest" } })
*/
// List of tests not working in 2.0.6
// git diff <rev1>..<rev2> --summary jstests/ |\
// sed 's/.*jstests\/\(.*\)\.js/\/\^\1\$\/,/' |\
// egrep -v "\/.*\/.*\/" | egrep "^\/"
// Tests added to v2.2
var v22Only = [ /^all3$/,
/^all4$/,
/^all5$/,
/^arrayfind6$/,
/^arrayfind7$/,
/^arrayfind8$/,
/^arrayfind9$/,
/^arrayfinda$/,
/^basicc$/,
/^bench_test3$/,
/^bulk_insert$/,
/^capped_empty$/,
/^capped_server2639$/,
/^compact_speed_test$/,
/^count6$/,
/^count7$/,
/^count8$/,
/^count9$/,
/^counta$/,
/^countb$/,
/^coveredIndex3$/,
/^coveredIndex4$/,
/^coveredIndex5$/,
/^currentop$/,
/^db$/,
/^elemMatchProjection$/,
/^existsa$/,
/^explain4$/,
/^explain5$/,
/^explain6$/,
/^explain7$/,
/^explain8$/,
/^explain9$/,
/^explaina$/,
/^explainb$/,
/^find9$/,
/^find_and_modify_server6226$/,
/^find_and_modify_server6254$/,
/^find_and_modify_where$/,
/^finda$/,
/^geo_max$/,
/^geo_multikey0$/,
/^geo_multikey1$/,
/^geo_uniqueDocs2$/,
/^geo_update3$/,
/^geo_update_btree$/,
/^geo_update_btree2$/,
/^geog$/,
/^gle_shell_server5441$/,
/^hashindex1$/,
/^hashtest1$/,
/^hostinfo$/,
/^inb$/,
/^index12$/,
/^indexx$/,
/^indexy$/,
/^indexz$/,
/^jni1$/,
/^jni2$/,
/^jni3$/,
/^jni4$/,
/^jni5$/,
/^jni7$/,
/^jni8$/,
/^jni9$/,
/^js1$/,
/^js2$/,
/^js3$/,
/^js4$/,
/^js5$/,
/^js7$/,
/^js8$/,
/^js9$/,
/^loglong$/,
/^logpath$/,
/^median$/,
/^memory$/,
/^mr_noscripting$/,
/^nin2$/,
/^numberlong4$/,
/^oro$/,
/^orp$/,
/^orq$/,
/^orr$/,
/^padding$/,
/^profile4$/,
/^queryoptimizer10$/,
/^queryoptimizer4$/,
/^queryoptimizer5$/,
/^queryoptimizer8$/,
/^queryoptimizer9$/,
/^queryoptimizerb$/,
/^regex_util$/,
/^regexb$/,
/^remove10$/,
/^removea$/,
/^removeb$/,
/^removec$/,
/^rename5$/,
/^rename_stayTemp$/,
/^server1470$/,
/^server5346$/,
/^shelltypes$/,
/^showdiskloc$/,
/^sortb$/,
/^sortc$/,
/^sortd$/,
/^sorte$/,
/^sortf$/,
/^sortg$/,
/^sorth$/,
/^sorti$/,
/^sortj$/,
/^sortk$/,
/^sortl$/,
/^sortm$/,
/^update_arraymatch7$/,
/^updateh$/,
/^updatei$/,
/^updatej$/,
/^updatek$/,
/^use_power_of_2$/,
/^useindexonobjgtlt$/,
/^where4$/,
]
// Edited in v22
v22Only.push( /^array4$/ )
v22Only.push( /^queryoptimizer7$/ )
v22Only.push( /^update_blank1$/ )
v22Only.push( /^mr2$/ )
v22Only.push( /^query1$/ )
v22Only.push( /^updatee$/ )
v22Only.push( /^orf$/ )
v22Only.push( /^pull$/ )
v22Only.push( /^pullall$/ )
v22Only.push( /^update_addToSet$/ )
v22Only.push( /^not2$/ )
v22Only.push( /^index_diag$/ )
v22Only.push( /^find_and_modify4$/ )
v22Only.push( /^update6$/ )
v22Only.push( /^indexp$/ )
v22Only.push( /^index_elemmatch1$/ )
v22Only.push( /^splitvector$/ )
// TODO
// mr_merge2 - causes segfault?
jsTest.log( "Running multi-version 2.0/2.2 mongod/mongos passthrough tests..." )
var errors = []
errors = errors.concat(
runMultiVersionTest({
shardOptions : { binVersion : "2.0.6" },
rsOptions : { binVersion : "2.0.6" },
mongosOptions : { binVersion : "latest" },
configOptions : { binVersion : "2.0.6" },
exceptPatterns : v22Only,
continueOnError : true })
)
//
// Run multi-version passthrough for 2.2/2.0 mongod/mongos
//
v22Only.push( /.*auth.*/ ) // Can't run auth tests
jsTest.log( "Running multi-version 2.2/2.0 mongod/mongos passthrough tests..." )
errors = errors.concat(
runMultiVersionTest({
shardOptions : { binVersion : "latest" },
rsOptions : { binVersion : "latest" },
mongosOptions : { binVersion : "2.0.6" },
configOptions : { binVersion : "latest" },
exceptPatterns : v22Only,
continueOnError : true })
)
/*
runMultiVersionTest({
shardOptions : { binVersion : [ "2.0.6", "latest" ] },
rsOptions : { binVersion : [ "2.0.6", "latest" ] },
mongosOptions : { binVersion : [ "2.0.6", "latest" ] },
configOptions : { binVersion : [ "2.0.6", "latest" ] },
exceptPatterns : v22Only,
continueOnError : false })
*/
jsTest.log( "Finished all multi-version tests..." )
if( errors.length > 0 ){
printjson( errors )
throw errors
}