diff --git a/bindep.txt b/bindep.txt index c5ad6cb9e..88e9a89ff 100644 --- a/bindep.txt +++ b/bindep.txt @@ -15,20 +15,21 @@ rabbitmq-server [platform:dpkg rabbit] rabbitmq-server [platform:rpm rabbit] # AMQP1 dpkg -qpidd [platform:dpkg amqp1] +qdrouterd [platform:dpkg amqp1] sasl2-bin [platform:dpkg amqp1] uuid-dev [platform:dpkg amqp1] swig [platform:dpkg amqp1] libsasl2-modules [platform:dpkg amqp1] +openjdk-8-jdk [platform:dpkg amqp1] # AMQP1 rpm -qpid-cpp-server [platform:rpm amqp1] -qpid-proton-c-devel [platform:rpm amqp1] +qpid-dispatch-router [platform:rpm amqp1] python-qpid-proton [platform:rpm amqp1] cyrus-sasl-lib [platform:rpm amqp1] cyrus-sasl-plain [platform:rpm amqp1] libuuid-devel [platform:rpm amqp1] swig [platform:rpm amqp1] +java-1.8.0-openjdk [platform:rpm amqp1] # kafka dpkg openjdk-8-jdk [platform:dpkg kafka] diff --git a/lower-constraints.txt b/lower-constraints.txt index 69c9e5e1c..3df8f1a83 100644 --- a/lower-constraints.txt +++ b/lower-constraints.txt @@ -54,7 +54,7 @@ Paste==2.0.2 PasteDeploy==1.5.0 pbr==2.0.0 pep8==1.5.7 -pifpaf==0.10.0 +pifpaf==2.2.0 prettytable==0.7.2 pycparser==2.18 pyflakes==0.8.1 diff --git a/oslo_messaging/_drivers/amqp1_driver/addressing.py b/oslo_messaging/_drivers/amqp1_driver/addressing.py index 3661b63a4..80f0b31e2 100644 --- a/oslo_messaging/_drivers/amqp1_driver/addressing.py +++ b/oslo_messaging/_drivers/amqp1_driver/addressing.py @@ -35,7 +35,6 @@ that traffic can be partitioned based on its use. import abc import logging -from oslo_messaging._i18n import _LW from oslo_messaging.target import Target __all__ = [ @@ -276,15 +275,6 @@ class AddresserFactory(object): # overridden via the configuration. product = remote_properties.get('product', 'qpid-cpp') - # TODO(kgiusti): Router support was added in Newton. Remove this - # warning post Newton, once the driver has stabilized. - if product == "qpid-dispatch-router": - w = _LW("This is the initial release of support for message" - " routing technology. Be aware that messages are not" - " queued and may be discarded if there are no consumers" - " present.") - LOG.warning(w) - if self._mode == 'legacy' or (self._mode == 'dynamic' and product == 'qpid-cpp'): return LegacyAddresser(self._default_exchange, diff --git a/test-requirements.txt b/test-requirements.txt index c3fe3192d..e3852f54d 100644 --- a/test-requirements.txt +++ b/test-requirements.txt @@ -11,7 +11,7 @@ stestr>=2.0.0 # Apache-2.0 testscenarios>=0.4 # Apache-2.0/BSD testtools>=2.2.0 # MIT oslotest>=3.2.0 # Apache-2.0 -pifpaf>=0.10.0 # Apache-2.0 +pifpaf>=2.2.0 # Apache-2.0 # for test_impl_kafka confluent-kafka>=0.11.6 # Apache-2.0 diff --git a/tools/setup-test-env-amqp1.sh b/tools/setup-test-env-amqp1.sh index 913d5ea25..e5d9f11dd 100755 --- a/tools/setup-test-env-amqp1.sh +++ b/tools/setup-test-env-amqp1.sh @@ -1,212 +1,41 @@ #!/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. +# Configuration files for the qdrouterd and artemis backends generated +# by pifpaf driver fixtures (https://github.com/jd/pifpaf) 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 +ARTEMIS_VERSION=${ARTEMIS_VERSION:-"2.6.4"} -function _setup_qdrouterd_user { - echo secretqpid | saslpasswd2 -c -p -f ${DATADIR}/qdrouterd.sasldb stackqpid -} +if [[ -z "$(which artemis)" ]]; then + DATADIR=$(mktemp -d /tmp/OSLOMSG-ARTEMIS.XXXXX) + trap "clean_exit $DATADIR" EXIT -function _setup_qpidd_user { - echo secretqpid | saslpasswd2 -c -p -f ${DATADIR}/qpidd.sasldb -u QPID stackqpid -} + tarball=apache-artemis-${ARTEMIS_VERSION}-bin.tar.gz -function _configure_qdrouterd { - - QDR=$(type -p qdrouterd) - if [[ ! -x "$QDR" ]]; then - echo "FAILURE: Qpid Dispatch Router (qdrouterd) not installed" - exit 1 - fi - - # 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 - # ip address field name changed to 'host' at 1.0+ - local field_name - field_name=$([[ $($QDR -v) == 0.*.* ]] && echo addr || echo host) - - cat >> ${DATADIR}/qdrouterd.conf <<EOF -listener { - ${field_name}: 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 { - - QPIDD=$(which qpidd 2>/dev/null) - if [[ ! -x "$QPIDD" ]]; then - echo "FAILURE: qpidd broker not installed" - 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 -data-dir=${DATADIR}/.qpidd -pid-dir=${DATADIR}/.qpidd -EOF - -if ! `$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 -sasl-service-name=amqp -EOF + wget http://archive.apache.org/dist/activemq/activemq-artemis/${ARTEMIS_VERSION}/$tarball -O $DATADIR/$tarball + tar -xzf $DATADIR/$tarball -C $DATADIR + export PATH=$DATADIR/apache-artemis-${ARTEMIS_VERSION}/bin:$PATH 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 -sql_select: dummy select -EOF - -} - -function _start_qdrouterd { +# TODO(ansmith) look to move this to pifpaf driver +function _setup_global_site_package_path { MAJOR=$(python -c 'import sys; print(sys.version_info.major)') MINOR=$(python -c 'import sys; print(sys.version_info.minor)') + if [ -f "/etc/debian_version" ]; then + PRE="dist" + else + PRE="site" + fi # 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 +/usr/lib/python${MAJOR}.${MINOR}/${PRE}-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 { - chmod -R a+r ${DATADIR} - 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} - -$* +_setup_global_site_package_path +pifpaf --env-prefix ARTEMIS run artemis -- pifpaf --debug --env-prefix QDR run qdrouterd --username stackqpid --password secretqpid -- $* diff --git a/tox.ini b/tox.ini index 82405bb48..4478c1e47 100644 --- a/tox.ini +++ b/tox.ini @@ -67,8 +67,7 @@ commands = {toxinidir}/setup-test-env-kafka.sh stestr run --slowest {posargs:osl basepython = python2.7 setenv = {[testenv]setenv} - TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123// - AMQP1_BACKEND=qpidd + TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:5672// ENVNAME={envname} WORKDIR={toxworkdir} commands = {toxinidir}/tools/setup-test-env-amqp1.sh stestr run --slowest {posargs:oslo_messaging.tests.functional} @@ -77,8 +76,7 @@ commands = {toxinidir}/tools/setup-test-env-amqp1.sh stestr run --slowest {posar basepython = python3.5 setenv = {[testenv]setenv} - TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:65123// - AMQP1_BACKEND=qpidd + TRANSPORT_URL=amqp://stackqpid:secretqpid@127.0.0.1:5672// ENVNAME={envname} WORKDIR={toxworkdir} commands = {toxinidir}/tools/setup-test-env-amqp1.sh stestr run --slowest {posargs:oslo_messaging.tests.functional}