blob: d75d50fd0a9889fba16d3c35cd08db632b4b5953 [file] [log] [blame]
#!/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.
#
# Run a simple test over IPv6
source ./test_env.sh
CONFIG=$(dirname $0)/config.null
TEST_HOSTNAME=::1
COUNT=10
trap cleanup EXIT
error() { echo $*; exit 1; }
# Don't need --no-module-dir or --no-data-dir as they are set as env vars in test_env.sh
COMMON_OPTS="--daemon --auth no --config $CONFIG"
# Record all broker ports started
unset PORTS
declare -a PORTS
# Start new brokers:
# $1 must be integer
# $2 = extra opts
# Append used ports to PORTS variable
start_brokers() {
local -a ports
for (( i=0; $i<$1; i++)) do
ports[$i]=$($QPIDD_EXEC --port 0 $COMMON_OPTS $2)
done
PORTS=( ${PORTS[@]} ${ports[@]} )
}
stop_brokers() {
for port in "${PORTS[@]}";
do
$QPIDD_EXEC -qp $port
done
PORTS=()
}
cleanup() {
stop_brokers
}
start_brokers 1
PORT=${PORTS[0]}
echo "Started IPv6 smoke perftest on broker port $PORT"
## Test connection via connection settings
./qpid-perftest --count ${COUNT} --port ${PORT} -b $TEST_HOSTNAME --summary
## Test connection with a URL
URL="amqp:[$TEST_HOSTNAME]:$PORT"
./qpid-send -b $URL --content-string=hello -a "foo;{create:always}"
MSG=`./qpid-receive -b $URL -a "foo;{create:always}" --messages 1`
test "$MSG" = "hello" || { echo "receive failed '$MSG' != 'hello'"; exit 1; }
stop_brokers
# Federation smoke test follows
# Start 2 brokers
# In a distribution, the python tools will be absent.
if [ ! -f $QPID_CONFIG_EXEC ] || [ ! -f $QPID_ROUTE_EXEC ] ; then
echo "python tools absent - skipping federation test."
else
start_brokers 2
echo "Started Federated brokers on ports ${PORTS[*]}"
# Make broker urls
BROKER0="[::1]:${PORTS[0]}"
BROKER1="[::1]:${PORTS[1]}"
TEST_QUEUE=ipv6-fed-test
$QPID_CONFIG_EXEC -a $BROKER0 add queue $TEST_QUEUE
$QPID_CONFIG_EXEC -a $BROKER1 add queue $TEST_QUEUE
$QPID_ROUTE_EXEC dynamic add $BROKER1 $BROKER0 amq.direct
$QPID_CONFIG_EXEC -a $BROKER1 bind amq.direct $TEST_QUEUE $TEST_QUEUE
$QPID_ROUTE_EXEC route map $BROKER1
./datagen --count 100 | tee rdata-in |
./qpid-send -b amqp:$BROKER0 -a amq.direct/$TEST_QUEUE --content-stdin
./qpid-receive -b amqp:$BROKER1 -a $TEST_QUEUE --print-content yes -m 0 > rdata-out
cmp rdata-in rdata-out || { echo "Federated data over IPv6 does not compare"; exit 1; }
stop_brokers
rm rdata-in rdata-out
fi
# Cluster smoke test follows
test -z $CLUSTER_LIB && exit 0 # Exit if cluster not supported.
## Test failover in a cluster using IPv6 only
. $srcdir/ais_check # Will exit if clustering not enabled.
pick_port() {
# We need a fixed port to set --cluster-url. Use qpidd to pick a free port.
# Note this method is racy
PICK=$($QPIDD_EXEC -dp0)
$QPIDD_EXEC -qp $PICK
echo $PICK
}
ssl_cluster_broker() { # $1 = port
$QPIDD_EXEC $COMMON_OPTS --load-module $CLUSTER_LIB --cluster-name ipv6_test.$HOSTNAME.$$ --cluster-url amqp:[$TEST_HOSTNAME]:$1 --port $1
# Wait for broker to be ready
./qpid-ping -b $TEST_HOSTNAME -qp $1 || { echo "Cannot connect to broker on $1"; exit 1; }
echo "Running IPv6 cluster broker on port $1"
}
PORT1=`pick_port`; ssl_cluster_broker $PORT1
PORT2=`pick_port`; ssl_cluster_broker $PORT2
# Pipe receive output to uniq to remove duplicates
./qpid-receive --connection-options "{reconnect:true, reconnect-timeout:5}" --failover-updates -b amqp:[$TEST_HOSTNAME]:$PORT1 -a "foo;{create:always}" -f | uniq > ssl_test_receive.tmp &
./qpid-send -b amqp:[$TEST_HOSTNAME]:$PORT2 --content-string=one -a "foo;{create:always}"
$QPIDD_EXEC -qp $PORT1 # Kill broker 1 receiver should fail-over.
./qpid-send -b amqp:[$TEST_HOSTNAME]:$PORT2 --content-string=two -a "foo;{create:always}" --send-eos 1
wait # Wait for qpid-receive
{ echo one; echo two; } > ssl_test_receive.cmp
diff ssl_test_receive.tmp ssl_test_receive.cmp || { echo "Failover failed"; exit 1; }
$QPIDD_EXEC -qp $PORT2
rm -f ssl_test_receive.*