# -*- mode: python -*- # # This SConscript file describes the build rules for smoke tests (scons smoke, # e.g.) import os from buildscripts import utils Import( "has_option env shellEnv testEnv" ) def add_exe( v ): return "${PROGPREFIX}%s${PROGSUFFIX}" % v smokeEnv = testEnv.Clone() smokeEnv['ENV']['PATH']=os.environ['PATH'] # copy in any envrionment variables beginning with MONGO_; these # are used by buildscripts/buildlogger.py for name, value in os.environ.items(): if name.startswith('MONGO_'): smokeEnv['ENV'][name] = value smokeEnv.Alias( "dummySmokeSideEffect", [], [] ) smokeFlags = [] # Ugh. Frobbing the smokeFlags must precede using them to construct # actions, I think. if has_option( 'smokedbprefix'): smokeFlags += ['--smoke-db-prefix', GetOption( 'smokedbprefix')] if 'startMongodSmallOplog' in COMMAND_LINE_TARGETS: smokeFlags += ["--small-oplog"] if has_option('smokeauth'): smokeFlags += ['--auth'] def addTest(name, deps, actions): smokeEnv.Alias( name, deps, actions ) smokeEnv.AlwaysBuild( name ) # Prevent smoke tests from running in parallel smokeEnv.SideEffect( "dummySmokeSideEffect", name ) def addSmoketest( name, deps, extraSmokeArgs=[] ): # Convert from smoke to test, smokeJs to js, and foo to foo target = name if name.startswith("smoke"): if name == "smoke": target = File("test").path else: target = name[5].lower() + name[6:] smokeArgs = smokeFlags + [target] + extraSmokeArgs addTest(name, deps, utils.run_smoke_command(*smokeArgs)) def addSmokeSuite( name, suitefile, needMongod=False ): # Add a smoketest target which invokes smoke.py with # --from-file, and passes the named suitefile as the # command line argument. # resolve an initial # in the suitefile suitefile = str(env.File(suitefile)) smoke_args = ['--mode', 'files', '--from-file', suitefile] if not needMongod: smoke_args.append('--dont-start-mongod') addTest(name, [suitefile], utils.run_smoke_command(*smoke_args)) addSmoketest( "smoke", [ add_exe( "test" ), add_exe( "mongod" ), add_exe( "mongo" ) ] ) addSmoketest( "smokePerf", [ add_exe("perftest") ] ) smokeClientDeps = [ add_exe('firstExample'), add_exe('rsExample'), add_exe('secondExample'), add_exe('whereExample'), add_exe('authTest'), add_exe('httpClientTest'), add_exe('clientTest'), ] if has_option("sharedclient"): smokeClientDeps += [ "sharedclient/" + name for name in smokeClientDeps ] smokeClientDeps += [add_exe('bsondemo')] smokeClientDeps += [add_exe('mongod'), add_exe('mongo')] smokeClient = addSmoketest( "smokeClient", smokeClientDeps ) addSmoketest( "mongosTest", [ add_exe( 'mongos' ) ]) addSmokeSuite( "smokeCppUnittests", "$UNITTEST_LIST" ) addSmokeSuite( "smokeModuleTests", "$MODULETEST_LIST" ) # These tests require the mongo shell if shellEnv is not None: addSmoketest( "smokeJs", [add_exe("mongo"), add_exe("mongod")] ) addSmoketest( "smokeClone", [ add_exe("mongo"), add_exe("mongod") ] ) addSmoketest( "smokeRepl", [ add_exe("mongo"), add_exe("mongod"), add_exe("mongobridge") ] ) addSmoketest( "smokeReplSets", [ add_exe("mongo"), add_exe("mongod"), add_exe("mongobridge") ] ) addSmoketest( "smokeDur", [ add_exe( "mongo" ), add_exe( "mongod" ), add_exe('mongorestore') ] ) addSmoketest( "smokeDisk", [ add_exe( "mongo" ), add_exe( "mongod" ), add_exe( "mongodump" ), add_exe( "mongorestore" ) ] ) addSmoketest( "smokeAuth", [ add_exe( "mongo" ), add_exe( "mongod" ) ] ) addSmoketest( "smokeParallel", [ add_exe( "mongo" ), add_exe( "mongod" ) ] ) addSmoketest( "smokeSharding", [ add_exe("mongo"), add_exe("mongod"), add_exe("mongos"), add_exe('mongofiles') ] ) addSmoketest( "smokeJsPerf", [ add_exe("mongo"), add_exe("mongod") ] ) addSmoketest( "smokeJsSlowNightly", [add_exe("mongo"), add_exe("mongod"), add_exe("mongos") ]) addSmoketest( "smokeJsSlowWeekly", [add_exe("mongo"), add_exe("mongod"), add_exe("mongos") ]) addSmoketest( "smokeQuota", [ add_exe("mongo"), add_exe("mongod") ] ) addSmoketest( "smokeTool", [ add_exe( "mongo" ), add_exe("mongod"), add_exe("mongos"), "tools" ] ) addSmoketest( "smokeAggregation", [ add_exe( "mongo" ), add_exe( "mongod" ), add_exe( "mongos" ) ] ) addSmoketest( "smokeMultiVersion", [ add_exe( "mongo" ), add_exe( "mongod" ), add_exe( "mongos" ) ] ) addSmoketest( "smokeFailPoint", [ add_exe( "mongo" ), add_exe( "mongod" ), add_exe( "mongos" ) ] ) addSmoketest( "smokeSsl", [ add_exe("mongo"), add_exe("mongod"), add_exe("mongos") ], ['--use-ssl'] ) addSmoketest( "smokeFailingTests", [ add_exe( "mongo" ), add_exe( "mongod" ) ], ['--only-old-fails', '--continue-on-failure'] ) addSmoketest( "smokeResetFails", [ add_exe( "mongo" ), add_exe( "mongod" ) ], ['--reset-old-fails'] ) smokeEnv.Alias( "startMongodSmallOplog", [add_exe("mongod")], [] ); smokeEnv.AlwaysBuild( "startMongodSmallOplog" ); smokeEnv.SideEffect( "dummySmokeSideEffect", "startMongodSmallOplog" ) def addMongodReqTargets( env, target, source ): mongodReqTargets = [ "smokeClient", "smokeJs" ] for target in mongodReqTargets: smokeEnv.Depends( target, "startMongod" ) smokeEnv.Depends( "smokeAll", target ) smokeEnv.Alias( "addMongodReqTargets", [], [addMongodReqTargets] ) smokeEnv.AlwaysBuild( "addMongodReqTargets" ) smokeEnv.Alias( "smokeAll", [ "smoke", "mongosTest", "smokeClone", "smokeRepl", "addMongodReqTargets", "smokeDisk", "smokeAuth", "smokeSharding", "smokeTool" ] ) smokeEnv.AlwaysBuild( "smokeAll" ) def addMongodReqNoJsTargets( env, target, source ): mongodReqTargets = [ "smokeClient" ] for target in mongodReqTargets: smokeEnv.Depends( target, "startMongod" ) smokeEnv.Depends( "smokeAllNoJs", target ) smokeEnv.Alias( "addMongodReqNoJsTargets", [], [addMongodReqNoJsTargets] ) smokeEnv.AlwaysBuild( "addMongodReqNoJsTargets" ) smokeEnv.Alias( "smokeAllNoJs", [ "smoke", "mongosTest", "addMongodReqNoJsTargets" ] ) smokeEnv.AlwaysBuild( "smokeAllNoJs" ) def run_shell_tests(env, target, source): from buildscripts import test_shell test_shell.mongo_path = windows and "mongo.exe" or "mongo" test_shell.run_tests() env.Alias("test_shell", [], [run_shell_tests]) env.AlwaysBuild("test_shell")