#!/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. # # Test reliability of the replication feature in the face of link # failures: srcdir=`dirname $0` PYTHON_DIR=$srcdir/../../../python export PYTHONPATH=$PYTHON_DIR trap stop_brokers INT EXIT fail() { echo $1 exit 1 } with_ais_group() { id -nG | grep '\' >/dev/null || { echo "You are not a member of the ais group." 1>&2; exit 1; } echo $* | newgrp ais } stop_brokers() { if [[ $PRIMARY1 ]] ; then ../qpidd -q --port $PRIMARY1 unset PRIMARY1 fi if [[ $PRIMARY2 ]] ; then ../qpidd -q --port $PRIMARY2 unset PRIMARY2 fi if [[ $DR1 ]] ; then ../qpidd -q --port $DR1 unset DR1 fi if [[ $DR2 ]] ; then ../qpidd -q --port $DR2 unset DR2 fi } if test -d ${PYTHON_DIR}; then id -nG | grep '\' >/dev/null || \ NOGROUP="You are not a member of the ais group." ps -u root | grep 'aisexec\|corosync' >/dev/null || \ NOAISEXEC="The aisexec or corosync daemon is not running as root" if test -n "$NOGROUP" -o -n "$NOAISEXEC"; then cat < /dev/null #add new node to primary cluster, testing correct transfer of state: echo Adding node to primary cluster PRIMARY2=$(with_ais_group ../qpidd $GENERAL_OPTS $PRIMARY_OPTS --log-to-file repl.primary.2.tmp) #start DR cluster, set up test queue there and establish replication bridge echo Starting DR cluster DR1=$(with_ais_group ../qpidd $GENERAL_OPTS $DR_OPTS --log-to-file repl.dr.1.tmp) DR2=$(with_ais_group ../qpidd $GENERAL_OPTS $DR_OPTS --log-to-file repl.dr.2.tmp) $PYTHON_DIR/commands/qpid-config -a "localhost:$DR1" add queue test-queue $PYTHON_DIR/commands/qpid-config -a "localhost:$DR1" add queue control-queue $PYTHON_DIR/commands/qpid-config -a "localhost:$DR1" add exchange replication REPLICATION_EXCHANGE $PYTHON_DIR/commands/qpid-route queue add localhost:$DR2 localhost:$PRIMARY2 REPLICATION_EXCHANGE REPLICATION_QUEUE #send more messages to primary for i in `seq 11 20`; do echo Message$i; done | ./sender --port $PRIMARY1 --send-eos 1 #wait for replication events to all be processed: echo Waiting for replication to complete echo Done | ./sender --port $PRIMARY1 --routing-key control-queue --send-eos 1 ./receiver --queue control-queue --port $DR1 > /dev/null #verify contents of test queue on dr cluster: echo Verifying... ./receiver --port $DR2 > repl.out.tmp for i in `seq 6 20`; do echo Message$i; done | diff repl.out.tmp - || FAIL=1 if [[ $FAIL ]]; then echo Clustered replication test failed: expectations not met! exit 1 else echo Clustered replication test passed rm -f repl*.tmp fi fi