diff options
Diffstat (limited to 'src/mongo/dbtests/framework.cpp')
-rw-r--r-- | src/mongo/dbtests/framework.cpp | 158 |
1 files changed, 80 insertions, 78 deletions
diff --git a/src/mongo/dbtests/framework.cpp b/src/mongo/dbtests/framework.cpp index d91e7012cea..4b645fd537b 100644 --- a/src/mongo/dbtests/framework.cpp +++ b/src/mongo/dbtests/framework.cpp @@ -61,102 +61,104 @@ namespace moe = mongo::optionenvironment; namespace mongo { - using std::endl; - using std::string; - - namespace dbtests { - - stdx::mutex globalCurrentTestNameMutex; - std::string globalCurrentTestName; - - class TestWatchDog : public BackgroundJob { - public: - virtual string name() const { return "TestWatchDog"; } - virtual void run(){ - - int minutesRunning = 0; - std::string lastRunningTestName, currentTestName; - - { - stdx::lock_guard<stdx::mutex> lk( globalCurrentTestNameMutex ); - lastRunningTestName = globalCurrentTestName; - } - - while (true) { - sleepsecs(60); - minutesRunning++; - - { - stdx::lock_guard<stdx::mutex> lk( globalCurrentTestNameMutex ); - currentTestName = globalCurrentTestName; - } - - if (currentTestName != lastRunningTestName) { - minutesRunning = 0; - lastRunningTestName = currentTestName; - } - - if (minutesRunning > 30){ - log() << currentTestName << " has been running for more than 30 minutes. aborting." << endl; - ::abort(); - } - else if (minutesRunning > 1){ - warning() << currentTestName << " has been running for more than " << minutesRunning-1 << " minutes." << endl; - - // See what is stuck - getGlobalLockManager()->dump(); - } - } - } - }; +using std::endl; +using std::string; - int runDbTests(int argc, char** argv) { - frameworkGlobalParams.perfHist = 1; - frameworkGlobalParams.seed = time( 0 ); - frameworkGlobalParams.runsPerTest = 1; +namespace dbtests { - Client::initThread("testsuite"); +stdx::mutex globalCurrentTestNameMutex; +std::string globalCurrentTestName; - srand( (unsigned) frameworkGlobalParams.seed ); - printGitVersion(); - printOpenSSLVersion(); +class TestWatchDog : public BackgroundJob { +public: + virtual string name() const { + return "TestWatchDog"; + } + virtual void run() { + int minutesRunning = 0; + std::string lastRunningTestName, currentTestName; - getGlobalServiceContext()->initializeGlobalStorageEngine(); + { + stdx::lock_guard<stdx::mutex> lk(globalCurrentTestNameMutex); + lastRunningTestName = globalCurrentTestName; + } - // Initialize the sharding state so we can run starding tests in isolation - shardingState.initialize("$dummy:10000"); + while (true) { + sleepsecs(60); + minutesRunning++; - // Note: ShardingState::initialize also initializes the distLockMgr. - auto distLockMgr = dynamic_cast<LegacyDistLockManager*>( - grid.catalogManager()->getDistLockManager()); - if (distLockMgr) { - distLockMgr->enablePinger(false); + { + stdx::lock_guard<stdx::mutex> lk(globalCurrentTestNameMutex); + currentTestName = globalCurrentTestName; } - TestWatchDog twd; - twd.go(); - - int ret = ::mongo::unittest::Suite::run(frameworkGlobalParams.suites, - frameworkGlobalParams.filter, - frameworkGlobalParams.runsPerTest); + if (currentTestName != lastRunningTestName) { + minutesRunning = 0; + lastRunningTestName = currentTestName; + } + if (minutesRunning > 30) { + log() << currentTestName << " has been running for more than 30 minutes. aborting." + << endl; + ::abort(); + } else if (minutesRunning > 1) { + warning() << currentTestName << " has been running for more than " + << minutesRunning - 1 << " minutes." << endl; - exitCleanly( (ExitCode)ret ); // so everything shuts down cleanly - return ret; + // See what is stuck + getGlobalLockManager()->dump(); + } } - } // namespace dbtests + } +}; + +int runDbTests(int argc, char** argv) { + frameworkGlobalParams.perfHist = 1; + frameworkGlobalParams.seed = time(0); + frameworkGlobalParams.runsPerTest = 1; + + Client::initThread("testsuite"); + + srand((unsigned)frameworkGlobalParams.seed); + printGitVersion(); + printOpenSSLVersion(); + + getGlobalServiceContext()->initializeGlobalStorageEngine(); + + // Initialize the sharding state so we can run starding tests in isolation + shardingState.initialize("$dummy:10000"); + + // Note: ShardingState::initialize also initializes the distLockMgr. + auto distLockMgr = + dynamic_cast<LegacyDistLockManager*>(grid.catalogManager()->getDistLockManager()); + if (distLockMgr) { + distLockMgr->enablePinger(false); + } + + TestWatchDog twd; + twd.go(); + + int ret = ::mongo::unittest::Suite::run(frameworkGlobalParams.suites, + frameworkGlobalParams.filter, + frameworkGlobalParams.runsPerTest); + + + exitCleanly((ExitCode)ret); // so everything shuts down cleanly + return ret; +} +} // namespace dbtests #ifdef _WIN32 namespace ntservice { - bool shouldStartService() { - return false; - } +bool shouldStartService() { + return false; +} } #endif } // namespace mongo -void mongo::unittest::onCurrentTestNameChange( const std::string &testName ) { - stdx::lock_guard<stdx::mutex> lk( mongo::dbtests::globalCurrentTestNameMutex ); +void mongo::unittest::onCurrentTestNameChange(const std::string& testName) { + stdx::lock_guard<stdx::mutex> lk(mongo::dbtests::globalCurrentTestNameMutex); mongo::dbtests::globalCurrentTestName = testName; } |