| #!/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. |
| # |
| |
| # 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 |
| VERBOSE=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 |
| |
| source ./env.sh |
| |
| trap stop_brokers EXIT |
| |
| start_broker() { |
| qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --no-data-dir --auth no > qpidd.port |
| } |
| |
| start_brokers() { |
| start_broker |
| PORT_A=`cat qpidd.port` |
| start_broker |
| PORT_B=`cat qpidd.port` |
| start_broker |
| PORT_C=`cat qpidd.port` |
| } |
| |
| stop_brokers() { |
| for p in $PORT_A $PORT_B $PORT_C; do |
| qpidd --no-module-dir -q --port $p |
| done |
| } |
| |
| 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" |
| qpid-topic-listener -p $MY_PORT > $LOG 2>&1 && rm -f $LOG |
| } |
| |
| publish() { |
| qpid-topic-publisher --messages $MESSAGES --batches $BATCHES --subscribers $SUBSCRIBERS -p $PORT_A |
| } |
| |
| setup_routes() { |
| BROKER_A="daffodil:$PORT_A" |
| BROKER_B="daffodil:$PORT_B" |
| BROKER_C="daffodil:$PORT_C" |
| if (($VERBOSE)); then |
| echo "Establishing routes for topic..." |
| fi |
| qpid-route route add $BROKER_B $BROKER_A amq.topic topic_control B B |
| qpid-route route add $BROKER_C $BROKER_B amq.topic topic_control C C |
| if (($VERBOSE)); then |
| echo "linked A->B->C" |
| fi |
| qpid-route route add $BROKER_B $BROKER_C amq.topic topic_control B B |
| qpid-route route add $BROKER_A $BROKER_B amq.topic topic_control A A |
| if (($VERBOSE)); then |
| echo "linked C->B->A" |
| echo "Establishing routes for response queue..." |
| fi |
| |
| qpid-route route add $BROKER_B $BROKER_C amq.direct response B B |
| qpid-route route add $BROKER_A $BROKER_B amq.direct response A A |
| if (($VERBOSE)); then |
| echo "linked C->B->A" |
| for b in $BROKER_A $BROKER_B $BROKER_C; do |
| echo "Routes for $b" |
| qpid-route route list $b |
| done |
| fi |
| } |
| |
| start_brokers |
| |
| if (($VERBOSE)); then |
| echo "Running federated topic test against brokers on ports $PORT_A $PORT_B $PORT_C" |
| fi |
| |
| for ((i=$SUBSCRIBERS ; i--; )); do |
| subscribe $i & |
| done |
| |
| setup_routes |
| |
| publish || exit 1 |