You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by gs...@apache.org on 2009/02/18 13:07:48 UTC

svn commit: r745486 - in /qpid/trunk/qpid/cpp/src/tests: Makefile.am cluster.mk federated_cluster_test

Author: gsim
Date: Wed Feb 18 12:07:48 2009
New Revision: 745486

URL: http://svn.apache.org/viewvc?rev=745486&view=rev
Log:
Added tests for federated links to and from a cluster


Added:
    qpid/trunk/qpid/cpp/src/tests/federated_cluster_test   (with props)
Modified:
    qpid/trunk/qpid/cpp/src/tests/Makefile.am
    qpid/trunk/qpid/cpp/src/tests/cluster.mk

Modified: qpid/trunk/qpid/cpp/src/tests/Makefile.am
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/Makefile.am?rev=745486&r1=745485&r2=745486&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/Makefile.am (original)
+++ qpid/trunk/qpid/cpp/src/tests/Makefile.am Wed Feb 18 12:07:48 2009
@@ -255,7 +255,7 @@
 # Longer running stability tests, not run by default check: target.
 # Not run under valgrind, too slow
 
-LONG_TESTS+=start_broker fanout_perftest shared_perftest multiq_perftest topic_perftest run_failover_soak reliable_replication_test stop_broker
+LONG_TESTS+=start_broker fanout_perftest shared_perftest multiq_perftest topic_perftest run_failover_soak stop_broker reliable_replication_test
 
 EXTRA_DIST+=fanout_perftest shared_perftest multiq_perftest topic_perftest run_failover_soak reliable_replication_test 
 

Modified: qpid/trunk/qpid/cpp/src/tests/cluster.mk
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/cluster.mk?rev=745486&r1=745485&r2=745486&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/cluster.mk (original)
+++ qpid/trunk/qpid/cpp/src/tests/cluster.mk Wed Feb 18 12:07:48 2009
@@ -29,8 +29,8 @@
 
 
 # ais_check checks pre-requisites for cluster tests and runs them if ok.
-TESTS+=ais_check
-EXTRA_DIST+=ais_check start_cluster stop_cluster restart_cluster cluster_python_tests cluster_python_tests_failing.txt
+TESTS+=ais_check federated_cluster_test
+EXTRA_DIST+=ais_check start_cluster stop_cluster restart_cluster cluster_python_tests cluster_python_tests_failing.txt federated_cluster_test
 
 check_PROGRAMS+=cluster_test
 cluster_test_SOURCES=unit_test.cpp cluster_test.cpp ClusterFixture.cpp ClusterFixture.h ForkedBroker.h ForkedBroker.cpp

Added: qpid/trunk/qpid/cpp/src/tests/federated_cluster_test
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/tests/federated_cluster_test?rev=745486&view=auto
==============================================================================
--- qpid/trunk/qpid/cpp/src/tests/federated_cluster_test (added)
+++ qpid/trunk/qpid/cpp/src/tests/federated_cluster_test Wed Feb 18 12:07:48 2009
@@ -0,0 +1,131 @@
+#!/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:
+MY_DIR=`dirname \`which $0\``
+PYTHON_DIR=${MY_DIR}/../../../python
+
+trap stop_brokers EXIT
+
+fail() {
+    echo $1
+    exit 1
+}
+
+stop_brokers() {
+    if [[ $BROKER_A ]] ; then
+        ../qpidd -q --port $BROKER_A
+        unset BROKER_A
+    fi      
+    if [[ $NODE_1 ]] ; then
+        ./stop_cluster
+        unset NODE_1
+    fi
+}
+
+start_brokers() {
+    #start single node...
+    ../qpidd --daemon --port 0 --no-data-dir --no-module-dir --auth no --log-enable info+ > fed.port.tmp
+    BROKER_A=`cat fed.port.tmp`
+
+    #...and start cluster
+    ./start_cluster 2 || fail "Could not start cluster"
+    NODE_1=$(head -1 cluster.ports)
+    NODE_2=$(tail -1 cluster.ports)
+}
+
+setup() {
+    #create exchange on both cluster and single broker
+    $PYTHON_DIR/commands/qpid-config -a "localhost:$BROKER_A" add exchange direct test-exchange
+    $PYTHON_DIR/commands/qpid-config -a "localhost:$NODE_1" add exchange direct test-exchange
+
+    #create dynamic routes for test exchange
+    $PYTHON_DIR/commands/qpid-route dynamic add "localhost:$NODE_1" "localhost:$BROKER_A" test-exchange
+    $PYTHON_DIR/commands/qpid-route dynamic add "localhost:$BROKER_A" "localhost:$NODE_1" test-exchange
+
+    #create test queue on cluster and bind it to the test exchange
+    $PYTHON_DIR/commands/qpid-config -a "localhost:$NODE_1" add queue test-queue
+    $PYTHON_DIR/commands/qpid-config -a "localhost:$NODE_1" bind test-exchange test-queue to-cluster
+
+    #create test queue on single broker and bind it to the test exchange
+    $PYTHON_DIR/commands/qpid-config -a "localhost:$BROKER_A" add queue test-queue
+    $PYTHON_DIR/commands/qpid-config -a "localhost:$BROKER_A" bind test-exchange test-queue from-cluster
+}
+
+run_test_pull_to_cluster() {
+    #start consumers on each of the two nodes of the cluster
+    ./receiver --port $NODE_1 --queue test-queue --credit-window 1 > fed1.out.tmp &
+    ./receiver --port $NODE_2 --queue test-queue --credit-window 1 > fed2.out.tmp &
+
+    #send stream of messages to test exchange on single broker
+    for i in `seq 1 1000`; do echo Message $i >> fed.in.tmp; done
+    ./sender --port $BROKER_A --exchange test-exchange --routing-key to-cluster --send-eos 2 < fed.in.tmp
+
+    #combine output of the two consumers, sort it and compare with the expected stream
+    wait
+    sort -g -k 2 fed1.out.tmp fed2.out.tmp > fed.out.tmp
+    diff fed.in.tmp fed.out.tmp || fail "federated link to cluster failed: expectations not met!"
+        
+    rm -f fed*.tmp #cleanup
+}
+
+run_test_pull_from_cluster() {
+    #start consumer on single broker
+    ./receiver --port $BROKER_A --queue test-queue --credit-window 1 > fed.out.tmp &
+
+    #send stream of messages to test exchange on cluster
+    for i in `seq 1 1000`; do echo Message $i >> fed.in.tmp; done
+    ./sender --port $NODE_2 --exchange test-exchange --routing-key from-cluster --send-eos 1 < fed.in.tmp
+
+    #verify all messages are received
+    wait
+    diff fed.in.tmp fed.out.tmp || fail "federated link from cluster failed: expectations not met!"
+        
+    rm -f fed*.tmp #cleanup
+}
+
+
+if test -d ${PYTHON_DIR}; then
+    id -nG | grep '\<ais\>' >/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 <<EOF
+Not running federation to cluster test because:
+    $NOGROUP
+    $NOAISEXEC
+EOF
+        exit 0;
+    fi
+
+    rm -f fed*.tmp #cleanup any files left from previous run
+    start_brokers
+    echo "brokers started"
+    setup
+    echo "setup completed"
+    run_test_pull_to_cluster    
+    echo "federated link to cluster verified"
+    run_test_pull_from_cluster    
+    echo "federated link from cluster verified"
+fi

Propchange: qpid/trunk/qpid/cpp/src/tests/federated_cluster_test
------------------------------------------------------------------------------
    svn:executable = *



---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project:      http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org