diff options
Diffstat (limited to 'cpp/src/tests/failover_soak.cpp')
| -rw-r--r-- | cpp/src/tests/failover_soak.cpp | 65 |
1 files changed, 37 insertions, 28 deletions
diff --git a/cpp/src/tests/failover_soak.cpp b/cpp/src/tests/failover_soak.cpp index 4f16e469b8..5636268c95 100644 --- a/cpp/src/tests/failover_soak.cpp +++ b/cpp/src/tests/failover_soak.cpp @@ -361,35 +361,45 @@ wait_for_newbie ( ) } } - +bool endsWith(const char* str, const char* suffix) { + return (strlen(suffix) < strlen(str) && 0 == strcmp(str+strlen(str)-strlen(suffix), suffix)); +} void startNewBroker ( brokerVector & brokers, - char const * srcRoot, - char const * moduleDir, + char const * moduleOrDir, string const clusterName, int verbosity ) { static int brokerId = 0; - stringstream path, prefix, module; - module << moduleDir << "/cluster.so"; - path << srcRoot << "/qpidd"; + stringstream path, prefix; prefix << "soak-" << brokerId; + string dataDir("/tmp/failover_soak.XXXXXX"); + if (!mkdtemp(const_cast<char*>(dataDir.c_str()))) + throw qpid::ErrnoException("Can't create data dir"); + std::vector<std::string> argv = list_of<string> ("qpidd") - ("--no-module-dir") - ("--load-module=cluster.so") - ("--cluster-name") - (clusterName) + ("--cluster-name")(clusterName) ("--auth=no") - ("--no-data-dir") + ("--data-dir")(dataDir) ("--mgmt-enable=no") ("--log-prefix") (prefix.str()) ("--log-to-file") (prefix.str()+".log"); + if (endsWith(moduleOrDir, "cluster.so")) { + // Module path specified, load only that module. + argv.push_back(string("--load-module=")+moduleOrDir); + argv.push_back("--no-module-dir"); + } + else { + // Module directory specified, load all modules in dir. + argv.push_back(string("--module-dir=")+moduleOrDir); + } + newbie = new ForkedBroker ( argv ); newbie_port = newbie->getPort(); ForkedBroker * broker = newbie; @@ -616,24 +626,25 @@ startSendingClient ( brokerVector brokers, int main ( int argc, char const ** argv ) { - if ( argc < 9 ) { - cerr << "Usage: failoverSoak srcRoot moduleDir host senderPath receiverPath nMessages verbosity\n"; - cerr << " ( argc was " << argc << " )\n"; + if ( argc != 8 ) { + cerr << "Usage: " + << argv[0] + << "moduleOrDir declareQueuesPath senderPath receiverPath nMessages reportFrequency verbosity" + << endl; return BAD_ARGS; } - signal ( SIGCHLD, childExit ); - char const * srcRoot = argv[1]; - char const * moduleDir = argv[2]; - char const * host = argv[3]; - char const * declareQueuesPath = argv[4]; - char const * senderPath = argv[5]; - char const * receiverPath = argv[6]; - char const * nMessages = argv[7]; - char const * reportFrequency = argv[8]; - int verbosity = atoi(argv[9]); + int i = 1; + char const * moduleOrDir = argv[i++]; + char const * declareQueuesPath = argv[i++]; + char const * senderPath = argv[i++]; + char const * receiverPath = argv[i++]; + char const * nMessages = argv[i++]; + char const * reportFrequency = argv[i++]; + int verbosity = atoi(argv[i++]); + char const * host = "127.0.0.1"; int maxBrokers = 50; allMyChildren.verbosity = verbosity; @@ -652,8 +663,7 @@ main ( int argc, char const ** argv ) int nBrokers = 3; for ( int i = 0; i < nBrokers; ++ i ) { startNewBroker ( brokers, - srcRoot, - moduleDir, + moduleOrDir, clusterName, verbosity ); } @@ -745,8 +755,7 @@ main ( int argc, char const ** argv ) cout << "Starting new broker.\n\n"; startNewBroker ( brokers, - srcRoot, - moduleDir, + moduleOrDir, clusterName, verbosity ); |
