BOOST_FIXTURE_TEST_CASE(NoPrivilegesSectionsDryRun, TwoValidatorFixture) { const std::string NO_PRIVILEGES_CONFIG = "authorizations\n" "{\n" " authorize\n" " {\n" " certfile \"tests/daemon/mgmt/cert1.ndncert\"\n" " }\n" " authorize\n" " {\n" " certfile \"tests/daemon/mgmt/cert2.ndncert\"\n" " }\n" "}\n"; ConfigFile config; CommandValidator validator; validator.setConfigFile(config); std::stringstream expectedError; expectedError << "No privileges section found for certificate file tests/daemon/mgmt/cert1.ndncert " << "(" << m_tester1.getPublicKeyName().toUri() << ")\n" << "No privileges section found for certificate file tests/daemon/mgmt/cert2.ndncert " << "(" << m_tester2.getPublicKeyName().toUri() << ")"; BOOST_CHECK_EXCEPTION(config.parse(NO_PRIVILEGES_CONFIG, true, CONFIG_PATH.native()), ConfigFile::Error, bind(&validateErrorMessage, expectedError.str(), _1)); }
void _initAndListen(int listenPort, const char *appserverLoc = null) { #if !defined(_WIN32) pid_t pid = 0; pid = getpid(); #else int pid=0; #endif bool is32bit = sizeof(int*) == 4; log() << "Mongo DB : starting : pid = " << pid << " port = " << cmdLine.port << " dbpath = " << dbpath << " master = " << master << " slave = " << (int) slave << " " << ( is32bit ? "32" : "64" ) << "-bit " << endl; show_32_warning(); stringstream ss; ss << "dbpath (" << dbpath << ") does not exist"; massert( ss.str().c_str(), boost::filesystem::exists( dbpath ) ); acquirePathLock(); theFileAllocator().start(); BOOST_CHECK_EXCEPTION( clearTmpFiles() ); clearTmpCollections(); if ( opLogging ) log() << "opLogging = " << opLogging << endl; _oplog.init(); mms.go(); #if 0 { stringstream indexpath; indexpath << dbpath << "/indexes.dat"; RecCache::tempStore.init(indexpath.str().c_str(), BucketSize); } #endif if ( useJNI ) { ScriptEngine::setup(); } repairDatabases(); if ( shouldRepairDatabases ) return; /* this is for security on certain platforms */ srand(curTimeMicros() ^ startupSrandTimer.micros()); listen(listenPort); // listen() will return when exit code closes its socket. while( 1 ) sleepsecs( 100 ); }
BOOST_FIXTURE_TEST_CASE(CreateMulticastFaceV6, UdpFactoryMcastFixture) { #ifdef __linux__ // need superuser privileges to create multicast faces on Linux SKIP_IF_NOT_SUPERUSER(); #endif // __linux__ SKIP_IF_UDP_MCAST_V6_NETIF_COUNT_LT(1); auto multicastFace1 = createMulticastFace("::1", "ff02::114", 20070); auto multicastFace1a = createMulticastFace("::1", "ff02::114", 20070); auto multicastFace2 = createMulticastFace("::1", "ff02::114", 20030); BOOST_CHECK_EQUAL(multicastFace1, multicastFace1a); BOOST_CHECK_NE(multicastFace1, multicastFace2); auto address = findNonLoopbackAddressForMulticastFace(ndn::net::AddressFamily::V6); if (!address.is_unspecified()) { auto multicastFace3 = createMulticastFace(address.to_string(), "ff02::114", 20070); BOOST_CHECK_NE(multicastFace1, multicastFace3); BOOST_CHECK_NE(multicastFace2, multicastFace3); } // create with a local endpoint already used by a channel auto channel = createChannel("::1", 20071); BOOST_CHECK_EXCEPTION(createMulticastFace("::1", "ff02::114", 20071), UdpFactory::Error, [] (const UdpFactory::Error& e) { return strcmp(e.what(), "Cannot create UDP multicast face on [::1]:20071, " "endpoint already allocated for a UDP channel") == 0; }); // create with a local endpoint already used by a multicast face on a different multicast group BOOST_CHECK_EXCEPTION(createMulticastFace("::1", "ff02::42", 20070), UdpFactory::Error, [] (const UdpFactory::Error& e) { return strcmp(e.what(), "Cannot create UDP multicast face on [::1]:20070, " "endpoint already allocated for a different UDP multicast face") == 0; }); }
void _initAndListen(int listenPort, const char *appserverLoc = NULL) { bool is32bit = sizeof(int*) == 4; { #if !defined(_WIN32) pid_t pid = getpid(); #else DWORD pid=GetCurrentProcessId(); #endif Nullstream& l = log(); l << "MongoDB starting : pid=" << pid << " port=" << cmdLine.port << " dbpath=" << dbpath; if( replSettings.master ) l << " master=" << replSettings.master; if( replSettings.slave ) l << " slave=" << (int) replSettings.slave; l << ( is32bit ? " 32" : " 64" ) << "-bit " << endl; } DEV log() << "_DEBUG build (which is slower)" << endl; show_warnings(); log() << mongodVersion() << endl; printGitVersion(); printSysInfo(); { stringstream ss; ss << "dbpath (" << dbpath << ") does not exist"; uassert( 10296 , ss.str().c_str(), boost::filesystem::exists( dbpath ) ); } { stringstream ss; ss << "repairpath (" << repairpath << ") does not exist"; uassert( 12590 , ss.str().c_str(), boost::filesystem::exists( repairpath ) ); } acquirePathLock(); remove_all( dbpath + "/_tmp/" ); theFileAllocator().start(); BOOST_CHECK_EXCEPTION( clearTmpFiles() ); Client::initThread("initandlisten"); _diaglog.init(); clearTmpCollections(); Module::initAll(); #if 0 { stringstream indexpath; indexpath << dbpath << "/indexes.dat"; RecCache::tempStore.init(indexpath.str().c_str(), BucketSize); } #endif if ( useJNI ) { ScriptEngine::setup(); globalScriptEngine->setCheckInterruptCallback( jsInterruptCallback ); } repairDatabases(); /* we didn't want to pre-open all fiels for the repair check above. for regular operation we do for read/write lock concurrency reasons. */ Database::_openAllFiles = true; if ( shouldRepairDatabases ) return; /* this is for security on certain platforms (nonce generation) */ srand((unsigned) (curTimeMicros() ^ startupSrandTimer.micros())); snapshotThread.go(); clientCursorMonitor.go(); if( !cmdLine._replSet.empty() ) { replSet = true; ReplSetCmdline *replSetCmdline = new ReplSetCmdline(cmdLine._replSet); boost::thread t( boost::bind( &startReplSets, replSetCmdline) ); } listen(listenPort); // listen() will return when exit code closes its socket. exitCleanly(EXIT_NET_ERROR); }
void FileAllocator::run( FileAllocator * fa ) { setThreadName( "FileAllocator" ); while( 1 ) { { scoped_lock lk( fa->_pendingMutex ); if ( fa->_pending.size() == 0 ) fa->_pendingUpdated.wait( lk.boost() ); } while( 1 ) { string name; long size; { scoped_lock lk( fa->_pendingMutex ); if ( fa->_pending.size() == 0 ) break; name = fa->_pending.front(); size = fa->_pendingSize[ name ]; } string tmp; try { log() << "allocating new datafile " << name << ", filling with zeroes..." << endl; boost::filesystem::path parent = ensureParentDirCreated(name); tmp = makeTempFileName( parent ); ensureParentDirCreated(tmp); long fd = open(tmp.c_str(), O_CREAT | O_RDWR | O_NOATIME, S_IRUSR | S_IWUSR); if ( fd <= 0 ) { log() << "FileAllocator: couldn't create " << name << " (" << tmp << ") " << errnoWithDescription() << endl; uasserted(10439, ""); } #if defined(POSIX_FADV_DONTNEED) if( posix_fadvise(fd, 0, size, POSIX_FADV_DONTNEED) ) { log() << "warning: posix_fadvise fails " << name << " (" << tmp << ") " << errnoWithDescription() << endl; } #endif Timer t; /* make sure the file is the full desired length */ ensureLength( fd , size ); close( fd ); if( rename(tmp.c_str(), name.c_str()) ) { log() << "error: couldn't rename " << tmp << " to " << name << ' ' << errnoWithDescription() << endl; uasserted(13653, ""); } flushMyDirectory(name); log() << "done allocating datafile " << name << ", " << "size: " << size/1024/1024 << "MB, " << " took " << ((double)t.millis())/1000.0 << " secs" << endl; // no longer in a failed state. allow new writers. fa->_failed = false; } catch ( ... ) { log() << "error failed to allocate new file: " << name << " size: " << size << ' ' << errnoWithDescription() << endl; log() << " will try again in 10 seconds" << endl; try { if ( tmp.size() ) BOOST_CHECK_EXCEPTION( boost::filesystem::remove( tmp ) ); BOOST_CHECK_EXCEPTION( boost::filesystem::remove( name ) ); } catch ( ... ) { } scoped_lock lk( fa->_pendingMutex ); fa->_failed = true; // not erasing from pending fa->_pendingUpdated.notify_all(); sleepsecs(10); continue; } { scoped_lock lk( fa->_pendingMutex ); fa->_pendingSize.erase( name ); fa->_pending.pop_front(); fa->_pendingUpdated.notify_all(); } } } }