diff options
Diffstat (limited to 'trunk/qpid/cpp/src/tests/federated_topic_test')
-rwxr-xr-x | trunk/qpid/cpp/src/tests/federated_topic_test | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/trunk/qpid/cpp/src/tests/federated_topic_test b/trunk/qpid/cpp/src/tests/federated_topic_test new file mode 100755 index 0000000000..dbb4a2a133 --- /dev/null +++ b/trunk/qpid/cpp/src/tests/federated_topic_test @@ -0,0 +1,94 @@ +#!/bin/sh +# Run the topic test on a federated setup + +# Clean up old log files +rm -f subscriber_*.log + +# Defaults values +SUBSCRIBERS=2 +MESSAGES=1000 +BATCHES=1 + +while getopts "s:m:b:" opt ; do + case $opt in + s) SUBSCRIBERS=$OPTARG ;; + m) MESSAGES=$OPTARG ;; + b) BATCHES=$OPTARG ;; + ?) + echo "Usage: %0 [-s <subscribers>] [-m <messages.] [-b <batches>]" + exit 1 + ;; + esac +done + +MY_DIR=$(dirname $(which $0)) +PYTHON_DIR=${MY_DIR}/../../../python + +trap stop_brokers EXIT + +start_brokers() { + ${MY_DIR}/../qpidd --daemon --port 0 --no-module-dir --no-data-dir --auth no > qpidd.port + PORT_A=`cat qpidd.port` + ${MY_DIR}/../qpidd --daemon --port 0 --no-module-dir --no-data-dir --auth no > qpidd.port + PORT_B=`cat qpidd.port` + ${MY_DIR}/../qpidd --daemon --port 0 --no-module-dir --no-data-dir --auth no > qpidd.port + PORT_C=`cat qpidd.port` +} + +stop_brokers() { + ${MY_DIR}/../qpidd -q --port $PORT_A + ${MY_DIR}/../qpidd -q --port $PORT_B + ${MY_DIR}/../qpidd -q --port $PORT_C +} + +subscribe() { + #which broker should we connect to? + if (( $1 % 2 )); then + MY_PORT=$PORT_C; + else + MY_PORT=$PORT_A; + fi + + echo Subscriber $1 connecting on $MY_PORT + LOG="subscriber_$1.log" + ${MY_DIR}/topic_listener -p $MY_PORT > $LOG 2>&1 && rm -f $LOG +} + +publish() { + ${MY_DIR}/topic_publisher --messages $MESSAGES --batches $BATCHES --subscribers $SUBSCRIBERS -p $PORT_A +} + +setup_routes() { + BROKER_A="localhost:$PORT_A" + BROKER_B="localhost:$PORT_B" + BROKER_C="localhost:$PORT_C" + export PYTHONPATH=$PYTHON_DIR:$PYTHONPATH + echo "Establishing routes for topic..." + $PYTHON_DIR/commands/qpid-route add $BROKER_B $BROKER_A amq.topic topic_control B B + $PYTHON_DIR/commands/qpid-route add $BROKER_C $BROKER_B amq.topic topic_control C C + echo "linked A->B->C" + $PYTHON_DIR/commands/qpid-route add $BROKER_B $BROKER_C amq.topic topic_control B B + $PYTHON_DIR/commands/qpid-route add $BROKER_A $BROKER_B amq.topic topic_control A A + echo "linked C->B->A" + + echo "Establishing routes for response queue..." + $PYTHON_DIR/commands/qpid-route add $BROKER_B $BROKER_C amq.direct response B B + $PYTHON_DIR/commands/qpid-route add $BROKER_A $BROKER_B amq.direct response A A + echo "linked C->B->A" +} + +if test -d ${PYTHON_DIR} ; then + start_brokers + echo "Running federated topic test against brokers on ports $PORT_A $PORT_B $PORT_C" + + setup_routes + + for ((i=$SUBSCRIBERS ; i--; )); do + subscribe $i & + done + + #sleep to give subscribers time to get initialised + sleep 1 + + publish 2>&1 || exit 1 +fi |