diff options
author | Alan Conway <aconway@apache.org> | 2012-12-19 21:24:47 +0000 |
---|---|---|
committer | Alan Conway <aconway@apache.org> | 2012-12-19 21:24:47 +0000 |
commit | c0481d290339ee4f1747add7955ae107cc5560d1 (patch) | |
tree | dab73805ccc395b4b2e2d7223bfc4661b1eb47ea /qpid/cpp/src | |
parent | ee9947727aea741b14e28006a2adfa23b6de3a48 (diff) | |
download | qpid-python-c0481d290339ee4f1747add7955ae107cc5560d1.tar.gz |
QPID-4514: Remove obsolete cluster code: more tests
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1424140 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/cpp/src')
-rw-r--r-- | qpid/cpp/src/tests/Makefile.am | 5 | ||||
-rw-r--r-- | qpid/cpp/src/tests/failover_soak.cpp | 827 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/long_cluster_tests.py | 38 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/qpid-test-cluster | 109 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/restart_cluster | 38 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_long_cluster_tests | 24 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_fed_ex_dynamic_cluster | 30 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_fed_ex_link_cluster | 29 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_fed_ex_queue_cluster | 29 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_fed_ex_route_cluster | 29 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/start_cluster | 43 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/start_cluster_hosts | 70 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/stop_cluster | 33 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/verify_cluster_objects | 107 |
14 files changed, 0 insertions, 1411 deletions
diff --git a/qpid/cpp/src/tests/Makefile.am b/qpid/cpp/src/tests/Makefile.am index 113005d2c2..e7fe611696 100644 --- a/qpid/cpp/src/tests/Makefile.am +++ b/qpid/cpp/src/tests/Makefile.am @@ -242,11 +242,6 @@ header_test_INCLUDES=$(PUBLIC_INCLUDES) header_test_SOURCES=header_test.cpp TestOptions.h ConnectionOptions.h header_test_LDADD=$(lib_client) -check_PROGRAMS+=failover_soak -failover_soak_INCLUDES=$(PUBLIC_INCLUDES) -failover_soak_SOURCES=failover_soak.cpp ForkedBroker.h ForkedBroker.cpp -failover_soak_LDADD=$(lib_client) $(lib_broker) - check_PROGRAMS+=declare_queues declare_queues_INCLUDES=$(PUBLIC_INCLUDES) declare_queues_SOURCES=declare_queues.cpp diff --git a/qpid/cpp/src/tests/failover_soak.cpp b/qpid/cpp/src/tests/failover_soak.cpp deleted file mode 100644 index c2ac36a757..0000000000 --- a/qpid/cpp/src/tests/failover_soak.cpp +++ /dev/null @@ -1,827 +0,0 @@ -/* - * - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - * - */ - - -#include <stdio.h> -#include <stdlib.h> -#include <unistd.h> -#include <sys/wait.h> -#include <sys/time.h> -#include <string.h> -#include <sys/types.h> -#include <signal.h> - -#include <string> -#include <iostream> -#include <sstream> -#include <vector> - -#include <boost/assign.hpp> - -#include "qpid/framing/Uuid.h" - -#include <ForkedBroker.h> -#include <qpid/client/Connection.h> - - - - - -using namespace std; -using boost::assign::list_of; -using namespace qpid::framing; -using namespace qpid::client; - - -namespace qpid { -namespace tests { - -vector<pid_t> pids; - -typedef vector<ForkedBroker *> brokerVector; - -typedef enum -{ - NO_STATUS, - RUNNING, - COMPLETED -} -childStatus; - - -typedef enum -{ - NO_TYPE, - DECLARING_CLIENT, - SENDING_CLIENT, - RECEIVING_CLIENT -} -childType; - - -ostream& operator<< ( ostream& os, const childType& ct ) { - switch ( ct ) { - case DECLARING_CLIENT: os << "Declaring Client"; break; - case SENDING_CLIENT: os << "Sending Client"; break; - case RECEIVING_CLIENT: os << "Receiving Client"; break; - default: os << "No Client"; break; - } - - return os; -} - - - - -struct child -{ - child ( string & name, pid_t pid, childType type ) - : name(name), pid(pid), retval(-999), status(RUNNING), type(type) - { - gettimeofday ( & startTime, 0 ); - } - - - void - done ( int _retval ) - { - retval = _retval; - status = COMPLETED; - gettimeofday ( & stopTime, 0 ); - } - - - void - setType ( childType t ) - { - type = t; - } - - - string name; - pid_t pid; - int retval; - childStatus status; - childType type; - struct timeval startTime, - stopTime; -}; - - - - -struct children : public vector<child *> -{ - - void - add ( string & name, pid_t pid, childType type ) - { - push_back ( new child ( name, pid, type ) ); - } - - - child * - get ( pid_t pid ) - { - vector<child *>::iterator i; - for ( i = begin(); i != end(); ++ i ) - if ( pid == (*i)->pid ) - return *i; - - return 0; - } - - - void - exited ( pid_t pid, int retval ) - { - child * kid = get ( pid ); - if(! kid) - { - if ( verbosity > 1 ) - { - cerr << "children::exited warning: Can't find child with pid " - << pid - << endl; - } - return; - } - - kid->done ( retval ); - } - - - int - unfinished ( ) - { - int count = 0; - - vector<child *>::iterator i; - for ( i = begin(); i != end(); ++ i ) - if ( COMPLETED != (*i)->status ) - ++ count; - - return count; - } - - - int - checkChildren ( ) - { - for ( unsigned int i = 0; i < pids.size(); ++ i ) - { - int pid = pids[i]; - int returned_pid; - int status; - - child * kid = get ( pid ); - - if ( kid->status != COMPLETED ) - { - returned_pid = waitpid ( pid, &status, WNOHANG ); - - if ( returned_pid == pid ) - { - int exit_status = WEXITSTATUS(status); - exited ( pid, exit_status ); - if ( exit_status ) // this is a child error. - return exit_status; - } - } - } - - return 0; - } - - - void - killEverybody ( ) - { - vector<child *>::iterator i; - for ( i = begin(); i != end(); ++ i ) - kill ( (*i)->pid, 9 ); - } - - - - void - print ( ) - { - cout << "--- status of all children --------------\n"; - vector<child *>::iterator i; - for ( i = begin(); i != end(); ++ i ) - cout << "child: " << (*i)->name - << " status: " << (*i)->status - << endl; - cout << "\n\n\n\n"; - } - - int verbosity; -}; - - -children allMyChildren; - - -void -childExit ( int ) -{ - int childReturnCode; - pid_t pid = waitpid ( 0, & childReturnCode, WNOHANG); - - if ( pid > 0 ) - allMyChildren.exited ( pid, childReturnCode ); -} - - - -int -mrand ( int maxDesiredVal ) { - double zeroToOne = (double) rand() / (double) RAND_MAX; - return (int) (zeroToOne * (double) maxDesiredVal); -} - - - -int -mrand ( int minDesiredVal, int maxDesiredVal ) { - int interval = maxDesiredVal - minDesiredVal; - return minDesiredVal + mrand ( interval ); -} - - - -void -makeClusterName ( string & s ) { - stringstream ss; - ss << "soakTestCluster_" << Uuid(true).str(); - s = ss.str(); -} - - - - - -void -printBrokers ( brokerVector & brokers ) -{ - cout << "Broker List ------------ size: " << brokers.size() << "\n"; - for ( brokerVector::iterator i = brokers.begin(); i != brokers.end(); ++ i) { - cout << "pid: " - << (*i)->getPID() - << " port: " - << (*i)->getPort() - << endl; - } - cout << "end Broker List ------------\n"; -} - - - - -ForkedBroker * newbie = 0; -int newbie_port = 0; - - - -bool -wait_for_newbie ( ) -{ - if ( ! newbie ) - return true; - - try - { - Connection connection; - connection.open ( "127.0.0.1", newbie_port ); - connection.close(); - newbie = 0; // He's no newbie anymore! - return true; - } - catch ( const std::exception& error ) - { - std::cerr << "wait_for_newbie error: " - << error.what() - << endl; - return false; - } -} - -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 * moduleOrDir, - string const clusterName, - int verbosity, - int durable ) -{ - static int brokerId = 0; - stringstream path, prefix; - prefix << "soak-" << brokerId; - std::vector<std::string> argv = list_of<string> - ("qpidd") - ("--cluster-name")(clusterName) - ("--auth=no") - ("--mgmt-enable=no") - ("--log-prefix")(prefix.str()) - ("--log-to-file")(prefix.str()+".log") - ("--log-enable=info+") - ("--log-enable=debug+:cluster") - ("TMP_DATA_DIR"); - - 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"); - if ( durable ) { - std::cerr << "failover_soak warning: durable arg hass no effect. Use \"dir\" option of \"moduleOrDir\".\n"; - } - } - 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; - - if ( verbosity > 0 ) - std::cerr << "new broker created: pid == " - << broker->getPID() - << " log-prefix == " - << "soak-" << brokerId - << endl; - brokers.push_back ( broker ); - - ++ brokerId; -} - - - - - -bool -killFrontBroker ( brokerVector & brokers, int verbosity ) -{ - cerr << "killFrontBroker: waiting for newbie sync...\n"; - if ( ! wait_for_newbie() ) - return false; - cerr << "killFrontBroker: newbie synced.\n"; - - if ( verbosity > 0 ) - cout << "killFrontBroker pid: " << brokers[0]->getPID() << " on port " << brokers[0]->getPort() << endl; - try { brokers[0]->kill(9); } - catch ( const exception& error ) { - if ( verbosity > 0 ) - { - cout << "error killing broker: " - << error.what() - << endl; - } - - return false; - } - delete brokers[0]; - brokers.erase ( brokers.begin() ); - return true; -} - - - - - -/* - * The optional delay is to avoid killing newbie brokers that have just - * been added and are still in the process of updating. This causes - * spurious, test-generated errors that scare everybody. - */ -void -killAllBrokers ( brokerVector & brokers, int delay ) -{ - if ( delay > 0 ) - { - std::cerr << "Killing all brokers after delay of " << delay << endl; - sleep ( delay ); - } - - for ( uint i = 0; i < brokers.size(); ++ i ) - try { brokers[i]->kill(9); } - catch ( const exception& error ) - { - std::cerr << "killAllBrokers Warning: exception during kill on broker " - << i - << " " - << error.what() - << endl; - } -} - - - - - -pid_t -runDeclareQueuesClient ( brokerVector brokers, - char const * host, - char const * path, - int verbosity, - int durable, - char const * queue_prefix, - int n_queues - ) -{ - string name("declareQueues"); - int port = brokers[0]->getPort ( ); - - if ( verbosity > 1 ) - cout << "startDeclareQueuesClient: host: " - << host - << " port: " - << port - << endl; - stringstream portSs; - portSs << port; - - vector<const char*> argv; - argv.push_back ( "declareQueues" ); - argv.push_back ( host ); - string portStr = portSs.str(); - argv.push_back ( portStr.c_str() ); - if ( durable ) - argv.push_back ( "1" ); - else - argv.push_back ( "0" ); - - argv.push_back ( queue_prefix ); - - char n_queues_str[20]; - sprintf ( n_queues_str, "%d", n_queues ); - argv.push_back ( n_queues_str ); - - argv.push_back ( 0 ); - pid_t pid = fork(); - - if ( ! pid ) { - execv ( path, const_cast<char * const *>(&argv[0]) ); - perror ( "error executing declareQueues: " ); - return 0; - } - - allMyChildren.add ( name, pid, DECLARING_CLIENT ); - return pid; -} - - - - - -pid_t -startReceivingClient ( brokerVector brokers, - char const * host, - char const * receiverPath, - char const * reportFrequency, - int verbosity, - char const * queue_name - ) -{ - string name("receiver"); - int port = brokers[0]->getPort ( ); - - if ( verbosity > 1 ) - cout << "startReceivingClient: port " << port << endl; - - // verbosity has to be > 1 to let clients talk. - int client_verbosity = (verbosity > 1 ) ? 1 : 0; - - char portStr[100]; - char verbosityStr[100]; - sprintf(portStr, "%d", port); - sprintf(verbosityStr, "%d", client_verbosity); - - - vector<const char*> argv; - argv.push_back ( "resumingReceiver" ); - argv.push_back ( host ); - argv.push_back ( portStr ); - argv.push_back ( reportFrequency ); - argv.push_back ( verbosityStr ); - argv.push_back ( queue_name ); - argv.push_back ( 0 ); - - pid_t pid = fork(); - pids.push_back ( pid ); - - if ( ! pid ) { - execv ( receiverPath, const_cast<char * const *>(&argv[0]) ); - perror ( "error executing receiver: " ); - return 0; - } - - allMyChildren.add ( name, pid, RECEIVING_CLIENT ); - return pid; -} - - - - - -pid_t -startSendingClient ( brokerVector brokers, - char const * host, - char const * senderPath, - char const * nMessages, - char const * reportFrequency, - int verbosity, - int durability, - char const * queue_name - ) -{ - string name("sender"); - int port = brokers[0]->getPort ( ); - - if ( verbosity > 1) - cout << "startSenderClient: port " << port << endl; - char portStr[100]; - char verbosityStr[100]; - // - // verbosity has to be > 1 to let clients talk. - int client_verbosity = (verbosity > 1 ) ? 1 : 0; - - sprintf ( portStr, "%d", port); - sprintf ( verbosityStr, "%d", client_verbosity); - - vector<const char*> argv; - argv.push_back ( "replayingSender" ); - argv.push_back ( host ); - argv.push_back ( portStr ); - argv.push_back ( nMessages ); - argv.push_back ( reportFrequency ); - argv.push_back ( verbosityStr ); - if ( durability ) - argv.push_back ( "1" ); - else - argv.push_back ( "0" ); - argv.push_back ( queue_name ); - argv.push_back ( 0 ); - - pid_t pid = fork(); - pids.push_back ( pid ); - - if ( ! pid ) { - execv ( senderPath, const_cast<char * const *>(&argv[0]) ); - perror ( "error executing sender: " ); - return 0; - } - - allMyChildren.add ( name, pid, SENDING_CLIENT ); - return pid; -} - - - -#define HUNKY_DORY 0 -#define BAD_ARGS 1 -#define CANT_FORK_DQ 2 -#define CANT_FORK_RECEIVER 3 -#define CANT_FORK_SENDER 4 -#define DQ_FAILED 5 -#define ERROR_ON_CHILD 6 -#define HANGING 7 -#define ERROR_KILLING_BROKER 8 - -}} // namespace qpid::tests - -using namespace qpid::tests; - -// If you want durability, use the "dir" option of "moduleOrDir" . -int -main ( int argc, char const ** argv ) -{ - int brokerKills = 0; - if ( argc != 11 ) { - cerr << "Usage: " - << argv[0] - << "moduleOrDir declareQueuesPath senderPath receiverPath nMessages reportFrequency verbosity durable n_queues n_brokers" - << endl; - cerr << "\tverbosity is an integer, durable is 0 or 1\n"; - return BAD_ARGS; - } - signal ( SIGCHLD, childExit ); - - 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++]); - int durable = atoi(argv[i++]); - int n_queues = atoi(argv[i++]); - int n_brokers = atoi(argv[i++]); - - char const * host = "127.0.0.1"; - - allMyChildren.verbosity = verbosity; - - string clusterName; - - srand ( getpid() ); - - makeClusterName ( clusterName ); - - brokerVector brokers; - - if ( verbosity > 1 ) - cout << "Starting initial cluster...\n"; - - for ( int i = 0; i < n_brokers; ++ i ) { - startNewBroker ( brokers, - moduleOrDir, - clusterName, - verbosity, - durable ); - } - - - if ( verbosity > 0 ) - printBrokers ( brokers ); - - // Get prefix for each queue name. - stringstream queue_prefix; - queue_prefix << "failover_soak_" << getpid(); - string queue_prefix_str(queue_prefix.str()); - - // Run the declareQueues child. - int childStatus; - pid_t dqClientPid = - runDeclareQueuesClient ( brokers, - host, - declareQueuesPath, - verbosity, - durable, - queue_prefix_str.c_str(), - n_queues - ); - if ( -1 == dqClientPid ) { - cerr << "END_OF_TEST ERROR_START_DECLARE_1\n"; - return CANT_FORK_DQ; - } - - // Don't continue until declareQueues is finished. - pid_t retval = waitpid ( dqClientPid, & childStatus, 0); - if ( retval != dqClientPid) { - cerr << "END_OF_TEST ERROR_START_DECLARE_2\n"; - return DQ_FAILED; - } - allMyChildren.exited ( dqClientPid, childStatus ); - - - /* - Start one receiving and one sending client for each queue. - */ - for ( int i = 0; i < n_queues; ++ i ) { - - stringstream queue_name; - queue_name << queue_prefix.str() << '_' << i; - string queue_name_str(queue_name.str()); - - // Receiving client --------------------------- - pid_t receivingClientPid = - startReceivingClient ( brokers, - host, - receiverPath, - reportFrequency, - verbosity, - queue_name_str.c_str() ); - if ( -1 == receivingClientPid ) { - cerr << "END_OF_TEST ERROR_START_RECEIVER\n"; - return CANT_FORK_RECEIVER; - } - - - // Sending client --------------------------- - pid_t sendingClientPid = - startSendingClient ( brokers, - host, - senderPath, - nMessages, - reportFrequency, - verbosity, - durable, - queue_name_str.c_str() ); - if ( -1 == sendingClientPid ) { - cerr << "END_OF_TEST ERROR_START_SENDER\n"; - return CANT_FORK_SENDER; - } - } - - - int minSleep = 2, - maxSleep = 6; - - int totalBrokers = n_brokers; - - int loop = 0; - - while ( 1 ) - { - ++ loop; - - /* - if ( verbosity > 1 ) - std::cerr << "------- loop " << loop << " --------\n"; - - if ( verbosity > 0 ) - cout << totalBrokers << " brokers have been added to the cluster.\n\n\n"; - */ - - // Sleep for a while. ------------------------- - int sleepyTime = mrand ( minSleep, maxSleep ); - sleep ( sleepyTime ); - - int bullet = mrand ( 100 ); - if ( bullet >= 95 ) - { - fprintf ( stderr, "Killing oldest broker...\n" ); - - // Kill the oldest broker. -------------------------- - if ( ! killFrontBroker ( brokers, verbosity ) ) - { - allMyChildren.killEverybody(); - killAllBrokers ( brokers, 5 ); - std::cerr << "END_OF_TEST ERROR_BROKER\n"; - return ERROR_KILLING_BROKER; - } - ++ brokerKills; - - // Start a new broker. -------------------------- - if ( verbosity > 0 ) - cout << "Starting new broker.\n\n"; - - startNewBroker ( brokers, - moduleOrDir, - clusterName, - verbosity, - durable ); - ++ totalBrokers; - printBrokers ( brokers ); - cerr << brokerKills << " brokers have been killed.\n\n\n"; - } - - int retval = allMyChildren.checkChildren(); - if ( retval ) - { - std::cerr << "END_OF_TEST ERROR_CLIENT\n"; - allMyChildren.killEverybody(); - killAllBrokers ( brokers, 5 ); - return ERROR_ON_CHILD; - } - - // If all children have exited, quit. - int unfinished = allMyChildren.unfinished(); - if ( unfinished == 0 ) { - killAllBrokers ( brokers, 5 ); - - if ( verbosity > 1 ) - cout << "failoverSoak: all children have exited.\n"; - - std::cerr << "END_OF_TEST SUCCESSFUL\n"; - return HUNKY_DORY; - } - - } - - allMyChildren.killEverybody(); - killAllBrokers ( brokers, 5 ); - - std::cerr << "END_OF_TEST SUCCESSFUL\n"; - - return HUNKY_DORY; -} - - - diff --git a/qpid/cpp/src/tests/long_cluster_tests.py b/qpid/cpp/src/tests/long_cluster_tests.py deleted file mode 100755 index f77837f0c4..0000000000 --- a/qpid/cpp/src/tests/long_cluster_tests.py +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env python - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -import os, signal, sys, unittest -from testlib import TestBaseCluster - -class LongClusterTests(TestBaseCluster): - """Long/Soak cluster tests with async store ability""" - - - def test_LongCluster_01_DummyTest(self): - """Dummy test - a placeholder for the first of the long/soak python cluster tests""" - pass - -# Start the test here - -if __name__ == '__main__': - if os.getenv("STORE_LIB") != None: - print "NOTE: Store enabled for the following tests:" - if not unittest.main(): sys.exit(1) - diff --git a/qpid/cpp/src/tests/qpid-test-cluster b/qpid/cpp/src/tests/qpid-test-cluster deleted file mode 100755 index 40ad452a0d..0000000000 --- a/qpid/cpp/src/tests/qpid-test-cluster +++ /dev/null @@ -1,109 +0,0 @@ -#!/bin/bash -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -usage() { - echo "Usage: `basename $0` [options] start|stop|restart|check [hosts] -Start/stop/restart a cluster on specified hosts or on \$HOSTS via ssh. - -Options: - -l USER Run qpidd and copy files as USER. - -e SCRIPT Source SCRIPT for environment settings. Copies SCRIPT to each host. - Default is $DEFAULT_ENV. - -c CONFIG Use CONFIG as qpidd config file. Copies CONFIG to each host. - Default is $DEFAULT_CONF - -d Delete data-dir and log file before starting broker. -" - exit 1 -} - -DEFAULT_CONF=~/qpid-test-qpidd.conf -DEFAULT_ENV=~/qpid-test-env.sh - -test -f $DEFAULT_CONF && CONF_FILE=$DEFAULT_CONF -test -f $DEFAULT_ENV && ENV_FILE=$DEFAULT_ENV - -while getopts "l:e:c:d" opt; do - case $opt in - l) SSHOPTS="-l$OPTARG $SSHOPTS" ; RSYNC_USER="$OPTARG@" ;; - e) ENV_FILE=$OPTARG ;; - c) CONF_FILE=$OPTARG ;; - d) DO_DELETE=1 ;; - *) usage;; - esac -done -shift `expr $OPTIND - 1` -test "$*" || usage -CMD=$1; shift -HOSTS=${*:-$HOSTS} - -conf_value() { test -f "$CONF_FILE" && awk -F= "/^$1=/ {print \$2}" $CONF_FILE; } - -if test -n "$CONF_FILE"; then - test -f "$CONF_FILE" || { echo Config file not found: $CONF_FILE; exit 1; } - RSYNCFILES="$RSYNCFILES $CONF_FILE" - QPIDD_ARGS="$QPIDD_ARGS --config $CONF_FILE" - CONF_PORT=`conf_value port` - CONF_DATA_DIR=`conf_value data-dir` - CONF_LOG_FILE=`conf_value log-to-file` -fi - -if test -n "$ENV_FILE"; then - test -f "$ENV_FILE" || { echo Environment file not found: $ENV_FILE; exit 1; } - RSYNCFILES="$RSYNCFILES $ENV_FILE" - SOURCE_ENV="source $ENV_FILE ; " -fi - -test -n "$RSYNCFILES" && rsynchosts $RSYNCFILES # Copy conf/env files to all hosts - -do_start() { - for h in $HOSTS; do - COMMAND="qpidd -d $QPIDD_ARGS" - id -nG | grep '\<ais\>' >/dev/null && COMMAND="sg ais -c '$COMMAND'" - if test "$DO_DELETE"; then COMMAND="rm -rf $CONF_DATA_DIR $CONF_LOG_FILE; $COMMAND"; fi - ssh $h "$SOURCE_ENV $COMMAND" || { echo "Failed to start on $h"; exit 1; } - done -} - -do_stop() { - for h in $HOSTS; do - ssh $h "$SOURCE_ENV qpidd -q --no-module-dir --no-data-dir $QPIDD_ARGS" - done -} - -do_status() { - for h in $HOSTS; do - if ssh $h "$SOURCE_ENV qpidd -c --no-module-dir --no-data-dir $QPIDD_ARGS > /dev/null"; then - echo "$h ok" - else - echo "$h not running" - STATUS=1 - fi - done -} - -case $CMD in - start) do_start ;; - stop) do_stop ;; - restart) do_stop ; do_start ;; - status) do_status ;; - *) usage;; -esac - -exit $STATUS diff --git a/qpid/cpp/src/tests/restart_cluster b/qpid/cpp/src/tests/restart_cluster deleted file mode 100755 index 5b48e619f6..0000000000 --- a/qpid/cpp/src/tests/restart_cluster +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Re-start a cluster on the local host. - -srcdir=`dirname $0` -$srcdir/stop_cluster -exec $srcdir/start_cluster "$@" -#!/bin/bash -# Re-start a cluster on the local host. - -srcdir=`dirname $0` -$srcdir/stop_cluster -exec $srcdir/start_cluster "$@" -#!/bin/bash -# Re-start a cluster on the local host. - -srcdir=`dirname $0` -$srcdir/stop_cluster -exec $srcdir/start_cluster "$@" diff --git a/qpid/cpp/src/tests/run_long_cluster_tests b/qpid/cpp/src/tests/run_long_cluster_tests deleted file mode 100755 index 5dce0be585..0000000000 --- a/qpid/cpp/src/tests/run_long_cluster_tests +++ /dev/null @@ -1,24 +0,0 @@ -#!/bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -srcdir=`dirname $0` -$srcdir/run_cluster_tests 'cluster_tests.LongTests.*' -DDURATION=4 - diff --git a/qpid/cpp/src/tests/sasl_fed_ex_dynamic_cluster b/qpid/cpp/src/tests/sasl_fed_ex_dynamic_cluster deleted file mode 100755 index fd6b72a4f2..0000000000 --- a/qpid/cpp/src/tests/sasl_fed_ex_dynamic_cluster +++ /dev/null @@ -1,30 +0,0 @@ -#! /bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -source ./test_env.sh -source cpg_check.sh -cpg_enabled || exit 0 - - -with_ais_group ${srcdir}/sasl_fed_ex dynamic cluster - - diff --git a/qpid/cpp/src/tests/sasl_fed_ex_link_cluster b/qpid/cpp/src/tests/sasl_fed_ex_link_cluster deleted file mode 100755 index 34b2aa4a5f..0000000000 --- a/qpid/cpp/src/tests/sasl_fed_ex_link_cluster +++ /dev/null @@ -1,29 +0,0 @@ -#! /bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -source ./test_env.sh -source cpg_check.sh -cpg_enabled || exit 0 - -with_ais_group ${srcdir}/sasl_fed_ex link cluster - - diff --git a/qpid/cpp/src/tests/sasl_fed_ex_queue_cluster b/qpid/cpp/src/tests/sasl_fed_ex_queue_cluster deleted file mode 100755 index 14f36f6fc4..0000000000 --- a/qpid/cpp/src/tests/sasl_fed_ex_queue_cluster +++ /dev/null @@ -1,29 +0,0 @@ -#! /bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -source ./test_env.sh -source cpg_check.sh -cpg_enabled || exit 0 - -with_ais_group ${srcdir}/sasl_fed_ex queue cluster - - diff --git a/qpid/cpp/src/tests/sasl_fed_ex_route_cluster b/qpid/cpp/src/tests/sasl_fed_ex_route_cluster deleted file mode 100755 index 756476056e..0000000000 --- a/qpid/cpp/src/tests/sasl_fed_ex_route_cluster +++ /dev/null @@ -1,29 +0,0 @@ -#! /bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - - -source ./test_env.sh -source cpg_check.sh -cpg_enabled || exit 0 - -with_ais_group ${srcdir}/sasl_fed_ex route cluster - - diff --git a/qpid/cpp/src/tests/start_cluster b/qpid/cpp/src/tests/start_cluster deleted file mode 100755 index 78fd104d9c..0000000000 --- a/qpid/cpp/src/tests/start_cluster +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Start a cluster of brokers on local host, put the list of ports for cluster members in cluster.ports -# - -# Execute command with the ais group set. -source ./test_env.sh -source cpg_check.sh -cpg_enabled || exit 0 - -rm -f cluster*.log cluster.ports qpidd.port - -SIZE=${1:-3}; shift -CLUSTER=$HOSTNAME.$$ -OPTS="-d --no-module-dir --load-module $CLUSTER_LIB --cluster-name=$CLUSTER --auth=no --log-enable notice+ --log-enable debug+:cluster $@" - -for (( i=0; i<SIZE; ++i )); do - DDIR=`mktemp -d /tmp/start_cluster.XXXXXXXXXX` - PORT=`with_ais_group ../qpidd -p0 --log-to-file=cluster$i.log $OPTS --data-dir=$DDIR` || exit 1 - echo $PORT >> cluster.ports -done - -head -n 1 cluster.ports > qpidd.port # First member's port for tests. - diff --git a/qpid/cpp/src/tests/start_cluster_hosts b/qpid/cpp/src/tests/start_cluster_hosts deleted file mode 100755 index 778b4248da..0000000000 --- a/qpid/cpp/src/tests/start_cluster_hosts +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# -# Start a cluster of brokers on local host, put the list of host port addresses -# in cluster.ports -# -# Arguments: [-k] [-p port] HOST [HOST...] -# -p port to start broker on, can be 0. Actual ports recorded in cluster.addr. -# -k kill any qpidd processes owned by this user before starting. -# -# Start a broker on each named host. Name a host twice to start multiple brokers. -# -# You must be able to ssh to each host and be in group ais. -# $QPIDD must be executable on each host. -# Logs go to syslog on each host, with a unique prefix per broker. -# - -QPIDD=${QPIDD:-$PWD/../qpidd} -LIBQPIDCLUSTER=${LIBQPIDCLUSTER:-$PWD/../.libs/cluster.so} -NAME=$USER # User name is default cluster name. -RESTART=NO - -while getopts "kp:n:q:r" ARG ; do - case $ARG in - k) KILL=yes ;; - p) PORT="$OPTARG" ;; - n) NAME=$OPTARG ;; - q) QPIDD=$OPTARG ;; - l) LIBQPIDCLUSTER=$OPTARG ;; - r) RESTART=yes ;; - *) echo "Error parsing options: $ARG"; exit 1 ;; - esac -done -shift `expr $OPTIND - 1` -test -n "$PORT" && PORTOPT="-p $PORT" -test "$KILL" = yes && KILL="$QPIDD --no-module-dir -q $PORTOPT ;" -CLUSTER=${*:-$CLUSTER} # Use args or env -test -z "$CLUSTER" && { echo Must specify at least one host; exit 1; } - - -OPTS="-d $PORTOPT --load-module $LIBQPIDCLUSTER --cluster-name=$NAME --no-data-dir --auth=no --log-to-syslog --log-enable=info+" - -num=0 -for h in $CLUSTER; do - num=`expr $num + 1` # Give a unique log prefix to each node. - cmd="$KILL $QPIDD $OPTS --log-prefix $num.$h" - out=`echo "$cmd" | ssh $h newgrp ais` || { echo == $h error: $out ; exit 1; } - if [ "$PORT" = 0 ] ; then p=$out; else p=$PORT; fi - echo "$h $p" -done - diff --git a/qpid/cpp/src/tests/stop_cluster b/qpid/cpp/src/tests/stop_cluster deleted file mode 100755 index 02436c60b7..0000000000 --- a/qpid/cpp/src/tests/stop_cluster +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/bash - -# -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Stop brokers on ports listed in cluster.ports - -PORTS=`cat cluster.ports` -for PORT in $PORTS ; do - $QPIDD_EXEC --no-module-dir -qp $PORT || ERROR="$ERROR $PORT" -done -rm -f cluster.ports qpidd.port - -if [ -n "$ERROR" ]; then - echo "Errors stopping brokers on ports: $ERROR" - exit 1 -fi diff --git a/qpid/cpp/src/tests/verify_cluster_objects b/qpid/cpp/src/tests/verify_cluster_objects deleted file mode 100755 index 94661cf6b9..0000000000 --- a/qpid/cpp/src/tests/verify_cluster_objects +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env python - -# Licensed to the Apache Software Foundation (ASF) under one -# or more contributor license agreements. See the NOTICE file -# distributed with this work for additional information -# regarding copyright ownership. The ASF licenses this file -# to you under the Apache License, Version 2.0 (the -# "License"); you may not use this file except in compliance -# with the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, -# software distributed under the License is distributed on an -# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -# KIND, either express or implied. See the License for the -# specific language governing permissions and limitations -# under the License. -# - -# Verify managment objects are consistent in a cluster. -# Arguments: url of one broker in the cluster. - -import qmf.console, sys, re - -class Session(qmf.console.Session): - """A qmf.console.Session that caches useful values""" - - def __init__(self): - qmf.console.Session.__init__(self) - self.classes = None - - def all_classes(self): - if self.classes is None: - self.classes = [c for p in self.getPackages() for c in self.getClasses(p)] - return self.classes - -class Broker: - def __init__(self, url, qmf): - self.url = url - self.qmf = qmf - self.broker = self.qmf.addBroker(url) - self.broker._waitForStable() - self.objects = None - self.ignore_list = [ re.compile("org.apache.qpid.broker:system:") ] - - def get_objects(self): - def ignore(name): - for m in self.ignore_list: - if m.match(name): return True - if self.objects is None: - obj_list = [] - ignored=0 - for c in self.qmf.all_classes(): - for o in self.qmf.getObjects(_key=c, _broker=self.broker): - name=o.getObjectId().getObject() - if not ignore(name): obj_list.append(name) - else: ignored += 1 - self.objects = set(obj_list) - if (len(obj_list) != len(self.objects)): - raise Exception("Duplicates in object list for %s"%(self.url)) - print "%d objects on %s, ignored %d."%(len(self.objects), self.url, ignored) - return self.objects - - def compare(self,other): - def compare1(x,y): - diff = x.get_objects() - y.get_objects() - if diff: - print "ERROR: found on %s but not %s"%(x, y) - for o in diff: print " %s"%(o) - return False - return True - - so = compare1(self, other) - os = compare1(other, self) - return so and os - - def __str__(self): return self.url - - def get_cluster(self): - """Given one Broker, return list of all brokers in its cluster""" - clusters = self.qmf.getObjects(_class="cluster") - if not clusters: raise ("%s is not a cluster member"%(self.url)) - def first_address(url): - """Python doesn't understand the brokers URL syntax. Extract a simple addres""" - return re.compile("amqp:tcp:([^,]*)").match(url).group(1) - return [Broker(first_address(url), self.qmf) - for url in clusters[0].members.split(";")] - - def __del__(self): self.qmf.delBroker(self.broker) - -def main(argv=None): - if argv is None: argv = sys.argv - qmf = Session() - brokers = Broker(argv[1], qmf).get_cluster() - print "%d members in cluster."%(len(brokers)) - base = brokers.pop(0) - try: - for b in brokers: - if not base.compare(b): return 1 - print "No differences." - return 0 - finally: - del base - del brokers - -if __name__ == "__main__": sys.exit(main()) |