Example #1
0
	static std::string create_init_string(const Configurator& config)
	{
			return std::string("amqp:tcp:")
						+ config.host()
						+ ":"
						+ std::to_string(config.port());
	}
Example #2
0
// Check that when we specify a conf directory on the command line,
// we load values from the config file first and then the command line
TEST_WITH_WORKDIR(ConfiguratorTest, CommandLineConfFlag)
{
  if (mkdir("bin", 0755) != 0)
    FAIL() << "Failed to create directory bin";
  if (mkdir("conf2", 0755) != 0)
    FAIL() << "Failed to create directory conf2";
  ofstream file("conf2/mesos.conf");
  file << "a=1\n";
  file << "b=2\n";
  file << "c=3";
  file.close();

  const int ARGC = 4;
  char* argv[ARGC];
  argv[0] = (char*) "bin/filename";
  argv[1] = (char*) "--conf=conf2";
  argv[2] = (char*) "--b=overridden";
  argv[3] = (char*) "--d=fromCmdLine";

  Configurator conf;
  EXPECT_NO_THROW( conf.load(ARGC, argv) );

  EXPECT_EQ("1",           conf.getConfiguration()["a"]);
  EXPECT_EQ("overridden",  conf.getConfiguration()["b"]);
  EXPECT_EQ("3",           conf.getConfiguration()["c"]);
  EXPECT_EQ("fromCmdLine", conf.getConfiguration()["d"]);
}
Example #3
0
int main(int argc, char *argv[]) {
    QGuiApplication* app = SailfishApp::application(argc, argv);
    QQuickView* view = SailfishApp::createView();

    Configurator config;
    config.load();

    //qmlRegisterType<Request>("Sailbook.Request", 1, 0, "Request");
    qmlRegisterUncreatableType<Request>("App.Sailbook", 1, 0, "Request", QStringLiteral("Error"));
    //qmlRegisterInterface<SessionManager>("SessionManager");

    SessionManager session(QStringLiteral(APPID), config.getValue(QStringLiteral("token")).toString());
    session.setExtendedPermission(SessionManager::ExtendedPermissions(
        SessionManager::Email |
        SessionManager::ManageNotifications |
        SessionManager::ManagePages |
        SessionManager::PublishActions |
        SessionManager::ReadFriendList |
        SessionManager::ReadInsights |
        SessionManager::ReadMailbox |
        SessionManager::ReadPageMailboxes |
        SessionManager::ReadStream |
        SessionManager::RsvpEvent
    ));

    session.setUserDataPermission(SessionManager::UserDataPermissions(
        SessionManager::UserAboutMe |
        SessionManager::UserActionsBooks |
        SessionManager::UserActionsMusic |
        SessionManager::UserActionsNews |
        SessionManager::UserActionsVideo |
        SessionManager::UserActivities |
        SessionManager::UserBirthday |
        SessionManager::UserEducationHistory |
        SessionManager::UserEvents |
        SessionManager::UserFriends |
        SessionManager::UserGamesActivity |
        SessionManager::UserGroups |
        SessionManager::UserHometown |
        SessionManager::UserInterests |
        SessionManager::UserLikes |
        SessionManager::UserLocation |
        SessionManager::UserPhotos |
        SessionManager::UserRelationshipDetails |
        SessionManager::UserRelationships |
        SessionManager::UserReligionPolitics |
        SessionManager::UserStatus |
        SessionManager::UserTaggedPlaces |
        SessionManager::UserVideos |
        SessionManager::UserWebsite |
        SessionManager::UserWorkHistory
    ));

    view->rootContext()->setContextProperty("SessionManager", &session);
    view->rootContext()->setContextProperty("Configurator", &config);
    view->setSource(SailfishApp::pathTo("qml/sailbook.qml"));
    view->show();

    return app->exec();
}
Example #4
0
// Check that spaces before and after the = signs in config files are ignored
TEST_WITH_WORKDIR(ConfiguratorTest, ConfigFileSpacesIgnored)
{
  if (mkdir("conf", 0755) != 0)
    FAIL() << "Failed to create directory conf";
  ofstream file("conf/mesos.conf");
  file << "test1=coffee # beans are tasty\n";
  file << "# just a comment\n";
  file << "  \t # comment with spaces in front\n";
  file << "\n";
  file << "test2 =tea\n";
  file << "test3=  water\n";
  file << "   test4 =  milk\n";
  file << "  test5 =  hot  chocolate\t\n";
  file << "\ttest6 =  juice# #\n";
  file.close();

  Configurator conf;
  setenv("MESOS_CONF", "conf", 1);
  EXPECT_NO_THROW(conf.load());
  unsetenv("MESOS_CONF");

  EXPECT_EQ("coffee",         conf.getConfiguration()["test1"]);
  EXPECT_EQ("tea",            conf.getConfiguration()["test2"]);
  EXPECT_EQ("water",          conf.getConfiguration()["test3"]);
  EXPECT_EQ("milk",           conf.getConfiguration()["test4"]);
  EXPECT_EQ("hot  chocolate", conf.getConfiguration()["test5"]);
  EXPECT_EQ("juice",          conf.getConfiguration()["test6"]);
}
int main(int argc, char *argv[])
{
    Configurator configurator;
    try {
        configurator.parseParams(argc, argv);
    } catch(const ParseError &e) {
        std::cerr << e.getMessage() << '\n'
                << "См. " << configurator.programName() << " --help" << std::endl;
        return 1;
    }

    if (configurator.needHelp()) {
        std::cout << configurator.help() << std::endl;
        return 0;
    }

    // чтобы программа запускалась в Qt Creator, сделай в папке, которую создаёт Creator такую штуку
    // ln -s ../#{папка_с_текущим_проектом}/handbook.cnf .

    srand(time(NULL));
    try {
        Runner runner(configurator);
        runner.run();
    } catch(const ParseError &e) {
        std::cerr << e.getMessage() << std::endl;
        return 1;
    }

    return 0;
}
Example #6
0
bool Steering::loadConfig(std::string configFile)
{
	std::string configFileFullPath = getConcatenatedPath(configFile, "SteeringModuleConfiguration");
	printd(INFO, "Steering::loadConfig(): Loading configuration file %s\n",
			configFileFullPath.c_str());

	ConfigurationReader *cfgReader = new UfoXmlConfigurationReader( configFileFullPath );

	Configurator *cfg = cfgReader->readConfig();

	// we don't need the cfgReader any more:
	delete cfgReader;

	if ( cfg == 0 )
	{
		printd(ERROR, "Steering::loadConfig(): readConfig() failed!\n");
		return false;
	}

	if ( ! cfg->bind() )
	{
		printd(ERROR, "Steering::loadConfig(): bind() failed!\n");
		cfg->print();
		return false;
	}
	// Configurator is no longer needed:
	delete cfg;
	printd(INFO,"Steering::loadConfig(): configuration has %d Flocks and %d independent Pilots.\n"
			, UfoDB::the()->getFlocks().size(), UfoDB::the()->getPilots().size());
	return true;
}
Example #7
0
File: main.cpp Project: benh/twesos
int main (int argc, char **argv)
{
  Configurator conf;
  conf.addOption<int>("port", 'p', "Port to listen on", 5050);
  conf.addOption<string>("ip", "IP address to listen on");
  local::registerOptions(&conf);

  if (argc == 2 && string("--help") == argv[1]) {
    usage(argv[0], conf);
    exit(1);
  }

  Params params;
  try {
    params = conf.load(argc, argv, true);
  } catch (ConfigurationException& e) {
    cerr << "Configuration error: " << e.what() << endl;
    exit(1);
  }

  Logging::init(argv[0], params);

  if (params.contains("port"))
    setenv("LIBPROCESS_PORT", params["port"].c_str(), 1);

  if (params.contains("ip"))
    setenv("LIBPROCESS_IP", params["ip"].c_str(), 1);

  const PID &master = local::launch(params, false);

  Process::wait(master);

  return 0;
}
Example #8
0
TEST(ConfiguratorTest, Environment)
{
  setenv("MESOS_TEST", "working", true);
  Configurator conf;
  conf.load();
  unsetenv("MESOS_TEST");

  EXPECT_EQ("working", conf.getConfiguration()["test"]);
}
Example #9
0
void Configurator::LogHandler(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
    QByteArray localMsg = msg.toLocal8Bit();
    QString stringMsg;
    QString fullFileName(context.file);
    QString file;
    int lastPathSeparatorIndex = fullFileName.lastIndexOf(QDir::separator());
    if (lastPathSeparatorIndex)
        file = fullFileName.right(fullFileName.size() - lastPathSeparatorIndex - 1);
    else
        file = fullFileName;

    QTextStream stream(&stringMsg);
    switch (type) {
    case QtDebugMsg:
        stream << context.category << ".DEBUG:  " << localMsg.constData() << " "  << " in "
               << file << " " << context.line << endl;
        break;
    case QtWarningMsg:
        stream << context.category << ".WARNING:  " << localMsg.constData() <<  context.function
               <<  " " << file << context.line << endl << endl;
        break;
    case QtCriticalMsg:
        stream << context.category << ".CRITICAL:  " << localMsg.constData() <<  context.function
               << " " << file << context.line << endl << endl;
        break;
    case QtFatalMsg:
        stream << context.category  << ".FATAL:  " << localMsg.constData() << context.function
               << file << context.line << endl << endl;
        break;
    default:
        stream << context.category << ".INFO:  " << localMsg.constData() <<endl;
    }

    QTextStream(stdout) << stringMsg;

    Configurator *configurator = Configurator::getInstance();
    QDir logDir = configurator->getBaseDir();
    QString path = logDir.absoluteFilePath("log.txt");

    QFile outFile(path);
    QIODevice::OpenMode ioFlags = QIODevice::WriteOnly;
    if (configurator->logFileIsCreated()) {
        ioFlags |= QIODevice::Append;
    } else {
        ioFlags |= QIODevice::Truncate;
        configurator->setFileCreatedFlag();
    }
    if (outFile.open(ioFlags)) {
        QTextStream ts(&outFile);
        ts << stringMsg;
    }

    if (type == QtFatalMsg)
        abort();
}
Example #10
0
void PatternLoggingLayout::configure(Configurator& conf)
{
    if (conf.getMode() == Configurator::FROM_CONF)
    {
        std::string sPattern;
        conf.configure("pattern", sPattern, "");
        if (!sPattern.empty())
        {
            setPattern(sPattern);
        }
    }
}
Example #11
0
TvnServer::TvnServer(bool runsInServiceContext, StringStorage vncIniDirPath /*""*/, bool runAsPortable /*=false*/ )
: Singleton<TvnServer>(),
  ListenerContainer<TvnServerListener *>(),
  m_runAsService(runsInServiceContext),
  m_runPortable(runAsPortable),
  m_rfbClientManager(0),
  m_httpServer(0), m_controlServer(0), m_rfbServer(0)
{
  Configurator *configurator = Configurator::getInstance();

  configurator->setServiceFlag(m_runAsService);
  configurator->setPortableRunFlag(m_runPortable);
  configurator->setVncIniDirectoryPath ( vncIniDirPath.getString() );

  configurator->load();

  m_config = Configurator::getInstance()->getServerConfig();

  resetLogFilePath();

  m_log.changeLevel(m_config->getLogLevel());

  Log::message(_T("TightVNC Server Build on %s"), BuildTime::DATE);

  Log::info(_T("Initialize WinSock"));

  try {
    WindowsSocket::startup(2, 1);
  } catch (Exception &ex) {
    Log::interror(_T("%s"), ex.getMessage());
  }

  ZombieKiller *zombieKiller = new ZombieKiller();

  m_rfbClientManager = new RfbClientManager(NULL);

  m_rfbClientManager->addListener(this);

  Configurator::getInstance()->addListener(this);

  {
    AutoLock l(&m_mutex);

    restartMainRfbServer();
    (void)m_extraRfbServers.reload(m_runAsService, m_rfbClientManager);
    restartHttpServer();
    restartControlServer();
  }
}
Example #12
0
int main(void)
{
	Configurator configurator;
	configurator.readCommandLine();
	configurator.readConfig();
	
    LOG(INFO) << "init done";

    PacketGenerator testGenerator(SimpleTestTrafficGenerator, 100);

    LOG(INFO) << testGenerator.generate(555);

	std::cout << std::endl;
	return 0;
}
Example #13
0
// Check that exceptions are thrown on invalid config file
TEST_WITH_WORKDIR(ConfiguratorTest, MalformedConfigFile)
{
  if (mkdir("conf", 0755) != 0)
    FAIL() << "Failed to create directory conf";
  ofstream file("conf/mesos.conf");
  file << "test1=coffee\n";
  file << "JUNK\n";
  file << "test2=tea\n";
  file.close();

  setenv("MESOS_CONF", "conf", 1);
  Configurator conf;
  EXPECT_THROW(conf.load(), ConfigurationException);
  unsetenv("MESOS_CONF");
}
Example #14
0
void demoMyType1View(const Configurator& configurator)
{
    //
    //  Explicit view selection and configuration
    //

    MyType1 value;

    value.configure(configurator.getView("object.MyType1Last"));
    cout << "Explicit call: " << value << endl;

    value.configure(configurator.getView("object.MyType1"));
    cout << "Explicit call (MERGE): " << value << endl;

}
int ControlApplication::runConfigurator(bool configService, bool isRunAsRequested)
{
  // If not enough rights to configurate service, then restart application requesting
  // admin access rights.
  if (configService && (IsUserAnAdmin() == FALSE)) {
    // If admin rights already requested and application still don't have them,
    // then show error message and exit.
    if (isRunAsRequested) {
      MessageBox(0,
        StringTable::getString(IDS_ADMIN_RIGHTS_NEEDED),
        StringTable::getString(IDS_MBC_TVNCONTROL),
        MB_OK | MB_ICONERROR);
      return 0;
    }
    // Path to tvnserver binary.
    StringStorage pathToBinary;
    // Command line for child process.
    StringStorage childCommandLine;

    // Get path to tvnserver binary.
    Environment::getCurrentModulePath(&pathToBinary);
    // Set -dontelevate flag to tvncontrol know that admin rights already requested.
    childCommandLine.format(_T("%s -dontelevate"), m_commandLine.getString());

    // Start child.
    try {
      Shell::runAsAdmin(pathToBinary.getString(), childCommandLine.getString());
    } catch (SystemException &sysEx) {
      if (sysEx.getErrorCode() != ERROR_CANCELLED) {
        MessageBox(0,
          sysEx.getMessage(),
          StringTable::getString(IDS_MBC_TVNCONTROL),
          MB_OK | MB_ICONERROR);
      }
      return 1;
    } // try / catch.
    return 0;
  }

  Configurator *configurator = Configurator::getInstance();

  configurator->setServiceFlag(configService);
  configurator->load();

  ConfigDialog confDialog(configService, 0);

  return confDialog.showModal();
}
Example #16
0
void demoMyType1Collection(const Configurator& configurator)
{
    //
    //  Collection configuration example

    //
    //  First way is to manually iterate over and second way to to use insert_iterator
    //
    auto iter = configurator.get<MyType1>("object.MyType1");
    while ( iter )
    {
        cout << *iter << endl;
        ++iter;
    }

    //
    // Second way to to use insert_iterator
    //
    vector<MyType1> values;
    cout << "Number of configured objects: " << configurator.get("object.MyType1", back_inserter(values)) << endl;
    for (const auto& value: values)
    {
        cout << value << endl;
    }
}
void RfbInitializer::sessionPhase()
{
  Configurator *conf = Configurator::getInstance();
  ServerConfig *srvConf = conf->getServerConfig();
  unsigned int id = srvConf->getLastSessionId();

  m_input->readUTF8(&m_organization);

  m_output->writeUInt32(id);
  m_sessionId = m_input->readUInt32();

  if (m_sessionId != id) {
    srvConf->setLastSessionId(m_sessionId);
    conf->save();
  }
}
Runner::Runner(const Configurator &configurator)
    : _configurator(configurator), _handbook(configurator.configFileName()), _totalTime(0),
      _crystal(0), _surface(0), _reactor(0), _reactionsPool(0)
{
    int sizeX, sizeY;
    if (_configurator.sizeX() > 0 && _configurator.sizeY() > 0) {
        sizeX = _configurator.sizeX();
        sizeY = _configurator.sizeY();
    } else {
        sizeX = _handbook.sizeX();
        sizeY = _handbook.sizeY();
    }
    _crystal = new Crystal(sizeX, sizeY); // 25 15
    _surface = new Surface(_crystal);

    _reactor = new Reactor();
    _reactionsPool = new ReactionsPool(_surface, _crystal);
    _surface->init(_reactionsPool);
    Reaction::setReactor(_reactor); // t=1200K, [H]=10e-9, [CH2]=10e-10 mol/cm3

    //char outFileName[] = "/home/alex/Monte-Carlo/";

    _savers[0] = new ReactionPoolSaver(_configurator.outFileName("reactions").c_str(), _reactionsPool);
    _savers[1] = new SurfaceSaver(_configurator.outFileName("species").c_str(), _surface);
    _savers[2] = new CrystalSaver(_configurator.outFileName("crystal").c_str(), _crystal);
}
Example #19
0
void usage(const char* argv0, const Configurator& configurator)
{
  cerr << "Usage: " << utils::os::basename(argv0) << " [...]" << endl
       << endl
       << "Supported options:" << endl
       << configurator.getUsage();
}
Example #20
0
void demoMyEnumOk(const Configurator& configurator)
{
    MyEnum value = MyEnum::value1;

    //
    //  Enum coniguration is only possible thruogh free functions and specializations so far.
    //  This example uses free functions which is preffered way.
    //  Free functions can be of three types. Each dype differs from others by first argument.
    //  It could be any of: string, IConfiguratorPtr, IConfigurationRepositoryPtr
    //  Type of argument (and obviously function prototype) can be set as second template parameter.
    //  If parameter is not set, configurator uses following prototype by default:
    //  void configure(const string&, MyEnum& obj)
    //

    configurator.configure("object.fake", value).required();
    cout << value << endl;

    configurator.configure<MyEnum, string>("object.fake", value).required();
    cout << value << endl;

    configurator.configure<MyEnum, IConfigurator>("object.fake", value).required();
    cout << value << endl;

    configurator.configure<MyEnum, IConfigurationRepository>("object.fake", value).required();
    cout << value << endl;
}
Example #21
0
void usage(const char *programName, const Configurator& configurator)
{
  cerr << "Usage: " << programName << " [...]" << endl
       << endl
       << endl
       << "Supported options:" << endl
       << configurator.getUsage();
}
Example #22
0
int main(int argc, char**argv)
{ 
  
  Board * CAEN_V1742_instance = new CAEN_V1742 () ;
  Configurator * config = new Configurator () ;
  config->xmlFileName = argv[1] ;
  config->Init () ; // load configurator

  // find the board in the cfg
  // ---- ---- ---- ---- ---- ---- ---- ---- ---- ----
  
  xmlNode * hw_node = NULL;    
  for (hw_node = config->root_element->children ; hw_node ; hw_node = hw_node->next)
    {
        if (hw_node->type == XML_ELEMENT_NODE &&
            xmlStrEqual (hw_node->name, xmlCharStrdup ("Hardware"))  )
            break;
    }
  xmlNode * board_node = NULL;    
  for ( board_node = hw_node->children ; board_node ; board_node = board_node->next)
    {
      if (board_node->type == XML_ELEMENT_NODE     
          && xmlStrEqual (board_node->name, xmlCharStrdup ("board")) )
        {  
          int ID = Configurator::GetInt (Configurable::getElementContent (*config, "ID" , board_node)) ;
          cout << "[2] Configuring Board ID = " 
               << ID
               << " type= " 
               << Configurable::getElementContent (*config, "type" , board_node) 
               << endl ;

          if (Configurable::getElementContent (*config, "type", board_node) == "CAEN_V1742") break ;
        }
    }
  
  
  BoardConfig bC ;
  bC.Init (*config) ;
  bC.SetBoardNode (board_node) ;

  CAEN_V1742_instance->Config (&bC) ;
  CAEN_V1742_instance->Print () ;
   
  delete CAEN_V1742_instance ;
  return 0 ;
}
Example #23
0
// Check whether specifying just MESOS_CONF allows a config file to be loaded
TEST_WITH_WORKDIR(ConfiguratorTest, ConfigFileWithConfDir)
{
  if (mkdir("conf2", 0755) != 0)
    FAIL() << "Failed to create directory conf2";
  ofstream file("conf2/mesos.conf");
  file << "test3=shake # sugar bomb\n";
  file << "# just a comment\n";
  file << "test4=milk\n";
  file.close();
  setenv("MESOS_CONF", "conf2", 1);
  Configurator conf;
  EXPECT_NO_THROW( conf.load() );
  unsetenv("MESOS_CONF");

  EXPECT_EQ("shake", conf.getConfiguration()["test3"]);
  EXPECT_EQ("milk",  conf.getConfiguration()["test4"]);
}
Example #24
0
void usage(const char* argv0, const Configurator& configurator)
{
  cerr << "Usage: " << utils::os::basename(argv0) << " [...]" << endl
       << endl
       << "Launches a cluster within a single OS process."
       << endl
       << "Supported options:" << endl
       << configurator.getUsage();
}
Example #25
0
int main(int argc, char **argv)
{
  GOOGLE_PROTOBUF_VERIFY_VERSION;

  Configurator configurator;

  logging::registerOptions(&configurator);

  local::registerOptions(&configurator);

  configurator.addOption<int>("port", 'p', "Port to listen on", 5050);
  configurator.addOption<string>("ip", "IP address to listen on");

  if (argc == 2 && string("--help") == argv[1]) {
    usage(argv[0], configurator);
    exit(1);
  }

  Configuration conf;
  try {
    conf = configurator.load(argc, argv);
  } catch (ConfigurationException& e) {
    cerr << "Configuration error: " << e.what() << endl;
    exit(1);
  }

  if (conf.contains("port")) {
    utils::os::setenv("LIBPROCESS_PORT", conf["port"]);
  }

  if (conf.contains("ip")) {
    utils::os::setenv("LIBPROCESS_IP", conf["ip"]);
  }

  // Initialize libprocess.
  process::initialize("master");

  logging::initialize(argv[0], conf);

  process::wait(local::launch(conf, false));

  return 0;
}
Example #26
0
BOOL WINAPI DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID /*lpvReserved*/)
{
    static bool ownApplication = FALSE;
    if (dwReason == DLL_PROCESS_ATTACH) {
        QApplication::setApplicationName("Jamtaba 2");
        QApplication::setApplicationVersion(APP_VERSION);

        // start the configurator
        Configurator *configurator = Configurator::getInstance();
        if (!configurator->setUp(APPTYPE::plugin))
            qCWarning(jtConfigurator) << "JTBConfig->setUp() FAILED !";

        ownApplication = QMfcApp::pluginInstance(hInst);
    }
    if (dwReason == DLL_PROCESS_DETACH && ownApplication)
        delete qApp;

    return TRUE;
}
Example #27
0
int main(int argc, char* args[] ){




    QApplication::setApplicationName("Jomtobo");
    QApplication::setApplicationVersion(APP_VERSION);

    //start the configurator
    Configurator* configurator = Configurator::getInstance();
    if(!configurator->setUp(standalone)) qCWarning(jtConfigurator) << "JTBConfig->setUp() FAILED !" ;

    Persistence::Settings settings;
    settings.load();

//SingleApplication is not working in mac. Using a dirty ifdef until have time to solve the SingleApplication issue in Mac
#ifdef Q_OS_WIN
    QApplication* application = new SingleApplication(argc, args);
#else
    QApplication* application = new QApplication(argc, args);
#endif

    Controller::StandaloneMainController mainController(settings, (QApplication*)application);
    //..JOMTOBO CSS
    mainController.configureStyleSheet("jomtobo.css");
    mainController.start();
    if(mainController.isUsingNullAudioDriver()){
        QMessageBox::about(nullptr, "Fatal error!", "Jamtaba can't detect any audio device in your machine!");
    }
    MainWindowStandalone  mainWindow(&mainController);
    mainController.setMainWindow(&mainWindow);

    mainWindow.show();

#ifdef Q_OS_WIN
    //The SingleApplication class implements a showUp() signal. You can bind to that signal to raise your application's
    //window when a new instance had been started.
    QObject::connect(application, SIGNAL(showUp()), &mainWindow, SLOT(raise()));
#endif
    return application->exec();

 }
