[AMQP 1.0] Update setup test environment dispatch router backend
This commit updates the setup environment for the driver functional tests to support either a qpidd (broker) or qdrouterd (router) backend. This patch: * configures and runs either qpidd or qdrouterd backend * removes support of older qpidd versions * skips batch notification test for qdrouterd backend Change-Id: Ifcdc187bae4a28dd29c1faa73e239d7e4d77015d
This commit is contained in:
parent
fcf114294b
commit
c5d142b441
@ -11,6 +11,7 @@
|
|||||||
# License for the specific language governing permissions and limitations
|
# License for the specific language governing permissions and limitations
|
||||||
# under the License.
|
# under the License.
|
||||||
|
|
||||||
|
import os
|
||||||
import time
|
import time
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
@ -331,6 +332,13 @@ class NotifyTestCase(utils.SkipIfNoTransportURL):
|
|||||||
self.assertEqual(expected[3], actual[2])
|
self.assertEqual(expected[3], actual[2])
|
||||||
|
|
||||||
def test_simple_batch(self):
|
def test_simple_batch(self):
|
||||||
|
if self.url.startswith("amqp:"):
|
||||||
|
backend = os.environ.get("AMQP1_BACKEND")
|
||||||
|
if backend == "qdrouterd":
|
||||||
|
# end-to-end acknowledgement with router intermediary
|
||||||
|
# sender pends until batch_size or timeout reached
|
||||||
|
self.skipTest("qdrouterd backend")
|
||||||
|
|
||||||
listener = self.useFixture(
|
listener = self.useFixture(
|
||||||
utils.BatchNotificationFixture(self.conf, self.url,
|
utils.BatchNotificationFixture(self.conf, self.url,
|
||||||
['test_simple_batch'],
|
['test_simple_batch'],
|
||||||
|
191
setup-test-env-amqp1.sh
Executable file
191
setup-test-env-amqp1.sh
Executable file
@ -0,0 +1,191 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
#
|
||||||
|
# Usage: setup-test-env-amqp.sh <command to run>
|
||||||
|
# where AMQP1_BACKEND is the AMQP 1.0 intermediary to use. Valid
|
||||||
|
# values are "qdrouterd" for router and "qpidd" for broker.
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# router requires qdrouterd, sasl2-bin/cyrus-sasl-plain+cyrus-sasl-lib
|
||||||
|
# broker requires qpidd, qpid-tools sasl2-bin/cyrus-sasl-plain+cyrus-sasl-lib
|
||||||
|
|
||||||
|
. tools/functions.sh
|
||||||
|
|
||||||
|
DATADIR=$(mktemp -d /tmp/OSLOMSG-${AMQP1_BACKEND}.XXXXX)
|
||||||
|
trap "clean_exit $DATADIR" EXIT
|
||||||
|
|
||||||
|
function _setup_qdrouterd_user {
|
||||||
|
echo secretqpid | saslpasswd2 -c -p -f ${DATADIR}/qdrouterd.sasldb stackqpid
|
||||||
|
}
|
||||||
|
|
||||||
|
function _setup_qpidd_user {
|
||||||
|
echo secretqpid | saslpasswd2 -c -p -f ${DATADIR}/qpidd.sasldb -u QPID stackqpid
|
||||||
|
}
|
||||||
|
|
||||||
|
function _configure_qdrouterd {
|
||||||
|
# create a stand alone router
|
||||||
|
cat > ${DATADIR}/qdrouterd.conf <<EOF
|
||||||
|
router {
|
||||||
|
mode: standalone
|
||||||
|
id: Router.A
|
||||||
|
workerThreads: 4
|
||||||
|
saslConfigPath: ${DATADIR}/sasl2
|
||||||
|
saslConfigName: qdrouterd
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# create a listener for incoming connect to the router
|
||||||
|
cat >> ${DATADIR}/qdrouterd.conf <<EOF
|
||||||
|
listener {
|
||||||
|
addr: 0.0.0.0
|
||||||
|
port: 65123
|
||||||
|
role: normal
|
||||||
|
authenticatePeer: yes
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
# create fixed address prefixes
|
||||||
|
cat >> ${DATADIR}/qdrouterd.conf <<EOF
|
||||||
|
address {
|
||||||
|
prefix: unicast
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: exclusive
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: broadcast
|
||||||
|
distribution: multicast
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/rpc/multicast
|
||||||
|
distribution: multicast
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/rpc/unicast
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/rpc/anycast
|
||||||
|
distribution: balanced
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/notify/multicast
|
||||||
|
distribution: multicast
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/notify/unicast
|
||||||
|
distribution: closest
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
prefix: openstack.org/om/notify/anycast
|
||||||
|
distribution: balanced
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
|
||||||
|
# create log file configuration
|
||||||
|
cat >> ${DATADIR}/qdrouterd.conf <<EOF
|
||||||
|
log {
|
||||||
|
module: DEFAULT
|
||||||
|
enable: trace+
|
||||||
|
output: ${DATADIR}/out
|
||||||
|
}
|
||||||
|
|
||||||
|
EOF
|
||||||
|
# sasl2 config
|
||||||
|
mkdir -p ${DATADIR}/sasl2
|
||||||
|
cat > ${DATADIR}/sasl2/qdrouterd.conf <<EOF
|
||||||
|
pwcheck_method: auxprop
|
||||||
|
auxprop_plugin: sasldb
|
||||||
|
sasldb_path: ${DATADIR}/qdrouterd.sasldb
|
||||||
|
mech_list: PLAIN ANONYMOUS
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function _configure_qpidd {
|
||||||
|
|
||||||
|
[ -f "/usr/lib/qpid/daemon/acl.so" ] && LIBACL="load-module=/usr/lib/qpid/daemon/acl.so"
|
||||||
|
|
||||||
|
cat > ${DATADIR}/qpidd.conf <<EOF
|
||||||
|
port=65123
|
||||||
|
sasl-config=${DATADIR}/sasl2
|
||||||
|
${LIBACL}
|
||||||
|
mgmt-enable=yes
|
||||||
|
log-to-stderr=no
|
||||||
|
EOF
|
||||||
|
|
||||||
|
if ! `$(which qpidd 2>/dev/null) --help | grep -q "sasl-service-name"`; then
|
||||||
|
echo "This version of $QPIDD does not support SASL authentication with AMQP 1.0"
|
||||||
|
cat >> ${DATADIR}/qpidd.conf <<EOF
|
||||||
|
auth=no
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
cat >> ${DATADIR}/qpidd.conf <<EOF
|
||||||
|
auth=yes
|
||||||
|
acl-file=${DATADIR}/qpidd.acl
|
||||||
|
sasl-service-name=amqp
|
||||||
|
EOF
|
||||||
|
fi
|
||||||
|
|
||||||
|
cat >> ${DATADIR}/qpidd.conf <<EOF
|
||||||
|
queue-patterns=exclusive
|
||||||
|
queue-patterns=unicast
|
||||||
|
topic-patterns=broadcast
|
||||||
|
EOF
|
||||||
|
|
||||||
|
cat > ${DATADIR}/qpidd.acl <<EOF
|
||||||
|
group admin stackqpid@QPID
|
||||||
|
acl allow admin all
|
||||||
|
acl deny all all
|
||||||
|
EOF
|
||||||
|
|
||||||
|
mkdir -p ${DATADIR}/sasl2
|
||||||
|
cat > ${DATADIR}/sasl2/qpidd.conf <<EOF
|
||||||
|
pwcheck_method: auxprop
|
||||||
|
auxprop_plugin: sasldb
|
||||||
|
sasldb_path: ${DATADIR}/qpidd.sasldb
|
||||||
|
mech_list: PLAIN ANONYMOUS
|
||||||
|
EOF
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function _start_qdrouterd {
|
||||||
|
MAJOR=$(python -c 'import sys; print sys.version_info.major')
|
||||||
|
MINOR=$(python -c 'import sys; print sys.version_info.minor')
|
||||||
|
# qdrouterd needs access to global site packages
|
||||||
|
# create path file and place in virtual env working directory
|
||||||
|
SITEDIR=${WORKDIR}/${ENVNAME}/lib/python${MAJOR}.${MINOR}/site-packages
|
||||||
|
cat > ${SITEDIR}/dispatch.pth <<EOF
|
||||||
|
/usr/lib/python${MAJOR}.${MINOR}/site-packages
|
||||||
|
EOF
|
||||||
|
|
||||||
|
QDR=$(which qdrouterd 2>/dev/null)
|
||||||
|
mkfifo ${DATADIR}/out
|
||||||
|
$QDR --config ${DATADIR}/qdrouterd.conf &
|
||||||
|
wait_for_line "Router .*started" "error" ${DATADIR}/out
|
||||||
|
rm ${SITEDIR}/dispatch.pth
|
||||||
|
}
|
||||||
|
|
||||||
|
function _start_qpidd {
|
||||||
|
QPIDD=$(which qpidd 2>/dev/null)
|
||||||
|
mkfifo ${DATADIR}/out
|
||||||
|
$QPIDD --log-enable trace+ --log-to-file ${DATADIR}/out --config ${DATADIR}/qpidd.conf &
|
||||||
|
wait_for_line "Broker .*running" "error" ${DATADIR}/out
|
||||||
|
}
|
||||||
|
|
||||||
|
_configure_${AMQP1_BACKEND}
|
||||||
|
_setup_${AMQP1_BACKEND}_user
|
||||||
|
_start_${AMQP1_BACKEND}
|
||||||
|
|
||||||
|
$*
|
@ -1,115 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
#
|
|
||||||
# Usage: setup-test-env-qpid.sh PROTOCOL <command to run>
|
|
||||||
# where PROTOCOL is the version of the AMQP protocol to use with
|
|
||||||
# qpidd. Valid values for PROTOCOL are "1", "1.0", "0-10", "0.10"
|
|
||||||
set -e
|
|
||||||
|
|
||||||
# require qpidd, qpid-tools sasl2-bin/cyrus-sasl-plain+cyrus-sasl-lib
|
|
||||||
|
|
||||||
. tools/functions.sh
|
|
||||||
|
|
||||||
DATADIR=$(mktemp -d /tmp/OSLOMSG-QPID.XXXXX)
|
|
||||||
trap "clean_exit $DATADIR" EXIT
|
|
||||||
|
|
||||||
QPIDD=$(which qpidd 2>/dev/null)
|
|
||||||
|
|
||||||
# which protocol should be used with qpidd?
|
|
||||||
# 1 for AMQP 1.0, 0.10 for AMQP 0.10
|
|
||||||
#
|
|
||||||
PROTOCOL=$1
|
|
||||||
case $PROTOCOL in
|
|
||||||
"1" | "1.0")
|
|
||||||
PROTOCOL="1"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
"0.10" | "0-10")
|
|
||||||
PROTOCOL="0-10"
|
|
||||||
shift
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
# assume the old protocol
|
|
||||||
echo "No protocol specified, assuming 0.10"
|
|
||||||
PROTOCOL="0-10"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
|
|
||||||
# ensure that the version of qpidd does support AMQP 1.0
|
|
||||||
if [ $PROTOCOL == "1" ] && ! `$QPIDD --help | grep -q "queue-patterns"`; then
|
|
||||||
echo "This version of $QPIDD does not support AMQP 1.0"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
[ -f "/usr/lib/qpid/daemon/acl.so" ] && LIBACL="load-module=/usr/lib/qpid/daemon/acl.so"
|
|
||||||
|
|
||||||
cat > ${DATADIR}/qpidd.conf <<EOF
|
|
||||||
port=65123
|
|
||||||
sasl-config=${DATADIR}/sasl2
|
|
||||||
${LIBACL}
|
|
||||||
mgmt-enable=yes
|
|
||||||
log-to-stderr=no
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# sadly, older versions of qpidd (<=0.32) cannot authenticate against
|
|
||||||
# newer versions of proton (>=0.10). If this version of qpidd does
|
|
||||||
# not support the fix, then do not require authentication
|
|
||||||
|
|
||||||
if [ $PROTOCOL == "1" ] && ! `$QPIDD --help | grep -q "sasl-service-name"`; then
|
|
||||||
echo "This version of $QPIDD does not support SASL authentication with AMQP 1.0"
|
|
||||||
cat >> ${DATADIR}/qpidd.conf <<EOF
|
|
||||||
auth=no
|
|
||||||
EOF
|
|
||||||
else
|
|
||||||
cat >> ${DATADIR}/qpidd.conf <<EOF
|
|
||||||
auth=yes
|
|
||||||
acl-file=${DATADIR}/qpidd.acl
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ $PROTOCOL == "1" ]; then
|
|
||||||
cat >> ${DATADIR}/qpidd.conf <<EOF
|
|
||||||
# Used by AMQP1.0 only
|
|
||||||
queue-patterns=exclusive
|
|
||||||
queue-patterns=unicast
|
|
||||||
topic-patterns=broadcast
|
|
||||||
EOF
|
|
||||||
# versions of qpidd >0.32 require this for AMQP 1 and SASL:
|
|
||||||
if `$QPIDD --help | grep -q "sasl-service-name"`; then
|
|
||||||
cat >> ${DATADIR}/qpidd.conf <<EOF
|
|
||||||
sasl-service-name=amqp
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat > ${DATADIR}/qpidd.acl <<EOF
|
|
||||||
group admin stackqpid@QPID
|
|
||||||
acl allow admin all
|
|
||||||
acl deny all all
|
|
||||||
EOF
|
|
||||||
|
|
||||||
mkdir -p ${DATADIR}/sasl2
|
|
||||||
cat > ${DATADIR}/sasl2/qpidd.conf <<EOF
|
|
||||||
pwcheck_method: auxprop
|
|
||||||
auxprop_plugin: sasldb
|
|
||||||
sasldb_path: ${DATADIR}/qpidd.sasldb
|
|
||||||
EOF
|
|
||||||
|
|
||||||
# TODO(kgiusti): we can remove "ANONYMOUS" once proton 0.10.1+ is released:
|
|
||||||
# https://issues.apache.org/jira/browse/PROTON-974
|
|
||||||
if [ $PROTOCOL == "1" ]; then
|
|
||||||
cat >> ${DATADIR}/sasl2/qpidd.conf <<EOF
|
|
||||||
mech_list: PLAIN ANONYMOUS
|
|
||||||
EOF
|
|
||||||
else
|
|
||||||
cat >> ${DATADIR}/sasl2/qpidd.conf <<EOF
|
|
||||||
mech_list: PLAIN
|
|
||||||
EOF
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo secretqpid | saslpasswd2 -c -p -f ${DATADIR}/qpidd.sasldb -u QPID stackqpid
|
|
||||||
|
|
||||||
mkfifo ${DATADIR}/out
|
|
||||||
$QPIDD --log-enable info+ --log-to-file ${DATADIR}/out --config ${DATADIR}/qpidd.conf &
|
|
||||||
wait_for_line "Broker .*running" "error" ${DATADIR}/out
|
|
||||||
|
|
||||||
$*
|
|
24
tox.ini
24
tox.ini
@ -43,21 +43,33 @@ setenv = TRANSPORT_DRIVER=pika
|
|||||||
commands = pifpaf run rabbitmq -- python setup.py testr --slowest --testr-args='{posargs:oslo_messaging.tests.functional}'
|
commands = pifpaf run rabbitmq -- python setup.py testr --slowest --testr-args='{posargs:oslo_messaging.tests.functional}'
|
||||||
|
|
||||||
[testenv:py27-func-amqp1]
|
[testenv:py27-func-amqp1]
|
||||||
setenv = TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123//
|
setenv =
|
||||||
|
TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123//
|
||||||
|
AMQP1_BACKEND=qpidd
|
||||||
|
ENVNAME={envname}
|
||||||
|
WORKDIR={toxworkdir}
|
||||||
# NOTE(kgiusti): This gate job runs on Centos 7 for now.
|
# NOTE(kgiusti): This gate job runs on Centos 7 for now.
|
||||||
commands = {toxinidir}/setup-test-env-qpid.sh 1.0 python setup.py testr --slowest --testr-args='{posargs:oslo_messaging.tests.functional}'
|
commands = {toxinidir}/setup-test-env-amqp1.sh python setup.py testr --slowest --testr-args='oslo_messaging.tests.functional'
|
||||||
|
|
||||||
[testenv:py34-func-amqp1]
|
[testenv:py34-func-amqp1]
|
||||||
basepython = python3.4
|
basepython = python3.4
|
||||||
setenv = TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123//
|
setenv =
|
||||||
|
TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123//
|
||||||
|
AMQP1_BACKEND=qpidd
|
||||||
|
ENVNAME={envname}
|
||||||
|
WORKDIR={toxworkdir}
|
||||||
# NOTE(kgiusti): This gate job runs on Centos 7 for now.
|
# NOTE(kgiusti): This gate job runs on Centos 7 for now.
|
||||||
commands = {toxinidir}/setup-test-env-qpid.sh 1.0 python setup.py testr --slowest --testr-args='{posargs:oslo_messaging.tests.functional}'
|
commands = {toxinidir}/setup-test-env-amqp1.sh python setup.py testr --slowest --testr-args='oslo_messaging.tests.functional'
|
||||||
|
|
||||||
[testenv:py35-func-amqp1]
|
[testenv:py35-func-amqp1]
|
||||||
basepython = python3.5
|
basepython = python3.5
|
||||||
setenv = TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123//
|
setenv =
|
||||||
|
TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123//
|
||||||
|
AMQP1_BACKEND=qpidd
|
||||||
|
ENVNAME={envname}
|
||||||
|
WORKDIR={toxworkdir}
|
||||||
# NOTE(kgiusti): This gate job runs on Centos 7 for now.
|
# NOTE(kgiusti): This gate job runs on Centos 7 for now.
|
||||||
commands = {toxinidir}/setup-test-env-qpid.sh 1.0 python setup.py testr --slowest --testr-args='{posargs:oslo_messaging.tests.functional}'
|
commands = {toxinidir}/setup-test-env-amqp1.sh python setup.py testr --slowest --testr-args='oslo_messaging.tests.functional'
|
||||||
|
|
||||||
[testenv:py27-func-zeromq]
|
[testenv:py27-func-zeromq]
|
||||||
commands = {toxinidir}/setup-test-env-zmq.sh python setup.py testr --slowest --testr-args='{posargs:oslo_messaging.tests.functional}'
|
commands = {toxinidir}/setup-test-env-zmq.sh python setup.py testr --slowest --testr-args='{posargs:oslo_messaging.tests.functional}'
|
||||||
|
Loading…
Reference in New Issue
Block a user