int main()
{
    LogPrinter::GetInstance()->Start();

    Configurator config;
    string config_path = "server_config.txt";

    if (!config.ReadConfig(config_path.c_str()))
    {
        cout << "Read config failed." << endl;
        throw -1;
    }

    cout << "Read config success." << endl;

    string x;
    cin >> x;

    return 1;
}
Example #29
0
void usage(const char* progName, const Configurator& configurator)
{
  cerr << "Usage: " << progName << " [--port=PORT] [--url=URL] [...]" << endl
       << endl
       << "URL (used for leader election with ZooKeeper) may be one of:" << endl
       << "  zoo://host1:port1,host2:port2,..." << endl
       << "  zoofile://file where file has one host:port pair per line" << endl
       << endl
       << "Supported options:" << endl
       << configurator.getUsage();
}
Example #30
0
// Check that variables are loaded with the correct priority when an
// environment variable, a config file element , and a config flag
// are all present. Command line flags should have the highest priority,
// second should be environment variables, and last should be the file.
TEST_WITH_WORKDIR(ConfiguratorTest, LoadingPriorities)
{
  // Create a file which contains parameters a, b, c and d
  if (mkdir("bin", 0755) != 0)
    FAIL() << "Failed to create directory bin";
  if (mkdir("conf", 0755) != 0)
    FAIL() << "Failed to create directory conf";
  ofstream file("conf/mesos.conf");
  file << "a=fromFile\n";
  file << "b=fromFile\n";
  file << "c=fromFile\n";
  file << "d=fromFile\n";
  file.close();

  // Set environment to contain parameters a and b
  setenv("MESOS_A", "fromEnv", 1);
  setenv("MESOS_B", "fromEnv", 1);
  setenv("MESOS_CONF", "conf", 1);

  // Pass parameters a and c from the command line
  const int ARGC = 3;
  char* argv[ARGC];
  argv[0] = (char*) "bin/filename";
  argv[1] = (char*) "--a=fromCmdLine";
  argv[2] = (char*) "--c=fromCmdLine";

  Configurator conf;
  EXPECT_NO_THROW(conf.load(ARGC, argv));

  // Clear the environment vars set above
  unsetenv("MESOS_A");
  unsetenv("MESOS_B");
  unsetenv("MESOS_CONF");

  // Check that every variable is obtained from the highest-priority location
  // (command line > env > file)
  EXPECT_EQ("fromCmdLine", conf.getConfiguration()["a"]);
  EXPECT_EQ("fromEnv",     conf.getConfiguration()["b"]);
  EXPECT_EQ("fromCmdLine", conf.getConfiguration()["c"]);
  EXPECT_EQ("fromFile",    conf.getConfiguration()["d"]);
}