diff options
author | Justin Ross <jross@apache.org> | 2016-04-21 12:31:34 +0000 |
---|---|---|
committer | Justin Ross <jross@apache.org> | 2016-04-21 12:31:34 +0000 |
commit | 71149592670f7592886751a9a866459bef0f12cc (patch) | |
tree | e4d1fd948055e36d1560112a318e77a210506d06 | |
parent | a835fb2724824dcd8a470fb51424cedeb6b38f62 (diff) | |
download | qpid-python-71149592670f7592886751a9a866459bef0f12cc.tar.gz |
QPID-7207: Create independent cpp and python subtrees, with content from tools and extras
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1740289 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r-- | qpid/cpp/CMakeLists.txt | 4 | ||||
-rw-r--r-- | qpid/cpp/CTestCustom.cmake | 1 | ||||
-rw-r--r-- | qpid/cpp/INSTALL.txt | 4 | ||||
-rw-r--r-- | qpid/cpp/management/python/.gitignore | 3 | ||||
-rw-r--r-- | qpid/cpp/management/python/CMakeLists.txt (renamed from qpid/cpp/docs/design/CONTENTS) | 21 | ||||
-rw-r--r-- | qpid/cpp/management/python/LICENSE.txt (renamed from qpid/extras/qmf/LICENSE.txt) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/MANIFEST.in (renamed from qpid/extras/qmf/MANIFEST.in) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/NOTICE.txt (renamed from qpid/tools/NOTICE.txt) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/.gitignore | 13 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qmf-tool (renamed from qpid/tools/src/py/qmf-tool) | 0 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-config (renamed from qpid/tools/src/py/qpid-config) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/qpid-config.bat | 2 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-ha (renamed from qpid/tools/src/py/qpid-ha) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/qpid-ha.bat | 2 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-printevents (renamed from qpid/tools/src/py/qpid-printevents) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/qpid-printevents.bat | 2 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-qls-analyze (renamed from qpid/tools/src/py/qpid-qls-analyze) | 0 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-queue-stats (renamed from qpid/tools/src/py/qpid-queue-stats) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/qpid-queue-stats.bat | 3 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-receive (renamed from qpid/tools/src/py/qpid-receive) | 0 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-route (renamed from qpid/tools/src/py/qpid-route) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/qpid-route.bat | 2 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-send (renamed from qpid/tools/src/py/qpid-send) | 0 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-stat (renamed from qpid/tools/src/py/qpid-stat) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/qpid-stat.bat | 2 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-store-chk (renamed from qpid/tools/src/py/qpid-store-chk) | 0 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-store-resize (renamed from qpid/tools/src/py/qpid-store-resize) | 0 | ||||
-rwxr-xr-x | qpid/cpp/management/python/bin/qpid-tool (renamed from qpid/tools/src/py/qpid-tool) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/bin/qpid-tool.bat | 2 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/.gitignore (renamed from qpid/tools/src/py/.gitignore) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/README.txt (renamed from qpid/tools/src/py/README.txt) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qlslibs/__init__.py (renamed from qpid/tools/src/py/qlslibs/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qlslibs/analyze.py (renamed from qpid/tools/src/py/qlslibs/analyze.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qlslibs/efp.py (renamed from qpid/tools/src/py/qlslibs/efp.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qlslibs/err.py (renamed from qpid/tools/src/py/qlslibs/err.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qlslibs/jrnl.py (renamed from qpid/tools/src/py/qlslibs/jrnl.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qlslibs/utils.py (renamed from qpid/tools/src/py/qlslibs/utils.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qmf/__init__.py (renamed from qpid/extras/qmf/src/py/qmf/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qmf/console.py (renamed from qpid/extras/qmf/src/py/qmf/console.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidstore/__init__.py (renamed from qpid/tools/src/py/qpidstore/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidstore/janal.py (renamed from qpid/tools/src/py/qpidstore/janal.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidstore/jerr.py (renamed from qpid/tools/src/py/qpidstore/jerr.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidstore/jrnl.py (renamed from qpid/tools/src/py/qpidstore/jrnl.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidtoollibs/__init__.py (renamed from qpid/tools/src/py/qpidtoollibs/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidtoollibs/broker.py (renamed from qpid/tools/src/py/qpidtoollibs/broker.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidtoollibs/config.py (renamed from qpid/tools/src/py/qpidtoollibs/config.py) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/python/lib/qpidtoollibs/disp.py (renamed from qpid/tools/src/py/qpidtoollibs/disp.py) | 0 | ||||
-rwxr-xr-x | qpid/cpp/management/python/setup.py | 78 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/.gitignore (renamed from qpid/tools/src/ruby/qpid_management/.gitignore) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/.rspec (renamed from qpid/tools/src/ruby/qpid_management/.rspec) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/Gemfile (renamed from qpid/tools/src/ruby/qpid_management/Gemfile) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/Gemfile.lock (renamed from qpid/tools/src/ruby/qpid_management/Gemfile.lock) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/Rakefile (renamed from qpid/tools/src/ruby/qpid_management/Rakefile) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/acl.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/acl.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/binding.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/binding.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/bridge.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/bridge.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/broker.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/broker_agent.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_agent.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/broker_object.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_object.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/cluster.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/cluster.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/connection.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/connection.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/errors.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/errors.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/exchange.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/exchange.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/ha_broker.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/ha_broker.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/link.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/link.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/memory.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/memory.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/queue.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/queue.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/session.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/session.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/lib/qpid_management/subscription.rb (renamed from qpid/tools/src/ruby/qpid_management/lib/qpid_management/subscription.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/qpid_management.gemspec (renamed from qpid/tools/src/ruby/qpid_management/qpid_management.gemspec) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/spec/broker_agent_spec.rb (renamed from qpid/tools/src/ruby/qpid_management/spec/broker_agent_spec.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/spec/broker_spec.rb (renamed from qpid/tools/src/ruby/qpid_management/spec/broker_spec.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/management/ruby/spec/spec_helper.rb (renamed from qpid/tools/src/ruby/qpid_management/spec/spec_helper.rb) | 0 | ||||
-rw-r--r-- | qpid/cpp/src/CMakeLists.txt | 41 | ||||
-rw-r--r-- | qpid/cpp/src/tests/CMakeLists.txt | 351 | ||||
-rw-r--r-- | qpid/cpp/src/tests/README.txt | 19 | ||||
-rw-r--r-- | qpid/cpp/src/tests/ais_test.cpp | 23 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/allhosts | 79 | ||||
-rw-r--r-- | qpid/cpp/src/tests/brokertest.py | 26 | ||||
-rw-r--r-- | qpid/cpp/src/tests/check_dependencies.py.in | 53 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/cli_tests.py | 11 | ||||
-rw-r--r-- | qpid/cpp/src/tests/common.py | 297 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/dynamic_log_hires_timestamp | 22 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/dynamic_log_level_test | 30 | ||||
-rw-r--r-- | qpid/cpp/src/tests/env.ps1.in (renamed from qpid/cpp/src/tests/test_env.ps1.in) | 0 | ||||
-rw-r--r-- | qpid/cpp/src/tests/env.py.in | 100 | ||||
-rw-r--r-- | qpid/cpp/src/tests/env.sh.in | 74 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/federated_topic_test | 45 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/ha_test.py | 10 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/ha_tests.py | 16 | ||||
-rw-r--r-- | qpid/cpp/src/tests/install_env.sh.in | 26 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/interlink_tests.py | 7 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/interop_tests.py | 5 | ||||
-rw-r--r-- | qpid/cpp/src/tests/legacystore/CMakeLists.txt | 8 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/legacystore/federation/federation_tests_env.sh | 2 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/legacystore/run_python_tests | 32 | ||||
-rw-r--r-- | qpid/cpp/src/tests/linearstore/CMakeLists.txt | 7 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/linearstore/run_python_tests | 31 | ||||
-rw-r--r-- | qpid/cpp/src/tests/plano.py | 543 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/python_tests | 34 | ||||
-rw-r--r-- | qpid/cpp/src/tests/python_tests.ps1 | 42 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/qpid-build-rinstall | 28 | ||||
-rw-r--r-- | qpid/cpp/src/tests/quick_topictest.ps1 | 30 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/quick_txtest | 22 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/rsynchosts | 57 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run.py | 6 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_acl_tests | 170 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_acl_tests.ps1 | 99 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_cli_tests | 88 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_client_tests (renamed from qpid/cpp/src/tests/multiq_perftest) | 12 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_federation_sys_tests | 71 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_federation_tests | 81 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_federation_tests.ps1 | 83 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_flow_control_tests (renamed from qpid/cpp/src/tests/run_queue_flow_limit_tests) | 11 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_ha_tests | 24 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_header_test.ps1 | 48 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_headers_federation_tests | 49 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_idle_timeout_tests | 26 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_interlink_tests | 8 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_interop_tests | 30 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_ipv6_tests (renamed from qpid/cpp/src/tests/ipv6_test) | 38 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_logging_tests (renamed from qpid/cpp/src/tests/run_header_test) | 21 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_long_federation_sys_tests | 2 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_msg_group_tests | 59 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_msg_group_tests.ps1 | 71 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_msg_group_tests_soak | 8 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_paged_queue_tests | 55 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_performance_tests (renamed from qpid/cpp/src/tests/quick_perftest) | 10 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_perftest | 28 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_python_tests | 62 | ||||
-rwxr-xr-x[-rw-r--r--] | qpid/cpp/src/tests/run_qmf_tests (renamed from qpid/cpp/src/tests/config.null) | 7 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_queue_redirect | 56 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_queue_redirect_tests | 30 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_ring_queue_test | 36 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_ring_queue_tests | 30 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_sasl_tests | 64 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_ssl_tests | 329 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_store_tests.ps1 | 2 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_test | 191 | ||||
-rw-r--r-- | qpid/cpp/src/tests/run_test.ps1 | 162 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_topic_tests (renamed from qpid/cpp/src/tests/fanout_perftest) | 12 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_transaction_tests (renamed from qpid/cpp/src/tests/quick_topictest) | 18 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/run_unit_tests (renamed from qpid/extras/qmf/setup.py) | 33 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_fed | 153 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_fed_ex | 208 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_no_dir | 94 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/sasl_test_setup.sh | 11 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/shared_perftest | 22 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/ssl_test | 140 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/swig_python_tests | 68 | ||||
-rw-r--r-- | qpid/cpp/src/tests/test.xquery | 6 | ||||
-rw-r--r-- | qpid/cpp/src/tests/test_env.sh.in | 100 | ||||
-rw-r--r-- | qpid/cpp/src/tests/test_env_common.sh | 28 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/topic_perftest | 22 | ||||
-rwxr-xr-x | qpid/cpp/src/tests/topictest | 4 | ||||
-rw-r--r-- | qpid/cpp/src/tests/vg_check | 43 | ||||
-rw-r--r-- | qpid/extras/qmf/.gitignore | 20 | ||||
-rw-r--r-- | qpid/extras/qmf/NOTICE.txt | 5 | ||||
-rw-r--r-- | qpid/python/doc/test-requirements.txt | 29 | ||||
-rwxr-xr-x | qpid/python/qpid-python-test.bat | 2 | ||||
-rw-r--r-- | qpid/python/qpid_tests/__init__.py (renamed from qpid/tests/src/py/qpid_tests/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/__init__.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/alternate_exchange.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/broker.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/broker.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/dtx.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/dtx.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/example.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/example.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/exchange.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/extensions.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/extensions.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/lvq.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/lvq.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/management.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/management.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/message.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/message.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/msg_groups.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/new_api.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/persistence.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/persistence.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/priority.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/priority.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/qmf_events.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/qmf_events.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/query.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/query.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/queue.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/queue.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/stats.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/stats.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/threshold.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/threshold.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_10/tx.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_10/tx.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/__init__.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/basic.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/basic.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/broker.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/broker.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/example.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/example.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/exchange.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/exchange.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/queue.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/queue.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/testlib.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/testlib.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_8/tx.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_8/tx.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_9/__init__.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_9/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_9/echo.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_9/echo.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_9/messageheader.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_9/messageheader.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_9/query.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_9/query.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_0_9/queue.py (renamed from qpid/tests/src/py/qpid_tests/broker_0_9/queue.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_1_0/__init__.py (renamed from qpid/tests/src/py/qpid_tests/broker_1_0/__init__.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_1_0/general.py (renamed from qpid/tests/src/py/qpid_tests/broker_1_0/general.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_1_0/legacy_exchanges.py (renamed from qpid/tests/src/py/qpid_tests/broker_1_0/legacy_exchanges.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_1_0/selector.py (renamed from qpid/tests/src/py/qpid_tests/broker_1_0/selector.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_1_0/translation.py (renamed from qpid/tests/src/py/qpid_tests/broker_1_0/translation.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/broker_1_0/tx.py (renamed from qpid/tests/src/py/qpid_tests/broker_1_0/tx.py) | 0 | ||||
-rwxr-xr-x | qpid/python/qpid_tests/client/client-api-example-tests.py (renamed from qpid/tests/src/py/qpid_tests/client/client-api-example-tests.py) | 0 | ||||
-rw-r--r-- | qpid/python/qpid_tests/client/log4j.conf (renamed from qpid/tests/src/py/qpid_tests/client/log4j.conf) | 0 | ||||
-rwxr-xr-x | qpid/python/setup.py | 17 | ||||
-rw-r--r-- | qpid/python/todo.txt | 197 | ||||
-rw-r--r-- | qpid/tests/LICENSE.txt | 203 | ||||
-rw-r--r-- | qpid/tests/MANIFEST.in | 1 | ||||
-rw-r--r-- | qpid/tests/NOTICE.txt | 5 | ||||
-rwxr-xr-x | qpid/tests/setup.py | 31 | ||||
-rw-r--r-- | qpid/tools/LICENSE.txt | 203 | ||||
-rw-r--r-- | qpid/tools/MANIFEST.in | 1 | ||||
-rwxr-xr-x | qpid/tools/setup.py | 64 |
212 files changed, 2589 insertions, 3428 deletions
diff --git a/qpid/cpp/CMakeLists.txt b/qpid/cpp/CMakeLists.txt index 56f09c27c3..12a0503398 100644 --- a/qpid/cpp/CMakeLists.txt +++ b/qpid/cpp/CMakeLists.txt @@ -51,6 +51,7 @@ include(BuildInstallSettings.cmake) enable_testing() include (CTest) +configure_file(${CMAKE_SOURCE_DIR}/CTestCustom.cmake ${CMAKE_BINARY_DIR}/CTestCustom.cmake) if (MSVC) # Chaxnge warning C4996 from level 1 to level 4. These are real and shouldn't @@ -80,7 +81,7 @@ endif (WIN32) set_absolute_install_path (QPIDC_CONF_FILE ${QPID_INSTALL_CONFDIR}/qpidc.conf) set_absolute_install_path (QPIDD_CONF_FILE ${QPID_INSTALL_CONFDIR}/qpidd.conf) -install(FILES LICENSE.txt NOTICE.txt DESTINATION ${QPID_INSTALL_DOCDIR}) +install(FILES LICENSE.txt NOTICE.txt DESTINATION ${QPID_INSTALL_DOCDIR}) install(FILES include/qmf/qmf2.i DESTINATION ${QPID_INSTALL_INCLUDEDIR}/qmf) @@ -217,6 +218,7 @@ if (MSVC) endif (MSVC) # Subdirectories +add_subdirectory(management/python) add_subdirectory(managementgen) add_subdirectory(src) add_subdirectory(etc) diff --git a/qpid/cpp/CTestCustom.cmake b/qpid/cpp/CTestCustom.cmake new file mode 100644 index 0000000000..57efd32a81 --- /dev/null +++ b/qpid/cpp/CTestCustom.cmake @@ -0,0 +1 @@ +set(CTEST_CUSTOM_PRE_TEST "python ${CMAKE_BINARY_DIR}/src/tests/check_dependencies.py") diff --git a/qpid/cpp/INSTALL.txt b/qpid/cpp/INSTALL.txt index 717c9b0908..cee7f1764e 100644 --- a/qpid/cpp/INSTALL.txt +++ b/qpid/cpp/INSTALL.txt @@ -194,7 +194,7 @@ a source distribution: (*) Boost 1.33 will also work. -Optional support for AMQP 1.0 requires (see AMQP_1.0 for details): +Optional support for AMQP 1.0 requires (see docs/amqp-1.0.txt for details): * Qpid proton-c <http://qpid.apache.org/proton> (0.5) Note: If Proton is installed in a non-standard location, there are two ways to locate it: 1. Recommended: use proton 0.7 or later and use the same install prefix @@ -206,7 +206,7 @@ Optional XML exchange requires: * xqilla <http://xqilla.sourceforge.net/HomePage> (2.0.0) * xerces-c <http://xerces.apache.org/xerces-c/> (2.7.0) -Optional SSL support requires: +Optional SSL support requires (see docs/ssl.txt for details): * nss <http://www.mozilla.org/projects/security/pki/nss/> * nspr <http://www.mozilla.org/projects/nspr/> diff --git a/qpid/cpp/management/python/.gitignore b/qpid/cpp/management/python/.gitignore new file mode 100644 index 0000000000..4fca027dea --- /dev/null +++ b/qpid/cpp/management/python/.gitignore @@ -0,0 +1,3 @@ +MANIFEST +build +dist diff --git a/qpid/cpp/docs/design/CONTENTS b/qpid/cpp/management/python/CMakeLists.txt index cc3b868e0e..4e65958043 100644 --- a/qpid/cpp/docs/design/CONTENTS +++ b/qpid/cpp/management/python/CMakeLists.txt @@ -17,15 +17,16 @@ # under the License. # -This directory contains documentation about the C++ source -that is expressed in formats that does not fit comfortably -within C++ source files. - -As with all documentation, including comments, it may become -outmoded with respect to the code. - -If you find external code doco useful in your work -- if it -helps you save some time -- please return some of that time -in the form of effort to keep the documentation updated. +find_package(PythonInterp REQUIRED) +add_custom_target(management_python_build ALL + COMMAND + ${PYTHON_EXECUTABLE} setup.py build + --build-base=${CMAKE_CURRENT_BINARY_DIR} + --build-scripts=${CMAKE_CURRENT_BINARY_DIR}/bin + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}) +install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} setup.py install + --prefix=${CMAKE_INSTALL_PREFIX} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})") + + diff --git a/qpid/extras/qmf/LICENSE.txt b/qpid/cpp/management/python/LICENSE.txt index 6b0b1270ff..6b0b1270ff 100644 --- a/qpid/extras/qmf/LICENSE.txt +++ b/qpid/cpp/management/python/LICENSE.txt diff --git a/qpid/extras/qmf/MANIFEST.in b/qpid/cpp/management/python/MANIFEST.in index ab30e9acee..ab30e9acee 100644 --- a/qpid/extras/qmf/MANIFEST.in +++ b/qpid/cpp/management/python/MANIFEST.in diff --git a/qpid/tools/NOTICE.txt b/qpid/cpp/management/python/NOTICE.txt index 24512d0da9..24512d0da9 100644 --- a/qpid/tools/NOTICE.txt +++ b/qpid/cpp/management/python/NOTICE.txt diff --git a/qpid/cpp/management/python/bin/.gitignore b/qpid/cpp/management/python/bin/.gitignore new file mode 100644 index 0000000000..f99dba8c08 --- /dev/null +++ b/qpid/cpp/management/python/bin/.gitignore @@ -0,0 +1,13 @@ +qmf-toolc +qpid-configc +qpid-hac +qpid-printeventsc +qpid-qls-analyzec +qpid-queue-statsc +qpid-receivec +qpid-routec +qpid-sendc +qpid-statc +qpid-store-chkc +qpid-store-resizec +qpid-toolc diff --git a/qpid/tools/src/py/qmf-tool b/qpid/cpp/management/python/bin/qmf-tool index 407ae74b10..407ae74b10 100755 --- a/qpid/tools/src/py/qmf-tool +++ b/qpid/cpp/management/python/bin/qmf-tool diff --git a/qpid/tools/src/py/qpid-config b/qpid/cpp/management/python/bin/qpid-config index 3d4bb6036a..3d4bb6036a 100755 --- a/qpid/tools/src/py/qpid-config +++ b/qpid/cpp/management/python/bin/qpid-config diff --git a/qpid/cpp/management/python/bin/qpid-config.bat b/qpid/cpp/management/python/bin/qpid-config.bat new file mode 100644 index 0000000000..0ab000f5d3 --- /dev/null +++ b/qpid/cpp/management/python/bin/qpid-config.bat @@ -0,0 +1,2 @@ +@echo off +python %~dp0\qpid-config %* diff --git a/qpid/tools/src/py/qpid-ha b/qpid/cpp/management/python/bin/qpid-ha index 1c07658d34..1c07658d34 100755 --- a/qpid/tools/src/py/qpid-ha +++ b/qpid/cpp/management/python/bin/qpid-ha diff --git a/qpid/cpp/management/python/bin/qpid-ha.bat b/qpid/cpp/management/python/bin/qpid-ha.bat new file mode 100644 index 0000000000..29a77a0fb4 --- /dev/null +++ b/qpid/cpp/management/python/bin/qpid-ha.bat @@ -0,0 +1,2 @@ +@echo off +python %~dp0\qpid-ha %* diff --git a/qpid/tools/src/py/qpid-printevents b/qpid/cpp/management/python/bin/qpid-printevents index f702ca91e8..f702ca91e8 100755 --- a/qpid/tools/src/py/qpid-printevents +++ b/qpid/cpp/management/python/bin/qpid-printevents diff --git a/qpid/cpp/management/python/bin/qpid-printevents.bat b/qpid/cpp/management/python/bin/qpid-printevents.bat new file mode 100644 index 0000000000..3486bed39d --- /dev/null +++ b/qpid/cpp/management/python/bin/qpid-printevents.bat @@ -0,0 +1,2 @@ +@echo off +python %~dp0\qpid-printevents %* diff --git a/qpid/tools/src/py/qpid-qls-analyze b/qpid/cpp/management/python/bin/qpid-qls-analyze index 7fbf6b1bb2..7fbf6b1bb2 100755 --- a/qpid/tools/src/py/qpid-qls-analyze +++ b/qpid/cpp/management/python/bin/qpid-qls-analyze diff --git a/qpid/tools/src/py/qpid-queue-stats b/qpid/cpp/management/python/bin/qpid-queue-stats index ca78f9b602..ca78f9b602 100755 --- a/qpid/tools/src/py/qpid-queue-stats +++ b/qpid/cpp/management/python/bin/qpid-queue-stats diff --git a/qpid/cpp/management/python/bin/qpid-queue-stats.bat b/qpid/cpp/management/python/bin/qpid-queue-stats.bat new file mode 100644 index 0000000000..24290d46b3 --- /dev/null +++ b/qpid/cpp/management/python/bin/qpid-queue-stats.bat @@ -0,0 +1,3 @@ +@echo off +python %~dp0\qpid-queue-stats %* + diff --git a/qpid/tools/src/py/qpid-receive b/qpid/cpp/management/python/bin/qpid-receive index f14df277ac..f14df277ac 100755 --- a/qpid/tools/src/py/qpid-receive +++ b/qpid/cpp/management/python/bin/qpid-receive diff --git a/qpid/tools/src/py/qpid-route b/qpid/cpp/management/python/bin/qpid-route index f51d2493e9..f51d2493e9 100755 --- a/qpid/tools/src/py/qpid-route +++ b/qpid/cpp/management/python/bin/qpid-route diff --git a/qpid/cpp/management/python/bin/qpid-route.bat b/qpid/cpp/management/python/bin/qpid-route.bat new file mode 100644 index 0000000000..ae8e9fe63c --- /dev/null +++ b/qpid/cpp/management/python/bin/qpid-route.bat @@ -0,0 +1,2 @@ +@echo off +python %~dp0\qpid-route %* diff --git a/qpid/tools/src/py/qpid-send b/qpid/cpp/management/python/bin/qpid-send index b0105e41a6..b0105e41a6 100755 --- a/qpid/tools/src/py/qpid-send +++ b/qpid/cpp/management/python/bin/qpid-send diff --git a/qpid/tools/src/py/qpid-stat b/qpid/cpp/management/python/bin/qpid-stat index 1780c4a819..1780c4a819 100755 --- a/qpid/tools/src/py/qpid-stat +++ b/qpid/cpp/management/python/bin/qpid-stat diff --git a/qpid/cpp/management/python/bin/qpid-stat.bat b/qpid/cpp/management/python/bin/qpid-stat.bat new file mode 100644 index 0000000000..0a03d5177c --- /dev/null +++ b/qpid/cpp/management/python/bin/qpid-stat.bat @@ -0,0 +1,2 @@ +@echo off +python %~dp0\qpid-stat %* diff --git a/qpid/tools/src/py/qpid-store-chk b/qpid/cpp/management/python/bin/qpid-store-chk index f6d70cb3c6..f6d70cb3c6 100755 --- a/qpid/tools/src/py/qpid-store-chk +++ b/qpid/cpp/management/python/bin/qpid-store-chk diff --git a/qpid/tools/src/py/qpid-store-resize b/qpid/cpp/management/python/bin/qpid-store-resize index 38d8eaf1ad..38d8eaf1ad 100755 --- a/qpid/tools/src/py/qpid-store-resize +++ b/qpid/cpp/management/python/bin/qpid-store-resize diff --git a/qpid/tools/src/py/qpid-tool b/qpid/cpp/management/python/bin/qpid-tool index 09ca2b8c13..09ca2b8c13 100755 --- a/qpid/tools/src/py/qpid-tool +++ b/qpid/cpp/management/python/bin/qpid-tool diff --git a/qpid/cpp/management/python/bin/qpid-tool.bat b/qpid/cpp/management/python/bin/qpid-tool.bat new file mode 100644 index 0000000000..7eb0210da2 --- /dev/null +++ b/qpid/cpp/management/python/bin/qpid-tool.bat @@ -0,0 +1,2 @@ +@echo off +python %~dp0\qpid-tool %* diff --git a/qpid/tools/src/py/.gitignore b/qpid/cpp/management/python/lib/.gitignore index 628d81888c..628d81888c 100644 --- a/qpid/tools/src/py/.gitignore +++ b/qpid/cpp/management/python/lib/.gitignore diff --git a/qpid/tools/src/py/README.txt b/qpid/cpp/management/python/lib/README.txt index cabeb1be02..cabeb1be02 100644 --- a/qpid/tools/src/py/README.txt +++ b/qpid/cpp/management/python/lib/README.txt diff --git a/qpid/tools/src/py/qlslibs/__init__.py b/qpid/cpp/management/python/lib/qlslibs/__init__.py index d8a500d9d8..d8a500d9d8 100644 --- a/qpid/tools/src/py/qlslibs/__init__.py +++ b/qpid/cpp/management/python/lib/qlslibs/__init__.py diff --git a/qpid/tools/src/py/qlslibs/analyze.py b/qpid/cpp/management/python/lib/qlslibs/analyze.py index 8c5de05b9e..8c5de05b9e 100644 --- a/qpid/tools/src/py/qlslibs/analyze.py +++ b/qpid/cpp/management/python/lib/qlslibs/analyze.py diff --git a/qpid/tools/src/py/qlslibs/efp.py b/qpid/cpp/management/python/lib/qlslibs/efp.py index 1c751c3d06..1c751c3d06 100644 --- a/qpid/tools/src/py/qlslibs/efp.py +++ b/qpid/cpp/management/python/lib/qlslibs/efp.py diff --git a/qpid/tools/src/py/qlslibs/err.py b/qpid/cpp/management/python/lib/qlslibs/err.py index f47632ce6a..f47632ce6a 100644 --- a/qpid/tools/src/py/qlslibs/err.py +++ b/qpid/cpp/management/python/lib/qlslibs/err.py diff --git a/qpid/tools/src/py/qlslibs/jrnl.py b/qpid/cpp/management/python/lib/qlslibs/jrnl.py index 5e65890393..5e65890393 100644 --- a/qpid/tools/src/py/qlslibs/jrnl.py +++ b/qpid/cpp/management/python/lib/qlslibs/jrnl.py diff --git a/qpid/tools/src/py/qlslibs/utils.py b/qpid/cpp/management/python/lib/qlslibs/utils.py index dfa760a839..dfa760a839 100644 --- a/qpid/tools/src/py/qlslibs/utils.py +++ b/qpid/cpp/management/python/lib/qlslibs/utils.py diff --git a/qpid/extras/qmf/src/py/qmf/__init__.py b/qpid/cpp/management/python/lib/qmf/__init__.py index 31d5a2ef58..31d5a2ef58 100644 --- a/qpid/extras/qmf/src/py/qmf/__init__.py +++ b/qpid/cpp/management/python/lib/qmf/__init__.py diff --git a/qpid/extras/qmf/src/py/qmf/console.py b/qpid/cpp/management/python/lib/qmf/console.py index 405c5dcb62..405c5dcb62 100644 --- a/qpid/extras/qmf/src/py/qmf/console.py +++ b/qpid/cpp/management/python/lib/qmf/console.py diff --git a/qpid/tools/src/py/qpidstore/__init__.py b/qpid/cpp/management/python/lib/qpidstore/__init__.py index d8a500d9d8..d8a500d9d8 100644 --- a/qpid/tools/src/py/qpidstore/__init__.py +++ b/qpid/cpp/management/python/lib/qpidstore/__init__.py diff --git a/qpid/tools/src/py/qpidstore/janal.py b/qpid/cpp/management/python/lib/qpidstore/janal.py index 1a892aca60..1a892aca60 100644 --- a/qpid/tools/src/py/qpidstore/janal.py +++ b/qpid/cpp/management/python/lib/qpidstore/janal.py diff --git a/qpid/tools/src/py/qpidstore/jerr.py b/qpid/cpp/management/python/lib/qpidstore/jerr.py index 448f881ce3..448f881ce3 100644 --- a/qpid/tools/src/py/qpidstore/jerr.py +++ b/qpid/cpp/management/python/lib/qpidstore/jerr.py diff --git a/qpid/tools/src/py/qpidstore/jrnl.py b/qpid/cpp/management/python/lib/qpidstore/jrnl.py index 7c4d6de4a9..7c4d6de4a9 100644 --- a/qpid/tools/src/py/qpidstore/jrnl.py +++ b/qpid/cpp/management/python/lib/qpidstore/jrnl.py diff --git a/qpid/tools/src/py/qpidtoollibs/__init__.py b/qpid/cpp/management/python/lib/qpidtoollibs/__init__.py index 2815bac22f..2815bac22f 100644 --- a/qpid/tools/src/py/qpidtoollibs/__init__.py +++ b/qpid/cpp/management/python/lib/qpidtoollibs/__init__.py diff --git a/qpid/tools/src/py/qpidtoollibs/broker.py b/qpid/cpp/management/python/lib/qpidtoollibs/broker.py index fca6680067..fca6680067 100644 --- a/qpid/tools/src/py/qpidtoollibs/broker.py +++ b/qpid/cpp/management/python/lib/qpidtoollibs/broker.py diff --git a/qpid/tools/src/py/qpidtoollibs/config.py b/qpid/cpp/management/python/lib/qpidtoollibs/config.py index 9168215ac3..9168215ac3 100644 --- a/qpid/tools/src/py/qpidtoollibs/config.py +++ b/qpid/cpp/management/python/lib/qpidtoollibs/config.py diff --git a/qpid/tools/src/py/qpidtoollibs/disp.py b/qpid/cpp/management/python/lib/qpidtoollibs/disp.py index 1b7419ba2c..1b7419ba2c 100644 --- a/qpid/tools/src/py/qpidtoollibs/disp.py +++ b/qpid/cpp/management/python/lib/qpidtoollibs/disp.py diff --git a/qpid/cpp/management/python/setup.py b/qpid/cpp/management/python/setup.py new file mode 100755 index 0000000000..8eb26c3129 --- /dev/null +++ b/qpid/cpp/management/python/setup.py @@ -0,0 +1,78 @@ +#!/usr/bin/env python +# +# 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. +# + +import platform + +from distutils.core import setup + +pypi_long_description = """ +# Python libraries for the Apache Qpid C++ broker + +## qmf + +The Qpid Management Framework (QMF). + +## qpidtoollibs + +A high-level BrokerAgent object for managing the C++ broker using QMF. + +This library depends on the qpid.messaging python client to send AMQP +messages containing QMF commands to the broker. +""" + +scripts = [ + "bin/qpid-config", + "bin/qpid-ha", + "bin/qpid-printevents", + "bin/qpid-queue-stats", + "bin/qpid-route", + "bin/qpid-stat", + "bin/qpid-tool", +] + +if platform.system() == "Windows": + scripts.append("bin/qpid-config.bat") + scripts.append("bin/qpid-ha.bat") + scripts.append("bin/qpid-printevents.bat") + scripts.append("bin/qpid-queue-stats.bat") + scripts.append("bin/qpid-route.bat") + scripts.append("bin/qpid-stat.bat") + scripts.append("bin/qpid-tool.bat") + +setup(name="qpid-tools", + version="0.35", + author="Apache Qpid", + author_email="users@qpid.apache.org", + package_dir={'' : 'lib'}, + packages=["qpidtoollibs", "qmf"], + scripts=scripts, + data_files=[("libexec", ["bin/qpid-qls-analyze"]), + ("share/qpid-tools/python/qlslibs", + ["lib/qlslibs/__init__.py", + "lib/qlslibs/analyze.py", + "lib/qlslibs/efp.py", + "lib/qlslibs/err.py", + "lib/qlslibs/jrnl.py", + "lib/qlslibs/utils.py"])], + url="http://qpid.apache.org/", + license="Apache Software License", + description="Python libraries for the Apache Qpid C++ broker", + long_description=pypi_long_description, + install_requires=["qpid-python >= 0.26",]) diff --git a/qpid/tools/src/ruby/qpid_management/.gitignore b/qpid/cpp/management/ruby/.gitignore index c89dc10304..c89dc10304 100644 --- a/qpid/tools/src/ruby/qpid_management/.gitignore +++ b/qpid/cpp/management/ruby/.gitignore diff --git a/qpid/tools/src/ruby/qpid_management/.rspec b/qpid/cpp/management/ruby/.rspec index 4e1e0d2f72..4e1e0d2f72 100644 --- a/qpid/tools/src/ruby/qpid_management/.rspec +++ b/qpid/cpp/management/ruby/.rspec diff --git a/qpid/tools/src/ruby/qpid_management/Gemfile b/qpid/cpp/management/ruby/Gemfile index 1bd80c10c1..1bd80c10c1 100644 --- a/qpid/tools/src/ruby/qpid_management/Gemfile +++ b/qpid/cpp/management/ruby/Gemfile diff --git a/qpid/tools/src/ruby/qpid_management/Gemfile.lock b/qpid/cpp/management/ruby/Gemfile.lock index bf35564e90..bf35564e90 100644 --- a/qpid/tools/src/ruby/qpid_management/Gemfile.lock +++ b/qpid/cpp/management/ruby/Gemfile.lock diff --git a/qpid/tools/src/ruby/qpid_management/Rakefile b/qpid/cpp/management/ruby/Rakefile index 7f295eda5c..7f295eda5c 100644 --- a/qpid/tools/src/ruby/qpid_management/Rakefile +++ b/qpid/cpp/management/ruby/Rakefile diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management.rb b/qpid/cpp/management/ruby/lib/qpid_management.rb index 0529710693..0529710693 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/acl.rb b/qpid/cpp/management/ruby/lib/qpid_management/acl.rb index 589b11fa59..589b11fa59 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/acl.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/acl.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/binding.rb b/qpid/cpp/management/ruby/lib/qpid_management/binding.rb index cc46d84eeb..cc46d84eeb 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/binding.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/binding.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/bridge.rb b/qpid/cpp/management/ruby/lib/qpid_management/bridge.rb index cece0ba2ed..cece0ba2ed 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/bridge.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/bridge.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker.rb b/qpid/cpp/management/ruby/lib/qpid_management/broker.rb index 31171bdf35..31171bdf35 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/broker.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_agent.rb b/qpid/cpp/management/ruby/lib/qpid_management/broker_agent.rb index 800dcf26dc..800dcf26dc 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_agent.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/broker_agent.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_object.rb b/qpid/cpp/management/ruby/lib/qpid_management/broker_object.rb index fbbe5ff6e2..fbbe5ff6e2 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/broker_object.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/broker_object.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/cluster.rb b/qpid/cpp/management/ruby/lib/qpid_management/cluster.rb index 4fa7f146a7..4fa7f146a7 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/cluster.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/cluster.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/connection.rb b/qpid/cpp/management/ruby/lib/qpid_management/connection.rb index 153ccee684..153ccee684 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/connection.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/connection.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/errors.rb b/qpid/cpp/management/ruby/lib/qpid_management/errors.rb index b922cda680..b922cda680 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/errors.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/errors.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/exchange.rb b/qpid/cpp/management/ruby/lib/qpid_management/exchange.rb index 5a3223aba6..5a3223aba6 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/exchange.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/exchange.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/ha_broker.rb b/qpid/cpp/management/ruby/lib/qpid_management/ha_broker.rb index 1ac9ea7a17..1ac9ea7a17 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/ha_broker.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/ha_broker.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/link.rb b/qpid/cpp/management/ruby/lib/qpid_management/link.rb index 455b26a440..455b26a440 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/link.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/link.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/memory.rb b/qpid/cpp/management/ruby/lib/qpid_management/memory.rb index 39dd803c9a..39dd803c9a 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/memory.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/memory.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/queue.rb b/qpid/cpp/management/ruby/lib/qpid_management/queue.rb index c4fae3a53e..c4fae3a53e 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/queue.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/queue.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/session.rb b/qpid/cpp/management/ruby/lib/qpid_management/session.rb index b4fcc7da59..b4fcc7da59 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/session.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/session.rb diff --git a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/subscription.rb b/qpid/cpp/management/ruby/lib/qpid_management/subscription.rb index fcff2831c0..fcff2831c0 100644 --- a/qpid/tools/src/ruby/qpid_management/lib/qpid_management/subscription.rb +++ b/qpid/cpp/management/ruby/lib/qpid_management/subscription.rb diff --git a/qpid/tools/src/ruby/qpid_management/qpid_management.gemspec b/qpid/cpp/management/ruby/qpid_management.gemspec index a6cc1b828e..a6cc1b828e 100644 --- a/qpid/tools/src/ruby/qpid_management/qpid_management.gemspec +++ b/qpid/cpp/management/ruby/qpid_management.gemspec diff --git a/qpid/tools/src/ruby/qpid_management/spec/broker_agent_spec.rb b/qpid/cpp/management/ruby/spec/broker_agent_spec.rb index 7ffbf842e2..7ffbf842e2 100644 --- a/qpid/tools/src/ruby/qpid_management/spec/broker_agent_spec.rb +++ b/qpid/cpp/management/ruby/spec/broker_agent_spec.rb diff --git a/qpid/tools/src/ruby/qpid_management/spec/broker_spec.rb b/qpid/cpp/management/ruby/spec/broker_spec.rb index 6d6e1106a4..6d6e1106a4 100644 --- a/qpid/tools/src/ruby/qpid_management/spec/broker_spec.rb +++ b/qpid/cpp/management/ruby/spec/broker_spec.rb diff --git a/qpid/tools/src/ruby/qpid_management/spec/spec_helper.rb b/qpid/cpp/management/ruby/spec/spec_helper.rb index f552c55888..f552c55888 100644 --- a/qpid/tools/src/ruby/qpid_management/spec/spec_helper.rb +++ b/qpid/cpp/management/ruby/spec/spec_helper.rb diff --git a/qpid/cpp/src/CMakeLists.txt b/qpid/cpp/src/CMakeLists.txt index 45f5987a6c..be10be9b85 100644 --- a/qpid/cpp/src/CMakeLists.txt +++ b/qpid/cpp/src/CMakeLists.txt @@ -502,30 +502,23 @@ if (BUILD_XML) endif (BUILD_XML) -# Build the ACL plugin -set (acl_default ON) - -option(BUILD_ACL "Build ACL enforcement broker plugin" ${acl_default}) - -if (BUILD_ACL) - set (acl_SOURCES - qpid/acl/Acl.cpp - qpid/acl/Acl.h - qpid/acl/AclConnectionCounter.cpp - qpid/acl/AclConnectionCounter.h - qpid/acl/AclData.cpp - qpid/acl/AclData.h - qpid/acl/AclLexer.cpp - qpid/acl/AclLexer.h - qpid/acl/AclPlugin.cpp - qpid/acl/AclReader.cpp - qpid/acl/AclReader.h - qpid/acl/AclResourceCounter.cpp - qpid/acl/AclResourceCounter.h - qpid/acl/AclValidator.cpp - qpid/acl/AclValidator.h - ) -endif (BUILD_ACL) +set (acl_SOURCES + qpid/acl/Acl.cpp + qpid/acl/Acl.h + qpid/acl/AclConnectionCounter.cpp + qpid/acl/AclConnectionCounter.h + qpid/acl/AclData.cpp + qpid/acl/AclData.h + qpid/acl/AclLexer.cpp + qpid/acl/AclLexer.h + qpid/acl/AclPlugin.cpp + qpid/acl/AclReader.cpp + qpid/acl/AclReader.h + qpid/acl/AclResourceCounter.cpp + qpid/acl/AclResourceCounter.h + qpid/acl/AclValidator.cpp + qpid/acl/AclValidator.h + ) set (ha_default ON) diff --git a/qpid/cpp/src/tests/CMakeLists.txt b/qpid/cpp/src/tests/CMakeLists.txt index d2e6c7dd13..efc3176174 100644 --- a/qpid/cpp/src/tests/CMakeLists.txt +++ b/qpid/cpp/src/tests/CMakeLists.txt @@ -25,21 +25,22 @@ if (QPID_LINK_BOOST_DYNAMIC) add_definitions(-DBOOST_TEST_DYN_LINK) endif (QPID_LINK_BOOST_DYNAMIC) -include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) - -# Using the Boost DLLs triggers warning 4275 on Visual Studio -# (non dll-interface class used as base for dll-interface class). -# This is ok, so suppress the warning. -# Also, boost lengthy names trigger warning 4503, decorated name length exceeded -# and using getenv() triggers insecure CRT warnings which we can silence in the -# test environment. +include_directories(${CMAKE_CURRENT_SOURCE_DIR}) + +# Using the Boost DLLs triggers warning 4275 on Visual Studio (non +# dll-interface class used as base for dll-interface class). This is +# ok, so suppress the warning. +# +# Also, boost lengthy names trigger warning 4503, decorated name +# length exceeded and using getenv() triggers insecure CRT warnings +# which we can silence in the test environment. if (MSVC) - add_definitions( /wd4275 /wd4503 /D_CRT_SECURE_NO_WARNINGS) + add_definitions(/wd4275 /wd4503 /D_CRT_SECURE_NO_WARNINGS) endif (MSVC) # If we're using GCC allow variadic macros (even though they're c99 not c++01) if (CMAKE_COMPILER_IS_GNUCXX) - add_definitions(-Wno-variadic-macros) + add_definitions(-Wno-variadic-macros) endif (CMAKE_COMPILER_IS_GNUCXX) # Windows uses some process-startup calls to ensure that errors, etc. don't @@ -48,95 +49,91 @@ endif (CMAKE_COMPILER_IS_GNUCXX) # instead of windows. If you want to remove this code, build without the # QPID_WINDOWS_DEFAULT_TEST_OUTPUTS ON. if (CMAKE_SYSTEM_NAME STREQUAL Windows) - option(QPID_WINDOWS_DEFAULT_TEST_OUTPUTS "Use default error-handling on Windows tests" OFF) - if (NOT QPID_WINDOWS_DEFAULT_TEST_OUTPUTS) - set(platform_test_additions windows/DisableWin32ErrorWindows.cpp) - endif (NOT QPID_WINDOWS_DEFAULT_TEST_OUTPUTS) + option(QPID_WINDOWS_DEFAULT_TEST_OUTPUTS "Use default error-handling on Windows tests" OFF) + if (NOT QPID_WINDOWS_DEFAULT_TEST_OUTPUTS) + set(platform_test_additions windows/DisableWin32ErrorWindows.cpp) + endif (NOT QPID_WINDOWS_DEFAULT_TEST_OUTPUTS) endif (CMAKE_SYSTEM_NAME STREQUAL Windows) # Some generally useful utilities that just happen to be built in the test area -add_executable (qpid-receive qpid-receive.cpp Statistics.cpp ${platform_test_additions}) -target_link_libraries (qpid-receive qpidmessaging qpidtypes qpidcommon) +add_executable(qpid-receive qpid-receive.cpp Statistics.cpp ${platform_test_additions}) +target_link_libraries(qpid-receive qpidmessaging qpidtypes qpidcommon) -add_executable (qpid-send qpid-send.cpp Statistics.cpp ${platform_test_additions}) -target_link_libraries (qpid-send qpidmessaging qpidtypes qpidcommon) +add_executable(qpid-send qpid-send.cpp Statistics.cpp ${platform_test_additions}) +target_link_libraries(qpid-send qpidmessaging qpidtypes qpidcommon) -install (TARGETS - qpid-receive qpid-send - RUNTIME DESTINATION ${QPID_INSTALL_BINDIR}) +install(TARGETS qpid-receive qpid-send RUNTIME DESTINATION ${QPID_INSTALL_BINDIR}) -add_executable (qpid-perftest qpid-perftest.cpp ${platform_test_additions}) -target_link_libraries (qpid-perftest qpidclient qpidcommon ${Boost_PROGRAM_OPTIONS_LIBRARY}) +add_executable(qpid-perftest qpid-perftest.cpp ${platform_test_additions}) +target_link_libraries(qpid-perftest qpidclient qpidcommon ${Boost_PROGRAM_OPTIONS_LIBRARY}) -add_executable (qpid-latency-test qpid-latency-test.cpp ${platform_test_additions}) -target_link_libraries (qpid-latency-test qpidclient qpidcommon) +add_executable(qpid-latency-test qpid-latency-test.cpp ${platform_test_additions}) +target_link_libraries(qpid-latency-test qpidclient qpidcommon) -add_executable (qpid-client-test qpid-client-test.cpp ${platform_test_additions}) -target_link_libraries (qpid-client-test qpidclient qpidcommon) +add_executable(qpid-client-test qpid-client-test.cpp ${platform_test_additions}) +target_link_libraries(qpid-client-test qpidclient qpidcommon) -add_executable (qpid-ping qpid-ping.cpp ${platform_test_additions}) -target_link_libraries (qpid-ping qpidmessaging qpidtypes qpidcommon) +add_executable(qpid-ping qpid-ping.cpp ${platform_test_additions}) +target_link_libraries(qpid-ping qpidmessaging qpidtypes qpidcommon) -add_executable (qpid-topic-listener qpid-topic-listener.cpp ${platform_test_additions}) -target_link_libraries (qpid-topic-listener qpidclient qpidcommon) +add_executable(qpid-topic-listener qpid-topic-listener.cpp ${platform_test_additions}) +target_link_libraries(qpid-topic-listener qpidclient qpidcommon) -add_executable (qpid-topic-publisher qpid-topic-publisher.cpp ${platform_test_additions}) -target_link_libraries (qpid-topic-publisher qpidclient qpidcommon) +add_executable(qpid-topic-publisher qpid-topic-publisher.cpp ${platform_test_additions}) +target_link_libraries(qpid-topic-publisher qpidclient qpidcommon) -add_executable (receiver receiver.cpp ${platform_test_additions}) -target_link_libraries (receiver qpidclient qpidcommon) +add_executable(receiver receiver.cpp ${platform_test_additions}) +target_link_libraries(receiver qpidclient qpidcommon) # This is bizarre - using both messaging and client libraries -add_executable (sender sender.cpp Statistics.cpp ${platform_test_additions}) -target_link_libraries (sender qpidmessaging qpidtypes qpidclient qpidcommon) +add_executable(sender sender.cpp Statistics.cpp ${platform_test_additions}) +target_link_libraries(sender qpidmessaging qpidtypes qpidclient qpidcommon) -add_executable (qpid-txtest qpid-txtest.cpp ${platform_test_additions}) -target_link_libraries (qpid-txtest qpidclient qpidcommon qpidtypes) -#qpid_txtest_SOURCES=qpid-txtest.cpp TestOptions.h ConnectionOptions.h +add_executable(qpid-txtest qpid-txtest.cpp ${platform_test_additions}) +target_link_libraries(qpid-txtest qpidclient qpidcommon qpidtypes) -add_executable (qpid-txtest2 qpid-txtest2.cpp ${platform_test_additions}) -target_link_libraries (qpid-txtest2 qpidmessaging qpidtypes qpidcommon) +add_executable(qpid-txtest2 qpid-txtest2.cpp ${platform_test_additions}) +target_link_libraries(qpid-txtest2 qpidmessaging qpidtypes qpidcommon) -install (TARGETS - qpid-perftest qpid-latency-test qpid-client-test - qpid-ping - qpid-topic-listener qpid-topic-publisher receiver sender - qpid-txtest qpid-txtest2 - RUNTIME DESTINATION ${QPID_INSTALL_TESTDIR}) +install(TARGETS + qpid-perftest qpid-latency-test qpid-client-test + qpid-ping + qpid-topic-listener qpid-topic-publisher receiver sender + qpid-txtest qpid-txtest2 + RUNTIME DESTINATION ${QPID_INSTALL_TESTDIR}) # Only build test code if testing is turned on if (BUILD_TESTING) -# Create the environment scripts for tests -set (abs_srcdir ${CMAKE_CURRENT_SOURCE_DIR}) -set (abs_builddir ${CMAKE_CURRENT_BINARY_DIR}) -set (abs_top_srcdir ${CMAKE_SOURCE_DIR}) -set (abs_top_builddir ${CMAKE_BINARY_DIR}) -set (builddir_lib_suffix "") - if (CMAKE_SYSTEM_NAME STREQUAL Windows) - configure_file (${CMAKE_CURRENT_SOURCE_DIR}/test_env.ps1.in - ${CMAKE_CURRENT_BINARY_DIR}/test_env.ps1 @ONLY) -else (CMAKE_SYSTEM_NAME STREQUAL Windows) - configure_file (${CMAKE_CURRENT_SOURCE_DIR}/test_env.sh.in - ${CMAKE_CURRENT_BINARY_DIR}/test_env.sh @ONLY) -endif (CMAKE_SYSTEM_NAME STREQUAL Windows) - -# Copy qpidd-p0 script to build directory so tests can find it. -configure_file (${CMAKE_CURRENT_SOURCE_DIR}/qpidd-p0 ${CMAKE_CURRENT_BINARY_DIR} COPYONLY) + # Windows + + set(ENV{OUTDIR} ${EXECUTABLE_OUTPUT_PATH}) -if (CMAKE_SYSTEM_NAME STREQUAL Windows) - set (ENV{OUTDIR} ${EXECUTABLE_OUTPUT_PATH}) - set (test_script_suffix ".ps1") - set (shell "powershell") + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/env.ps1.in + ${CMAKE_CURRENT_BINARY_DIR}/env.ps1 @ONLY) +else (CMAKE_SYSTEM_NAME STREQUAL Windows) + # Posix + + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/env.sh.in + ${CMAKE_CURRENT_BINARY_DIR}/env.sh @ONLY) endif (CMAKE_SYSTEM_NAME STREQUAL Windows) -set(test_wrap ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_test${test_script_suffix} -buildDir ${CMAKE_BINARY_DIR}) -set(python_wrap ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_test${test_script_suffix} -buildDir ${CMAKE_BINARY_DIR} -python) - +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/check_dependencies.py.in + ${CMAKE_CURRENT_BINARY_DIR}/check_dependencies.py @ONLY) +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/env.py.in + ${CMAKE_CURRENT_BINARY_DIR}/env.py @ONLY) + +file(COPY . + DESTINATION . + PATTERN "*.cmake" EXCLUDE + PATTERN "*.in" EXCLUDE + PATTERN "*.c" EXCLUDE + PATTERN "*.h" EXCLUDE + PATTERN "*.cpp" EXCLUDE) + if (BUILD_TESTING_UNITTESTS) -# # Unit test program # # Unit tests are built as a single program to reduce valgrind overhead @@ -144,8 +141,8 @@ if (BUILD_TESTING_UNITTESTS) # ccmake and set unit_tests_to_build to the set you want to build. # Like this to work with cmake 2.4 on Unix -set (qpid_test_boost_libs - ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} ${Boost_SYSTEM_LIBRARY}) +set(qpid_test_boost_libs + ${Boost_UNIT_TEST_FRAMEWORK_LIBRARY} ${Boost_SYSTEM_LIBRARY}) set(all_unit_tests AccumulatedAckTest @@ -200,21 +197,16 @@ set(all_unit_tests Url Uuid Variant - ${xml_tests} - ) - -set(unit_tests_to_build - "" - CACHE STRING "Which unit tests to build" - ) + ${xml_tests}) +set(unit_tests_to_build "" CACHE STRING "Which unit tests to build") mark_as_advanced(unit_tests_to_build) # If no unit_test specifically set then use all unit tests if (unit_tests_to_build) -set(actual_unit_tests ${unit_tests_to_build}) + set(actual_unit_tests ${unit_tests_to_build}) else() -set(actual_unit_tests ${all_unit_tests}) + set(actual_unit_tests ${all_unit_tests}) endif() add_executable (unit_test unit_test @@ -224,148 +216,115 @@ target_link_libraries (unit_test qpidmessaging qpidtypes qpidbroker qpidclient qpidcommon) set_target_properties (unit_test PROPERTIES COMPILE_DEFINITIONS _IN_QPID_BROKER) -add_test (NAME unit_test COMMAND ${test_wrap} -boostTest -- $<TARGET_FILE:unit_test>) - endif (BUILD_TESTING_UNITTESTS) -add_library (shlibtest MODULE shlibtest.cpp) +add_library(shlibtest MODULE shlibtest.cpp) if (BUILD_SASL) - add_custom_command( - OUTPUT sasl_config/qpidd.conf sasl_config/qpidd.sasldb - COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/sasl_test_setup.sh) + add_custom_command(OUTPUT sasl_config/qpidd.conf sasl_config/qpidd.sasldb + COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/sasl_test_setup.sh) - add_custom_target( - sasl_config ALL - DEPENDS sasl_config/qpidd.conf sasl_config/qpidd.sasldb) + add_custom_target(sasl_config ALL + DEPENDS sasl_config/qpidd.conf sasl_config/qpidd.sasldb) endif (BUILD_SASL) -# # Other test programs -# -add_executable (echotest echotest.cpp ${platform_test_additions}) -target_link_libraries (echotest qpidclient qpidcommon) -add_executable (publish publish.cpp ${platform_test_additions}) -target_link_libraries (publish qpidclient qpidcommon) +add_executable(echotest echotest.cpp ${platform_test_additions}) +target_link_libraries(echotest qpidclient qpidcommon) -add_executable (consume consume.cpp ${platform_test_additions}) -target_link_libraries (consume qpidclient qpidcommon) +add_executable(publish publish.cpp ${platform_test_additions}) +target_link_libraries(publish qpidclient qpidcommon) -add_executable (header_test header_test.cpp ${platform_test_additions}) -target_link_libraries (header_test qpidclient qpidcommon) +add_executable(consume consume.cpp ${platform_test_additions}) +target_link_libraries(consume qpidclient qpidcommon) -add_executable (declare_queues declare_queues.cpp ${platform_test_additions}) -target_link_libraries (declare_queues qpidclient qpidcommon) +add_executable(header_test header_test.cpp ${platform_test_additions}) +target_link_libraries(header_test qpidclient qpidcommon) -add_executable (replaying_sender replaying_sender.cpp ${platform_test_additions}) -target_link_libraries (replaying_sender qpidclient qpidcommon) +add_executable(declare_queues declare_queues.cpp ${platform_test_additions}) +target_link_libraries(declare_queues qpidclient qpidcommon) -add_executable (resuming_receiver resuming_receiver.cpp ${platform_test_additions}) -target_link_libraries (resuming_receiver qpidclient qpidcommon) +add_executable(replaying_sender replaying_sender.cpp ${platform_test_additions}) +target_link_libraries(replaying_sender qpidclient qpidcommon) -add_executable (txshift txshift.cpp ${platform_test_additions}) -target_link_libraries (txshift qpidclient qpidcommon) +add_executable(resuming_receiver resuming_receiver.cpp ${platform_test_additions}) +target_link_libraries(resuming_receiver qpidclient qpidcommon) -add_executable (txjob txjob.cpp ${platform_test_additions}) -target_link_libraries (txjob qpidclient qpidcommon) +add_executable(txshift txshift.cpp ${platform_test_additions}) +target_link_libraries(txshift qpidclient qpidcommon) -add_executable (datagen datagen.cpp ${platform_test_additions}) -target_link_libraries (datagen qpidclient qpidcommon) +add_executable(txjob txjob.cpp ${platform_test_additions}) +target_link_libraries(txjob qpidclient qpidcommon) -add_executable (msg_group_test msg_group_test.cpp ${platform_test_additions}) -target_link_libraries (msg_group_test qpidmessaging qpidtypes qpidcommon) +add_executable(datagen datagen.cpp ${platform_test_additions}) +target_link_libraries(datagen qpidclient qpidcommon) -add_executable (ha_test_max_queues ha_test_max_queues.cpp ${platform_test_additions}) -target_link_libraries (ha_test_max_queues qpidclient qpidcommon) +add_executable(msg_group_test msg_group_test.cpp ${platform_test_additions}) +target_link_libraries(msg_group_test qpidmessaging qpidtypes qpidcommon) -if (BUILD_SASL) - add_executable (sasl_version sasl_version.cpp ${platform_test_additions}) -endif (BUILD_SASL) +add_executable(ha_test_max_queues ha_test_max_queues.cpp ${platform_test_additions}) +target_link_libraries(ha_test_max_queues qpidclient qpidcommon) + +add_library(test_store MODULE test_store.cpp) +target_link_libraries(test_store qpidbroker qpidcommon) +set_target_properties(test_store PROPERTIES PREFIX "" COMPILE_DEFINITIONS _IN_QPID_BROKER) -set (python_src ${CMAKE_SOURCE_DIR}/../python) -if (EXISTS ${python_src}) - set (python_bld ${CMAKE_CURRENT_BINARY_DIR}/python) - # This will not pick up added or deleted python files - # In that case you need to rerun CMake - file(GLOB_RECURSE python_files ${python_src}/*.py) - - add_custom_command( - OUTPUT ${python_bld} - DEPENDS ${python_files} - COMMAND ${PYTHON_EXECUTABLE} - setup.py - build --build-base=${python_bld}/build - install --prefix=${python_bld} --install-lib=${python_bld} --install-scripts=${python_bld}/commands - WORKING_DIRECTORY ${python_src} - ) - - add_custom_target( - python_bld ALL - DEPENDS ${python_bld} - ) -endif (EXISTS ${python_src}) +add_library(dlclose_noop MODULE dlclose_noop.c) if (BUILD_SASL) - add_test (NAME sasl_fed COMMAND ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/sasl_fed${test_script_suffix}) - add_test (NAME sasl_fed_ex_dynamic COMMAND ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/sasl_fed_ex${test_script_suffix} dynamic) - add_test (NAME sasl_fed_ex_link COMMAND ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/sasl_fed_ex${test_script_suffix} link) - add_test (NAME sasl_fed_ex_queue COMMAND ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/sasl_fed_ex${test_script_suffix} queue) - add_test (NAME sasl_fed_ex_route COMMAND ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/sasl_fed_ex${test_script_suffix} route) - add_test (NAME sasl_no_dir COMMAND ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/sasl_no_dir${test_script_suffix}) - if (BUILD_SSL) - add_test(NAME ssl_test COMMAND ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/ssl_test${test_script_suffix}) - endif (BUILD_SSL) + add_executable(sasl_version sasl_version.cpp ${platform_test_additions}) endif (BUILD_SASL) -add_test (NAME qpid-client-test COMMAND ${test_wrap} -startBroker -- $<TARGET_FILE:qpid-client-test>) -add_test (NAME quick_perftest COMMAND ${test_wrap} -startBroker -- $<TARGET_FILE:qpid-perftest> --summary --count 100) -add_test (NAME quick_topictest COMMAND ${test_wrap} -startBroker -- ${CMAKE_CURRENT_SOURCE_DIR}/quick_topictest${test_script_suffix}) -add_test (NAME quick_txtest COMMAND ${test_wrap} -startBroker -- $<TARGET_FILE:qpid-txtest> --queues 4 --tx-count 10 --quiet) -add_test (NAME quick_txtest2 COMMAND ${test_wrap} -startBroker -- $<TARGET_FILE:qpid-txtest2> --queues 4 --tx-count 10 --quiet) -add_test (NAME msg_group_tests COMMAND ${test_wrap} -startBroker -- ${CMAKE_CURRENT_SOURCE_DIR}/run_msg_group_tests${test_script_suffix}) -add_test (NAME run_header_test COMMAND ${test_wrap} -startBroker -- ${CMAKE_CURRENT_SOURCE_DIR}/run_header_test${test_script_suffix}) -add_test (NAME python_tests COMMAND ${test_wrap} -startBroker -- ${CMAKE_CURRENT_SOURCE_DIR}/python_tests${test_script_suffix}) -if (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) - # paged queue not yet implemented for windows - add_test (NAME paged_queue_tests COMMAND ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_paged_queue_tests${test_script_suffix}) -endif (NOT CMAKE_SYSTEM_NAME STREQUAL Windows) -if (BUILD_AMQP) - add_test (interop_tests ${python_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/interop_tests.py) -endif (BUILD_AMQP) +# Cross-platform tests + +add_test(NAME unit_tests COMMAND ${PYTHON_EXECUTABLE} run_unit_tests) + +add_test(NAME acl_tests COMMAND ${PYTHON_EXECUTABLE} run_acl_tests) +add_test(NAME cli_tests COMMAND ${PYTHON_EXECUTABLE} run_cli_tests) +add_test(NAME client_tests COMMAND ${PYTHON_EXECUTABLE} run_client_tests) +add_test(NAME federation_tests COMMAND ${PYTHON_EXECUTABLE} run_federation_tests) +add_test(NAME flow_control_tests COMMAND ${PYTHON_EXECUTABLE} run_flow_control_tests) +add_test(NAME ha_tests COMMAND ${PYTHON_EXECUTABLE} run_ha_tests) +add_test(NAME msg_group_tests COMMAND ${PYTHON_EXECUTABLE} run_msg_group_tests) +add_test(NAME performance_tests COMMAND ${PYTHON_EXECUTABLE} run_performance_tests) +add_test(NAME python_tests COMMAND ${PYTHON_EXECUTABLE} run_python_tests) +add_test(NAME queue_redirect_tests COMMAND ${PYTHON_EXECUTABLE} run_queue_redirect_tests) +add_test(NAME qmf_tests COMMAND ${PYTHON_EXECUTABLE} run_qmf_tests) +add_test(NAME transaction_tests COMMAND ${PYTHON_EXECUTABLE} run_transaction_tests) -add_test (ha_tests ${python_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/ha_tests.py) -add_test (qpidd_qmfv2_tests ${python_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/qpidd_qmfv2_tests.py) if (BUILD_AMQP) - add_test (interlink_tests ${python_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/interlink_tests.py) - add_test (idle_timeout_tests ${python_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/idle_timeout_tests.py) + add_test(NAME idle_timeout_tests COMMAND ${PYTHON_EXECUTABLE} run_idle_timeout_tests) + add_test(NAME interlink_tests COMMAND ${PYTHON_EXECUTABLE} run_interlink_tests) + add_test(NAME interop_tests COMMAND ${PYTHON_EXECUTABLE} run_interop_tests) endif (BUILD_AMQP) -add_test (swig_python_tests ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/swig_python_tests${test_script_suffix}) -add_test (ipv6_test ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/ipv6_test${test_script_suffix}) -add_test (federation_tests ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_federation_tests${test_script_suffix}) -add_test (federation_sys_tests ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_federation_sys_tests${test_script_suffix}) -add_test (queue_flow_limit_tests - ${test_wrap} - -startBroker -brokerOptions "--default-flow-stop-threshold=80 --default-flow-resume-threshold=70" - -- ${CMAKE_CURRENT_SOURCE_DIR}/run_queue_flow_limit_tests${test_script_suffix}) -if (BUILD_ACL) - add_test (acl_tests ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_acl_tests${test_script_suffix}) -endif (BUILD_ACL) -add_test (cli_tests ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_cli_tests${test_script_suffix}) -add_test (dynamic_log_level_test ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/dynamic_log_level_test${test_script_suffix}) -add_test (dynamic_log_hires_timestamp ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/dynamic_log_hires_timestamp${test_script_suffix}) -if (BUILD_MSSQL) - add_test (store_tests ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_store_tests${test_script_suffix} MSSQL) -endif (BUILD_MSSQL) -if (BUILD_MSCLFS) - add_test (store_tests_clfs ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_store_tests${test_script_suffix} MSSQL-CLFS) -endif (BUILD_MSCLFS) -add_test (queue_redirect ${shell} ${CMAKE_CURRENT_SOURCE_DIR}/run_queue_redirect${test_script_suffix}) -add_library(test_store MODULE test_store.cpp) -target_link_libraries (test_store qpidbroker qpidcommon) -set_target_properties (test_store PROPERTIES PREFIX "" COMPILE_DEFINITIONS _IN_QPID_BROKER) +if (CMAKE_SYSTEM_NAME STREQUAL Windows) + # Windows-only tests + + if (BUILD_MSSQL) + add_test(NAME store_tests COMMAND powershell run_store_tests.ps1 MSSQL) + endif (BUILD_MSSQL) + + if (BUILD_MSCLFS) + add_test(NAME store_tests_clfs COMMAND powershell run_store_tests.ps1 MSSQL-CLFS) + endif (BUILD_MSCLFS) +else (CMAKE_SYSTEM_NAME STREQUAL Windows) + # Posix-only tests -add_library (dlclose_noop MODULE dlclose_noop.c) + add_test(NAME logging_tests COMMAND run_logging_tests) # Pretty simple to convert + add_test(NAME ipv6_tests COMMAND run_ipv6_tests) # Also pretty simple to convert + add_test(NAME paged_queue_tests COMMAND run_paged_queue_tests) + add_test(NAME ring_queue_tests COMMAND run_ring_queue_tests) + add_test(NAME topic_tests COMMAND run_topic_tests) + + if (BUILD_SASL) + add_test(NAME sasl_tests COMMAND run_sasl_tests) + + if (BUILD_SSL) + add_test(NAME ssl_tests COMMAND run_ssl_tests) + endif (BUILD_SSL) + endif (BUILD_SASL) +endif (CMAKE_SYSTEM_NAME STREQUAL Windows) endif (BUILD_TESTING) diff --git a/qpid/cpp/src/tests/README.txt b/qpid/cpp/src/tests/README.txt index 8eaa5bbd25..50bd181ab0 100644 --- a/qpid/cpp/src/tests/README.txt +++ b/qpid/cpp/src/tests/README.txt @@ -8,21 +8,15 @@ developers can run tests selectively as explained below. Unit tests use the boost test framework, and are compiled to the programd unit_test -There are several options to control how test results are displayed, see - http://www.boost.org/doc/libs/1_35_0/libs/test/doc/components/utf/parameters/index.html +There are several options to control how test results are displayed. See +http://www.boost.org/doc/libs/1_35_0/libs/test/doc/components/utf/parameters/index.html. == System Tests == -System tests are executables or scripts. You can run executable tests directly -as well as via "make test" or "ctest". Some tests require environment settings -which are set by src/tests/test_env.sh on Unix or by src/tests/test_env.ps1 on -Windows. - -./python_tests: runs ../python/run_tests. This is the main set of -system tests for the broker. - -Other C++ client test executables and scripts under client/test are -system tests for the client. +System tests are executables or scripts. You can run executable tests +directly as well as via "make test" or "ctest". Some tests require +environment settings which are set by src/tests/env.sh on Unix or by +src/tests/env.ps1 on Windows. == Running selected tests == @@ -34,4 +28,3 @@ directly gives you additional options, e.g. This runs tests with names matching the regular expression <regexp> and will print the full output of the tests rather than just listing which tests pass or fail. - diff --git a/qpid/cpp/src/tests/ais_test.cpp b/qpid/cpp/src/tests/ais_test.cpp deleted file mode 100644 index 00c61242e4..0000000000 --- a/qpid/cpp/src/tests/ais_test.cpp +++ /dev/null @@ -1,23 +0,0 @@ -/* - * - * Copyright (c) 2006 The Apache Software Foundation - * - * Licensed 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. - * - */ - -// Defines test_main function to link with actual unit test code. -#define BOOST_AUTO_TEST_MAIN // Boost 1.33 -#define BOOST_TEST_MAIN -#include "unit_test.h" - diff --git a/qpid/cpp/src/tests/allhosts b/qpid/cpp/src/tests/allhosts deleted file mode 100755 index 07bc04fff5..0000000000 --- a/qpid/cpp/src/tests/allhosts +++ /dev/null @@ -1,79 +0,0 @@ -#!/usr/bin/env 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. -# - -usage() { - echo "Usage: $0 [options] command. -Run a command on each host in \$HOSTS. -Options: - -l USER passed to ssh - run as USER. - -t passed to ssh - create a terminal. - -b run in background, wait for commands to complete. - -d run in background, don't wait for commands to complete. - -s SECONDS sleep between starting commands. - -q don't print banner lines for each host. - -o SUFFIX log output of each command to <host>.SUFFIX - -X passed to ssh - forward X connection. -" - exit 1 -} - -while getopts "tl:bs:dqo:X" opt; do - case $opt in - l) SSHOPTS="-l$OPTARG $SSHOPTS" ;; - t) SSHOPTS="-t $SSHOPTS" ;; - b) BACKGROUND=1 ;; - d) BACKGROUND=1; DISOWN=1 ;; - s) SLEEP="sleep $OPTARG" ;; - q) NOBANNER=1 ;; - o) SUFFIX=$OPTARG ;; - X) SSHOPTS="-X $SSHOPTS" ;; - *) usage;; - esac -done -shift `expr $OPTIND - 1` -test "$*" || usage; - -OK_FILE=`mktemp` # Will be deleted if anything goes wrong. -trap "rm -f $OK_FILE" EXIT - -do_ssh() { - h=$1; shift - if test $SUFFIX ; then ssh $SSHOPTS $h "$@" &> $h.$SUFFIX - else ssh $SSHOPTS $h "$@"; fi || rm -rf $OK_FILE; -} - -for h in $HOSTS ; do - test "$NOBANNER" || echo "== ssh $SSHOPTS $h $@ ==" - if [ "$BACKGROUND" = 1 ]; then - do_ssh $h "$@" & - CHILDREN="$! $CHILDREN" - else - do_ssh $h "$@" - fi - $SLEEP -done - -if [ "$DISOWN" = 1 ]; then - for c in $CHILDREN; do disown $c; done -else - wait -fi - -test -f $OK_FILE diff --git a/qpid/cpp/src/tests/brokertest.py b/qpid/cpp/src/tests/brokertest.py index 6fae88092b..8c32faad0c 100644 --- a/qpid/cpp/src/tests/brokertest.py +++ b/qpid/cpp/src/tests/brokertest.py @@ -354,7 +354,7 @@ class Broker(Popen): if (self.test.protocol and qm == qpid_messaging): kwargs.setdefault("protocol", self.test.protocol) return connection_class.establish(self.host_port(), timeout=timeout, **kwargs) - + @property def agent(self, **kwargs): """Return a BrokerAgent for this broker""" @@ -477,14 +477,14 @@ class BrokerTest(TestCase): TestCase.__init__(self, *args, **kwargs) # Environment settings. - qpidd_exec = os.path.abspath(checkenv("QPIDD_EXEC")) + qpidd_exec = "qpidd" ha_lib = os.getenv("HA_LIB") xml_lib = os.getenv("XML_LIB") amqp_lib = os.getenv("AMQP_LIB") - qpid_config_exec = os.getenv("QPID_CONFIG_EXEC") - qpid_route_exec = os.getenv("QPID_ROUTE_EXEC") - receiver_exec = os.getenv("RECEIVER_EXEC") - sender_exec = os.getenv("SENDER_EXEC") + qpid_config_exec = "qpid-config" + qpid_route_exec = "qpid-route" + receiver_exec = "receiver" + sender_exec = "sender" sql_store_lib = os.getenv("STORE_SQL_LIB") sql_clfs_store_lib = os.getenv("STORE_SQL_CLFS_LIB") sql_catalog = os.getenv("STORE_CATALOG") @@ -505,19 +505,7 @@ class BrokerTest(TestCase): PN_TX_VERSION = (0, 9) amqp_tx_supported = PN_VERSION >= PN_TX_VERSION - - @classmethod - def amqp_tx_warning(cls): - if not cls.amqp_tx_supported: - if cls.PN_VERSION == (0, 0): - print "WARNING: Cannot test transactions over AMQP 1.0, proton not on path so version could not be determined" - elif cls.PN_VERSION == (0, 7): - print "WARNING: Cannot test transactions over AMQP 1.0, proton version is 0.7 or less, %s.%s required" % cls.PN_TX_VERSION - else: - print "WARNING: Cannot test transactions over AMQP 1.0, proton version %s.%s < %s.%s" % (cls.PN_VERSION + cls.PN_TX_VERSION) - return False - return True - + def configure(self, config): self.config=config def setUp(self): diff --git a/qpid/cpp/src/tests/check_dependencies.py.in b/qpid/cpp/src/tests/check_dependencies.py.in new file mode 100644 index 0000000000..4a8a544026 --- /dev/null +++ b/qpid/cpp/src/tests/check_dependencies.py.in @@ -0,0 +1,53 @@ +#!/usr/bin/env python + +# +# 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. +# + +import os +import sys + +def _message(error): + return """ +=============================================================================== +Error! {} + +The tests require Qpid Python, version 1.33 or greater. Make sure +Qpid Python is installed and available on the Python path: + + - Linux distributions: Install 'python-qpid' + - Other: Install qpid-python from source and update PYTHONPATH + +See the Qpid website for more information: + + - Qpid downloads: http://qpid.apache.org/download.html + - Qpid packages: http://qpid.apache.org/packages.html +=============================================================================== +""".format(error) + +sys.path.insert(0, os.path.join("@CMAKE_SOURCE_DIR@", "management", "python", "lib")) + +try: + import qpid +except ImportError: + exit(_message("Can't find Python 'qpid' module")) + +try: + import qpid_tests +except ImportError: + exit(_message("Can't find Python 'qpid_tests' module")) diff --git a/qpid/cpp/src/tests/cli_tests.py b/qpid/cpp/src/tests/cli_tests.py index eee9bc648c..ae0f32d4d1 100755 --- a/qpid/cpp/src/tests/cli_tests.py +++ b/qpid/cpp/src/tests/cli_tests.py @@ -295,7 +295,8 @@ class CliTests(TestBase010): self.helper_create_queue(qname) # now bind the queue to the xchg - foo = self.qpid_config_command("-f test.xquery bind " + xchgname + " " + qname) + xquery_file = self.defines["xquery-file"] + foo = self.qpid_config_command("-f " + xquery_file + " bind " + xchgname + " " + qname) # print foo ret = os.system(foo) self.assertEqual(ret, 0) @@ -468,10 +469,14 @@ class CliTests(TestBase010): return self.cli_dir() + "/qpid-config -b localhost:%d" % self.broker.port + " " + arg def qpid_config_api(self, arg = ""): - script = import_script(checkenv("QPID_CONFIG_EXEC")) + path = os.path.join(os.getenv("SOURCE_DIR"), "management", "python", + "bin", "qpid-config") + script = import_script(path) broker = ["-b", "localhost:"+str(self.broker.port)] return script.main(broker + arg.split()) def qpid_route_api(self, arg = ""): - script = import_script(checkenv("QPID_ROUTE_EXEC")) + path = os.path.join(os.getenv("SOURCE_DIR"), "management", "python", + "bin", "qpid-route") + script = import_script(path) return script.main(arg.split()) diff --git a/qpid/cpp/src/tests/common.py b/qpid/cpp/src/tests/common.py new file mode 100644 index 0000000000..992bc60fb8 --- /dev/null +++ b/qpid/cpp/src/tests/common.py @@ -0,0 +1,297 @@ +# +# 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. +# + +from __future__ import print_function + +from env import * + +import atexit as _atexit +import os as _os +import platform as _platform +import re as _re +import signal as _signal +import subprocess as _subprocess +import shutil as _shutil +import time as _time +import uuid as _uuid + +WINDOWS = _platform.system() == "Windows" + +def _unique_id(): + return str(_uuid.uuid4())[:4] + +def make_work_dir(): + prog = file_name(ARGS[0]) + name = "{}_{}".format(prog, _unique_id()) + + return make_dir(join(BUILD_DIR, name)) + +WORK_DIR = make_work_dir() + +notice("Created work dir '{}'", WORK_DIR) + +def _init_valgrind_command(command): + if VALGRIND is None: + return command, None + + log_file = join(WORK_DIR, "valgrind_{}.log".format(_unique_id())) + suppressions_file = join(BUILD_DIR, "src", "tests", ".valgrind.supp") + + valgrind_command = [ + VALGRIND, + "--leak-check=full --num-callers=25 --error-exitcode=100", + "--log-file={}".format(log_file), + "--suppressions={}".format(suppressions_file), + "--", + command, + ] + + return " ".join(valgrind_command), log_file + +def call_with_valgrind(command, *args, **kwargs): + command, valgrind_log_file = _init_valgrind_command(command) + + try: + call(command, *args, **kwargs) + except _subprocess.CalledProcessError as e: + if e.returncode == 100: + error("Valgrind reported errors") + print(read(valgrind_log_file)) + + raise + +def call_for_output_with_valgrind(command, *args, **kwargs): + command, valgrind_log_file = _init_valgrind_command(command) + + try: + return call_for_output(command, *args, **kwargs) + except _subprocess.CalledProcessError as e: + if e.returncode == 100: + error("Valgrind reported errors") + print(read(valgrind_log_file)) + + raise + +_brokers = list() +_brokers_by_port = dict() +_broker_port_expr = _re.compile(r"Listening on TCP/TCP6 port ([0-9]+)") +_broker_config_file = join(BUILD_DIR, "src", "tests", "qpidd-empty.conf") + +class _Broker(object): + def __init__(self, dir): + self.dir = dir + + self.command_file = join(self.dir, "command") + self.log_file = join(self.dir, "log") + self.data_dir = join(self.dir, "data") + + self.port = None + self.proc = None + self.command = None + self.valgrind_log_file = None + + def __repr__(self): + args = self.port, self.proc.pid, self.proc.returncode + return "Broker(port={}, pid={}, exit={})".format(*args) + + def start(self, args): + make_dir(self.dir) + + command = [ + "qpidd", + "--port 0", + "--interface localhost", + "--no-module-dir", + "--log-enable info+", + "--log-source yes", + "--log-to-stderr no", + "--log-to-file {}".format(self.log_file), + "--config {}".format(_broker_config_file), + "--data-dir {}".format(self.data_dir), + ] + + if WINDOWS: + command += [ + "--ssl-cert-store-location LocalMachine", + "--ssl-cert-name localhost", + "--ssl-port 0", + ] + + command += [x for x in args if x is not None] + command = " ".join(command) + command, valgrind_log_file = _init_valgrind_command(command) + + self.command = command + self.valgrind_log_file = valgrind_log_file + + notice("Calling '{}'", self.command) + write(self.command_file, self.command) + + self.proc = _subprocess.Popen(self.command, shell=True, + stdout=_subprocess.PIPE) + self.port = self._wait_for_port() + + assert self.command is not None + assert self.proc is not None + assert self.port is not None + assert self.port not in _brokers_by_port, self.port + + _brokers.append(self) + _brokers_by_port[self.port] = self + + notice("Started {}", self) + + def _wait_for_port(self): + port = None + + while port is None: + _time.sleep(0.4) + port = self._scan_port() + + return port + + def _scan_port(self): + if not exists(self.log_file): + return + + match = _re.search(_broker_port_expr, read(self.log_file)) + + if match: + return match.group(1) + + def stop(self): + if self.proc.poll() is not None: + return + + notice("Stopping {}", self) + + if WINDOWS: + call("taskkill /f /t /pid {}", self.proc.pid) + else: + self.proc.terminate() + + self.proc.wait() + + def check(self): + if WINDOWS: + # Taskkilled windows processes always return 1, so exit + # codes don't mean anything there + return 0 + + notice("Checking {}", self) + + if self.proc.returncode == 0: + return 0 + + error("{} exited with code {}", self, self.proc.returncode) + + if self.proc.returncode == 100: + print("Valgrind reported errors:") + print(read(self.valgrind_log_file)) + else: + print("Last 100 lines of broker log:") + print(tail(self.log_file, 100)) + + flush() + + error("{} exited with code {}", self, self.proc.returncode) + + return self.proc.returncode + +def start_broker(dir, *args, **kwargs): + if not is_absolute(dir): + dir = join(WORK_DIR, dir) + + auth_disabled = kwargs.get("auth_disabled", True) + + if auth_disabled: + args = list(args) + args.append("--auth no") + + broker = _Broker(dir) + broker.start(args) + + return broker.port + +def stop_broker(port): + broker = _brokers_by_port[port] + broker.stop() + +def check_broker(port): + broker = _brokers_by_port[port] + + if broker.check() != 0: + exit("Broker failure") + +def check_results(): + for broker in _brokers: + broker.stop() + + errors = False + + for broker in _brokers: + code = broker.check() + + if code == 0: + continue + + errors = True + + if errors: + exit("Broker failure") + + remove(WORK_DIR) + + notice("Tests completed without error") + +def _exit_handler(): + if exists(WORK_DIR): + notice("Output saved in work dir '{}'", WORK_DIR) + + for broker in _brokers: + broker.stop() + +_atexit.register(_exit_handler) + +def configure_broker(broker_port, *args): + command = [ + "qpid-config", + "--broker localhost:{}".format(broker_port), + ] + + command += [x for x in args if x is not None] + + call(" ".join(command)) + +def run_broker_tests(broker_port, *args): + command = [ + "qpid-python-test", + "--broker localhost:{}".format(broker_port), + "--time", + ] + + command += [x for x in args if x is not None] + + call(" ".join(command)) + +def connect_brokers(*args): + command = ["qpid-route"] + command += [x for x in args if x is not None] + + call(" ".join(command)) diff --git a/qpid/cpp/src/tests/dynamic_log_hires_timestamp b/qpid/cpp/src/tests/dynamic_log_hires_timestamp index 75034f9902..606286d9c3 100755 --- a/qpid/cpp/src/tests/dynamic_log_hires_timestamp +++ b/qpid/cpp/src/tests/dynamic_log_hires_timestamp @@ -20,14 +20,14 @@ # # Run a simple test to verify dynamic log highres timestamp changes -source ./test_env.sh -test -d $PYTHON_DIR || { echo "Skipping python tests, no python dir."; exit 0; } + +source ./env.sh LOG_FILE=hires_test.log trap cleanup EXIT cleanup() { - test -n "$PORT" && $QPIDD_EXEC --no-module-dir --quit --port $PORT + test -n "$PORT" && qpidd --no-module-dir --quit --port $PORT } error() { @@ -36,16 +36,16 @@ error() { } rm -rf $LOG_FILE -PORT=$($QPIDD_EXEC --auth=no --no-module-dir --daemon --port=0 --interface 127.0.0.1 --log-to-file $LOG_FILE) || error "Could not start broker" +PORT=$(qpidd --auth=no --no-module-dir --daemon --port=0 --interface 127.0.0.1 --log-to-file $LOG_FILE) || error "Could not start broker" -echo Broker for log highres timestamp test started on $PORT, pid is $($QPIDD_EXEC --no-module-dir --check --port $PORT) +echo Broker for log highres timestamp test started on $PORT, pid is $(qpidd --no-module-dir --check --port $PORT) -$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker' > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=1 body=LOWRES > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT setLogHiresTimestamp logHires='true' > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=2 body=HI_RES > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT setLogHiresTimestamp logHires='false' > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=3 body=LOWRES > /dev/null +qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker' > /dev/null +qpid-ctrl -b localhost:$PORT echo sequence=1 body=LOWRES > /dev/null +qpid-ctrl -b localhost:$PORT setLogHiresTimestamp logHires='true' > /dev/null +qpid-ctrl -b localhost:$PORT echo sequence=2 body=HI_RES > /dev/null +qpid-ctrl -b localhost:$PORT setLogHiresTimestamp logHires='false' > /dev/null +qpid-ctrl -b localhost:$PORT echo sequence=3 body=LOWRES > /dev/null # Expect 3 log entries with 'echo' in them if [[ $(grep echo $LOG_FILE | wc -l) -ne 3 ]]; then diff --git a/qpid/cpp/src/tests/dynamic_log_level_test b/qpid/cpp/src/tests/dynamic_log_level_test index f8fd7a8dd8..0ea40d11b6 100755 --- a/qpid/cpp/src/tests/dynamic_log_level_test +++ b/qpid/cpp/src/tests/dynamic_log_level_test @@ -20,14 +20,14 @@ # # Run a simple test to verify dynamic log level changes -source ./test_env.sh -test -d $PYTHON_DIR || { echo "Skipping python tests, no python dir."; exit 0; } + +source ./env.sh LOG_FILE=log_test.log trap cleanup EXIT cleanup() { - test -n "$PORT" && $QPIDD_EXEC --no-module-dir --quit --port $PORT + test -n "$PORT" && qpidd --no-module-dir --quit --port $PORT } error() { @@ -43,30 +43,30 @@ checklog() { } rm -rf $LOG_FILE -PORT=$($QPIDD_EXEC --auth=no --no-module-dir --daemon --port=0 --interface 127.0.0.1 --log-to-file $LOG_FILE) || error "Could not start broker" +PORT=$(qpidd --auth=no --no-module-dir --daemon --port=0 --interface 127.0.0.1 --log-to-file $LOG_FILE) || error "Could not start broker" -echo Broker for log level test started on $PORT, pid is $($QPIDD_EXEC --no-module-dir --check --port $PORT) +echo Broker for log level test started on $PORT, pid is $(qpidd --no-module-dir --check --port $PORT) # Set level to notice+ and send an echo request # The 'echo' in the log is hidden since it is at debug level. -$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='notice+' > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=1 body=HIDDEN > /dev/null +qpid-ctrl -b localhost:$PORT setLogLevel level='notice+' > /dev/null +qpid-ctrl -b localhost:$PORT echo sequence=1 body=HIDDEN > /dev/null checklog 0 "Step 1 Expected no echo log entries" # Next, enable all Broker logs at debug and higher levels and send another echo # This 'echo' should be in the log. -$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker' > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=2 body=VISIBLE > /dev/null +qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker' > /dev/null +qpid-ctrl -b localhost:$PORT echo sequence=2 body=VISIBLE > /dev/null checklog 1 "Step 2 Expected one echo log entry" # Now turn on Broker debug messages but specifically disable ManagementMethod logs # The 'echo' should be hidden. -$srcdir/qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker !debug+:broker::Broker::ManagementMethod' > /dev/null -$srcdir/qpid-ctrl -b localhost:$PORT echo sequence=3 body=HIDDEN > /dev/null +qpid-ctrl -b localhost:$PORT setLogLevel level='debug+:Broker !debug+:broker::Broker::ManagementMethod' > /dev/null +qpid-ctrl -b localhost:$PORT echo sequence=3 body=HIDDEN > /dev/null checklog 1 "Step 3 Expected one echo log entry" # Verify that the management get returns what was just set -$srcdir/qpid-ctrl -b localhost:$PORT getLogLevel > dynamic_log_level.tmp +qpid-ctrl -b localhost:$PORT getLogLevel > dynamic_log_level.tmp if [[ $(grep 'level=debug+:Broker,!debug+:broker::Broker::ManagementMethod' dynamic_log_level.tmp | wc -l) -ne 1 ]]; then error "Step 4 getLogLevel returned unexpected value: " `cat dynamic_log_level.tmp` fi @@ -76,10 +76,10 @@ cleanup # Start another broker with --log-disable settings and make sure the management string receives them rm -rf $LOG_FILE -PORT=$($QPIDD_EXEC --auth=no --no-module-dir --daemon --port=0 --interface 127.0.0.1 --log-to-file $LOG_FILE --log-enable debug:foo --log-disable debug:bar) || error "Could not start broker" -echo Broker for log level test started on $PORT, pid is $($QPIDD_EXEC --no-module-dir --check --port $PORT) +PORT=$(qpidd --auth=no --no-module-dir --daemon --port=0 --interface 127.0.0.1 --log-to-file $LOG_FILE --log-enable debug:foo --log-disable debug:bar) || error "Could not start broker" +echo Broker for log level test started on $PORT, pid is $(qpidd --no-module-dir --check --port $PORT) -$srcdir/qpid-ctrl -b localhost:$PORT getLogLevel > dynamic_log_level.tmp +qpid-ctrl -b localhost:$PORT getLogLevel > dynamic_log_level.tmp if [[ $(grep 'level=debug:foo,!debug:bar' dynamic_log_level.tmp | wc -l) -ne 1 ]]; then error "Step 5 getLogLevel returned unexpected value: " `cat dynamic_log_level.tmp` fi diff --git a/qpid/cpp/src/tests/test_env.ps1.in b/qpid/cpp/src/tests/env.ps1.in index 94834a4b5e..94834a4b5e 100644 --- a/qpid/cpp/src/tests/test_env.ps1.in +++ b/qpid/cpp/src/tests/env.ps1.in diff --git a/qpid/cpp/src/tests/env.py.in b/qpid/cpp/src/tests/env.py.in new file mode 100644 index 0000000000..d76e17f573 --- /dev/null +++ b/qpid/cpp/src/tests/env.py.in @@ -0,0 +1,100 @@ +# +# 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. +# + +from __future__ import print_function + +from plano import * + +def _export(name, value): + globals()[name] = value + + if value is not None: + ENV[name] = value + +def _export_module(name, path): + _export(name, None) + + if exists(path): + _export(name, path) + +# Variables substituted by cmake + +_export("BUILD_DIR", normalize_path("@CMAKE_BINARY_DIR@")) +_export("SOURCE_DIR", normalize_path("@CMAKE_SOURCE_DIR@")) +_export("SASLPASSWD2", normalize_path("@SASLPASSWD2_EXECUTABLE@")) +_export("PYTHON", normalize_path("@PYTHON_EXECUTABLE@")) +_export("VALGRIND", None) + +if "@ENABLE_VALGRIND@" == "ON": + _export("VALGRIND", normalize_path("@VALGRIND_EXECUTABLE@")) + +# Python path + +_python_path = [ + join(BUILD_DIR, "src", "tests"), + join(BUILD_DIR, "bindings", "qpid", "python"), + join(BUILD_DIR, "management", "python", "lib"), +] + +if "PYTHONPATH" in ENV: + _python_path.extend(ENV["PYTHONPATH"].split(PATH_VAR_SEP)) + +ENV["PYTHONPATH"] = PATH_VAR_SEP.join(_python_path) + +# Path + +_path = [ + join(BUILD_DIR, "src"), + join(BUILD_DIR, "src", "RelWithDebInfo"), + join(BUILD_DIR, "src", "tests"), + join(BUILD_DIR, "src", "tests", "RelWithDebInfo"), + join(BUILD_DIR, "management", "python", "bin"), +] + +if "PATH" in ENV: + _path.extend(ENV["PATH"].split(PATH_VAR_SEP)) + +ENV["PATH"] = PATH_VAR_SEP.join(_path) + +# Modules + +_export_module("HA_LIB", join(BUILD_DIR, "src", "ha.so")) +_export_module("XML_LIB", join(BUILD_DIR, "src", "xml.so")) +_export_module("AMQP_LIB", join(BUILD_DIR, "src", "amqp.so")) +_export_module("TEST_STORE_LIB", join(BUILD_DIR, "src", "tests", "test_store.so")) +_export_module("STORE_LIB", join(BUILD_DIR, "src", "linearstore.so")) + +if STORE_LIB is None: + _export_module("STORE_LIB", join(BUILD_DIR, "src", "legacystore.so")) + +# Summarize + +print("PWD: {}".format(current_dir())) +print("SOURCE_DIR: {}".format(SOURCE_DIR)) +print("BUILD_DIR: {}".format(BUILD_DIR)) + +print("PATH:") + +for item in _path: + print(" {}".format(item)) + +print("PYTHONPATH:") + +for item in _python_path: + print(" {}".format(item)) diff --git a/qpid/cpp/src/tests/env.sh.in b/qpid/cpp/src/tests/env.sh.in new file mode 100644 index 0000000000..ee5b858b94 --- /dev/null +++ b/qpid/cpp/src/tests/env.sh.in @@ -0,0 +1,74 @@ +# +# 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. +# + +# Environment variables substituted by cmake + +export BUILD_DIR=@CMAKE_BINARY_DIR@ +export SOURCE_DIR=@CMAKE_SOURCE_DIR@ + +export SASLPASSWD2=@SASLPASSWD2_EXECUTABLE@ +export PYTHON=@PYTHON_EXECUTABLE@ + +if [[ "@ENABLE_VALGRIND@" == "ON" ]]; then + export VALGRIND=@VALGRIND_EXECUTABLE@ +fi + +# Python path + +export PYTHONPATH=$BUILD_DIR/src/tests:$BUILD_DIR/bindings/qpid/python:$BUILD_DIR/management/python/lib:${PYTHONPATH-} + +# Path + +export PATH=$BUILD_DIR/src:$BUILD_DIR/src/tests:$BUILD_DIR/management/python/bin:${PATH-} + +# Modules + +function export_module { + [[ -f $BUILD_DIR/src/$2 ]] && export $1=$BUILD_DIR/src/$2 +} + +export_module HA_LIB ha.so +export_module XML_LIB xml.so +export_module AMQP_LIB amqp.so + +[[ ${STORE_LIB-} ]] || export_module STORE_LIB linearstore.so +[[ ${STORE_LIB-} ]] || export_module STORE_LIB legacystore.so + +export TEST_STORE_LIB=$BUILD_DIR/src/tests/test_store.so + +# Qpidd options - Eliminate + +export QPID_NO_MODULE_DIR=1 # Don't accidentally load installed modules +export QPID_DATA_DIR= # Disable persistence +export QPID_CONFIG=$SOURCE_DIR/src/tests/qpidd-empty.conf + +# Options for boost test framework + +[[ ${BOOST_TEST_SHOW_PROGRESS-} ]] || export BOOST_TEST_SHOW_PROGRESS=yes +[[ ${BOOST_TEST_CATCH_SYSTEM_ERRORS-} ]] || export BOOST_TEST_CATCH_SYSTEM_ERRORS=no + +echo "PWD: $PWD" +echo "SOURCE_DIR: ${SOURCE_DIR}" +echo "BUILD_DIR: ${BUILD_DIR}" + +echo "PATH:" +echo -n " "; echo $PATH | sed 's/:/\n /g' + +echo "PYTHONPATH:" +echo -n " "; echo $PYTHONPATH | sed 's/:/\n /g' diff --git a/qpid/cpp/src/tests/federated_topic_test b/qpid/cpp/src/tests/federated_topic_test index 2d31f9af5a..b8356b4b9d 100755 --- a/qpid/cpp/src/tests/federated_topic_test +++ b/qpid/cpp/src/tests/federated_topic_test @@ -42,12 +42,12 @@ while getopts "s:m:b:" opt ; do esac done -source ./test_env.sh +source ./env.sh trap stop_brokers EXIT start_broker() { - $QPIDD_EXEC --daemon --port 0 --interface 127.0.0.1 --no-module-dir --no-data-dir --auth no > qpidd.port + qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --no-data-dir --auth no > qpidd.port } start_brokers() { @@ -61,7 +61,7 @@ start_brokers() { stop_brokers() { for p in $PORT_A $PORT_B $PORT_C; do - $QPIDD_EXEC --no-module-dir -q --port $p + qpidd --no-module-dir -q --port $p done } @@ -75,11 +75,11 @@ subscribe() { echo Subscriber $1 connecting on $MY_PORT LOG="subscriber_$1.log" - ./qpid-topic-listener -p $MY_PORT > $LOG 2>&1 && rm -f $LOG + qpid-topic-listener -p $MY_PORT > $LOG 2>&1 && rm -f $LOG } publish() { - ./qpid-topic-publisher --messages $MESSAGES --batches $BATCHES --subscribers $SUBSCRIBERS -p $PORT_A + qpid-topic-publisher --messages $MESSAGES --batches $BATCHES --subscribers $SUBSCRIBERS -p $PORT_A } setup_routes() { @@ -89,40 +89,39 @@ setup_routes() { if (($VERBOSE)); then echo "Establishing routes for topic..." fi - $QPID_ROUTE_EXEC route add $BROKER_B $BROKER_A amq.topic topic_control B B - $QPID_ROUTE_EXEC route add $BROKER_C $BROKER_B amq.topic topic_control C C + qpid-route route add $BROKER_B $BROKER_A amq.topic topic_control B B + qpid-route route add $BROKER_C $BROKER_B amq.topic topic_control C C if (($VERBOSE)); then echo "linked A->B->C" fi - $QPID_ROUTE_EXEC route add $BROKER_B $BROKER_C amq.topic topic_control B B - $QPID_ROUTE_EXEC route add $BROKER_A $BROKER_B amq.topic topic_control A A + qpid-route route add $BROKER_B $BROKER_C amq.topic topic_control B B + qpid-route route add $BROKER_A $BROKER_B amq.topic topic_control A A if (($VERBOSE)); then echo "linked C->B->A" echo "Establishing routes for response queue..." fi - $QPID_ROUTE_EXEC route add $BROKER_B $BROKER_C amq.direct response B B - $QPID_ROUTE_EXEC route add $BROKER_A $BROKER_B amq.direct response A A + qpid-route route add $BROKER_B $BROKER_C amq.direct response B B + qpid-route route add $BROKER_A $BROKER_B amq.direct response A A if (($VERBOSE)); then echo "linked C->B->A" for b in $BROKER_A $BROKER_B $BROKER_C; do echo "Routes for $b" - $QPID_ROUTE_EXEC route list $b + qpid-route route list $b done fi } -if test -d ${PYTHON_DIR} ; then - start_brokers - if (($VERBOSE)); then - echo "Running federated topic test against brokers on ports $PORT_A $PORT_B $PORT_C" - fi +start_brokers - for ((i=$SUBSCRIBERS ; i--; )); do - subscribe $i & - done +if (($VERBOSE)); then + echo "Running federated topic test against brokers on ports $PORT_A $PORT_B $PORT_C" +fi - setup_routes +for ((i=$SUBSCRIBERS ; i--; )); do + subscribe $i & +done - publish || exit 1 -fi +setup_routes + +publish || exit 1 diff --git a/qpid/cpp/src/tests/ha_test.py b/qpid/cpp/src/tests/ha_test.py index ace225a509..3659185140 100755 --- a/qpid/cpp/src/tests/ha_test.py +++ b/qpid/cpp/src/tests/ha_test.py @@ -160,9 +160,8 @@ acl allow all all @property def qpid_ha_script(self): if not hasattr(self, "_qpid_ha_script"): - qpid_ha_exec = os.getenv("QPID_HA_EXEC") - if not qpid_ha_exec or not os.path.isfile(qpid_ha_exec): - raise Skipped("qpid-ha not available") + qpid_ha_exec = os.path.join(os.getenv("SOURCE_DIR"), "management", + "python", "bin", "qpid-ha") self._qpid_ha_script = import_script(qpid_ha_exec) return self._qpid_ha_script @@ -225,11 +224,8 @@ acl allow all all assert retry(lambda: agent.getQueue(queue) is None, timeout=timeout), "%s: queue %s still present"%(msg,queue) def qpid_config(self, args): - qpid_config_exec = os.getenv("QPID_CONFIG_EXEC") - if not qpid_config_exec or not os.path.isfile(qpid_config_exec): - raise Skipped("qpid-config not available") assert subprocess.call( - [qpid_config_exec, "--broker", self.host_port()]+args, stdout=1, stderr=subprocess.STDOUT + ["qpid-config", "--broker", self.host_port()]+args, stdout=1, stderr=subprocess.STDOUT ) == 0, "qpid-config failed" def config_replicate(self, from_broker, queue): diff --git a/qpid/cpp/src/tests/ha_tests.py b/qpid/cpp/src/tests/ha_tests.py index 0efb8182ec..fdcb314751 100755 --- a/qpid/cpp/src/tests/ha_tests.py +++ b/qpid/cpp/src/tests/ha_tests.py @@ -1450,15 +1450,9 @@ class TransactionTests(HaBrokerTest): "*.tx.*"], stdout=None, stderr=None).assert_exit_ok() if __name__ == "__main__": - qpid_ha_exec = os.getenv("QPID_HA_EXEC") - if qpid_ha_exec and os.path.isfile(qpid_ha_exec): - BrokerTest.amqp_tx_warning() - outdir = "ha_tests.tmp" - shutil.rmtree(outdir, True) - os.execvp("qpid-python-test", - ["qpid-python-test", "-m", "ha_tests", "-DOUTDIR=%s"%outdir] - + sys.argv[1:]) - else: - print "Skipping ha_tests, qpid-ha not available" - + outdir = "ha_tests.tmp" + shutil.rmtree(outdir, True) + os.execvp("qpid-python-test", + ["qpid-python-test", "-m", "ha_tests", "-DOUTDIR=%s"%outdir] + + sys.argv[1:]) diff --git a/qpid/cpp/src/tests/install_env.sh.in b/qpid/cpp/src/tests/install_env.sh.in deleted file mode 100644 index d29a23930d..0000000000 --- a/qpid/cpp/src/tests/install_env.sh.in +++ /dev/null @@ -1,26 +0,0 @@ -# -# 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. -# - -absdir() { echo `cd $1 && pwd`; } - -prefix=`absdir @prefix@` -export QPID_INSTALL_PREFIX=$prefix -export PATH=$prefix/bin:$prefix/sbin:$prefix/libexec/qpid/tests:$PATH -export LD_LIBRARY_PATH=$prefix/lib:$LD_LIBRARY_PATH -export PYTHONPATH=$prefix/lib/python2.6/site-packages:$PYTHONPATH diff --git a/qpid/cpp/src/tests/interlink_tests.py b/qpid/cpp/src/tests/interlink_tests.py index 3eec2422f1..8833f06af5 100755 --- a/qpid/cpp/src/tests/interlink_tests.py +++ b/qpid/cpp/src/tests/interlink_tests.py @@ -72,12 +72,7 @@ class AmqpBrokerTest(BrokerTest): return self.popen(cmd, stdout=PIPE) def ready_receiver(self, config): - # NOTE: some tests core dump when run with SWIG binding over proton - # version<=0.6. This is fixed on proton 0.7. - def use_native(): - pv=os.environ.get("QPID_PROTON_VERSION") - return pv and [int(n) for n in pv.split(".")] <= [0,6] - s = self.broker.connect(native=use_native()).session() + s = self.broker.connect().session() r = s.receiver("readyq; {create:always}") cmd = ["qpid-receive", "--broker", config.url, diff --git a/qpid/cpp/src/tests/interop_tests.py b/qpid/cpp/src/tests/interop_tests.py index f76b9f634b..31182f324a 100755 --- a/qpid/cpp/src/tests/interop_tests.py +++ b/qpid/cpp/src/tests/interop_tests.py @@ -192,10 +192,7 @@ class CppTxTest(InteropTest): if __name__ == "__main__": - if not BrokerTest.amqp_tx_supported: - BrokerTest.amqp_tx_warning() - print "Skipping interop_tests" - sys.exit(0) + from env import * outdir = "interop_tests.tmp" shutil.rmtree(outdir, True) cmd = ["qpid-python-test", "-m", "interop_tests", "-DOUTDIR=%s"%outdir] + sys.argv[1:] diff --git a/qpid/cpp/src/tests/legacystore/CMakeLists.txt b/qpid/cpp/src/tests/legacystore/CMakeLists.txt index 9f6f6b7171..20a242b415 100644 --- a/qpid/cpp/src/tests/legacystore/CMakeLists.txt +++ b/qpid/cpp/src/tests/legacystore/CMakeLists.txt @@ -28,8 +28,6 @@ endif (QPID_LINK_BOOST_DYNAMIC) include_directories( ${CMAKE_CURRENT_SOURCE_DIR} ) -set(test_wrap ${shell} ${CMAKE_SOURCE_DIR}/src/tests/run_test${test_script_suffix} -buildDir=${CMAKE_BINARY_DIR}) - if (BUILD_TESTING_UNITTESTS) # Like this to work with cmake 2.4 on Unix @@ -53,7 +51,7 @@ target_link_libraries (${testname} if ("${ARGV1}" STREQUAL "LONG") set_target_properties(${testname} PROPERTIES COMPILE_DEFINITIONS LONG_TEST) endif () -add_test (NAME ${testname} COMMAND ${test_wrap} -boostTest -- $<TARGET_FILE:${testname}>) +add_test (NAME ${testname} COMMAND ${CMAKE_BINARY_DIR}/src/tests/run.sh $<TARGET_FILE:${testname}>) unset (testname) ENDMACRO (define_journal_test) @@ -100,7 +98,7 @@ target_link_libraries (jtt__ut ${Boost_PROGRAM_OPTIONS_LIBRARY} ${clock_gettime_LIB} legacystore_shared) -add_test(journal_jtt_ut ${test_wrap} -boostTest -workingDir=${CMAKE_CURRENT_SOURCE_DIR}/jrnl/jtt -- ${CMAKE_CURRENT_BINARY_DIR}/jtt__ut) +add_test(journal_jtt_ut ${CMAKE_BINARY_DIR}/src/tests/run.sh ${CMAKE_CURRENT_BINARY_DIR}/jtt__ut) endif (BUILD_TESTING_UNITTESTS) @@ -127,6 +125,6 @@ target_link_libraries (jtt add_test(journal_jtt ${CMAKE_CURRENT_BINARY_DIR}/jtt -c ${CMAKE_CURRENT_SOURCE_DIR}/jrnl/jtt/jtt.csv) -add_test (legacystore_python_tests ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/run_python_tests${test_script_suffix}) +add_test(legacystore_python_tests ${PYTHON_EXECUTABLE} run_python_tests) endif (BUILD_LEGACYSTORE AND BUILD_TESTING) diff --git a/qpid/cpp/src/tests/legacystore/federation/federation_tests_env.sh b/qpid/cpp/src/tests/legacystore/federation/federation_tests_env.sh index bf75056444..be4504f3bf 100755 --- a/qpid/cpp/src/tests/legacystore/federation/federation_tests_env.sh +++ b/qpid/cpp/src/tests/legacystore/federation/federation_tests_env.sh @@ -142,7 +142,7 @@ func_set_env () if test -z ${QPID_BLD}; then QPID_BLD="${QPID_DIR}/cpp" fi - source $QPID_BLD/src/tests/test_env.sh + source $QPID_BLD/src/tests/env.sh # CPP_CLUSTER_EXEC="${QPID_BLD}/src/tests/cluster_test" # PYTHON_CLUSTER_EXEC="${QPID_DIR}/cpp/src/tests/$PYTHON_TESTNAME" FEDERATION_SYS_TESTS_FAIL="${QPID_DIR}/cpp/src/tests/federation_sys_tests.fail" diff --git a/qpid/cpp/src/tests/legacystore/run_python_tests b/qpid/cpp/src/tests/legacystore/run_python_tests index c1d04a28a1..d87c72e966 100755 --- a/qpid/cpp/src/tests/legacystore/run_python_tests +++ b/qpid/cpp/src/tests/legacystore/run_python_tests @@ -1,4 +1,5 @@ -#!/usr/bin/env bash +#!/usr/bin/env python + # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -18,26 +19,29 @@ # under the License. # -source $QPID_TEST_COMMON +import os +import sys -ensure_python_tests +# Put the python test library on the path so we can get our +# environment -#Add our directory to the python path -export PYTHONPATH=$srcdir/legacystore:$PYTHONPATH +file_path = os.path.abspath(__file__) +store_tests_dir = os.path.split(file_path)[0] +tests_dir = os.path.split(store_tests_dir)[0] -MODULENAME=python_tests +sys.path.insert(0, tests_dir) -echo "Running Python tests in module ${MODULENAME}..." +from common import * -QPID_PORT=${QPID_PORT:-5672} -FAILING=${FAILING:-/dev/null} -PYTHON_TESTS=${PYTHON_TESTS:-$*} +# Add our directory to the python path -OUTDIR=${MODULENAME}.tmp -rm -rf $OUTDIR +ENV["PYTHONPATH"] = "{}:{}".format(store_tests_dir, ENV["PYTHONPATH"]) # To debug a test, add the following options to the end of the following line: # -v DEBUG -c qpid.messaging.io.ops [*.testName] -${QPID_PYTHON_TEST} -m ${MODULENAME} -I $FAILING -DOUTDIR=$OUTDIR \ - $PYTHON_TEST || exit 1 +port = start_broker("broker", "--load-module {}".format(STORE_LIB)) + +run_broker_tests(port, "-m python_tests", "-DOUTDIR={}".format(WORK_DIR)) + +check_results() diff --git a/qpid/cpp/src/tests/linearstore/CMakeLists.txt b/qpid/cpp/src/tests/linearstore/CMakeLists.txt index bf6c164818..760c54f3b1 100644 --- a/qpid/cpp/src/tests/linearstore/CMakeLists.txt +++ b/qpid/cpp/src/tests/linearstore/CMakeLists.txt @@ -17,13 +17,10 @@ # under the License. # -if(BUILD_LINEARSTORE AND BUILD_TESTING) +if (BUILD_LINEARSTORE AND BUILD_TESTING) message(STATUS "Building linearstore tests") -set(test_wrap ${shell} ${CMAKE_SOURCE_DIR}/src/tests/run_test${test_script_suffix} -buildDir=${CMAKE_BINARY_DIR}) - -add_test (linearstore_python_tests ${test_wrap} -- ${CMAKE_CURRENT_SOURCE_DIR}/run_python_tests${test_script_suffix}) +add_test(linearstore_python_tests ${PYTHON_EXECUTABLE} run_python_tests) endif (BUILD_LINEARSTORE AND BUILD_TESTING) - diff --git a/qpid/cpp/src/tests/linearstore/run_python_tests b/qpid/cpp/src/tests/linearstore/run_python_tests index 4ff212a71c..d87c72e966 100755 --- a/qpid/cpp/src/tests/linearstore/run_python_tests +++ b/qpid/cpp/src/tests/linearstore/run_python_tests @@ -1,4 +1,5 @@ -#!/usr/bin/env bash +#!/usr/bin/env python + # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -18,25 +19,29 @@ # under the License. # -source ${QPID_TEST_COMMON} +import os +import sys -ensure_python_tests +# Put the python test library on the path so we can get our +# environment -#Add our directory to the python path -export PYTHONPATH=$srcdir/linearstore:${PYTHONPATH} +file_path = os.path.abspath(__file__) +store_tests_dir = os.path.split(file_path)[0] +tests_dir = os.path.split(store_tests_dir)[0] -MODULENAME=python_tests +sys.path.insert(0, tests_dir) -echo "Running Python tests in module ${MODULENAME}..." +from common import * -QPID_PORT=${QPID_PORT:-5672} -FAILING=${FAILING:-/dev/null} -PYTHON_TESTS=${PYTHON_TESTS:-$*} +# Add our directory to the python path -OUTDIR=${MODULENAME}.tmp -rm -rf ${OUTDIR} +ENV["PYTHONPATH"] = "{}:{}".format(store_tests_dir, ENV["PYTHONPATH"]) # To debug a test, add the following options to the end of the following line: # -v DEBUG -c qpid.messaging.io.ops [*.testName] -${QPID_PYTHON_TEST} -m ${MODULENAME} -I ${FAILING} -DOUTDIR=${OUTDIR} ${PYTHON_TEST} || exit 1 +port = start_broker("broker", "--load-module {}".format(STORE_LIB)) + +run_broker_tests(port, "-m python_tests", "-DOUTDIR={}".format(WORK_DIR)) + +check_results() diff --git a/qpid/cpp/src/tests/plano.py b/qpid/cpp/src/tests/plano.py new file mode 100644 index 0000000000..74a0f6d0b3 --- /dev/null +++ b/qpid/cpp/src/tests/plano.py @@ -0,0 +1,543 @@ +# +# 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. +# + +from __future__ import print_function + +import atexit as _atexit +import codecs as _codecs +import fnmatch as _fnmatch +import getpass as _getpass +import os as _os +import random as _random +import re as _re +import shutil as _shutil +import subprocess as _subprocess +import sys as _sys +import tarfile as _tarfile +import tempfile as _tempfile +import traceback as _traceback + +# See documentation at http://www.ssorj.net/projects/plano.html + +def fail(message, *args): + error(message, *args) + + if isinstance(message, BaseException): + raise message + + raise Exception(message) + +def error(message, *args): + _print_message("Error", message, args, _sys.stderr) + +def warn(message, *args): + _print_message("Warn", message, args, _sys.stderr) + +def notice(message, *args): + _print_message(None, message, args, _sys.stdout) + +def debug(message, *args): + _print_message("Debug", message, args, _sys.stdout) + +def exit(message=None, *args): + if message is None: + _sys.exit() + + _print_message("Error", message, args, _sys.stderr) + + _sys.exit(1) + +def _print_message(category, message, args, file): + message = _format_message(category, message, args) + + print(message, file=file) + file.flush() + +def _format_message(category, message, args): + if isinstance(message, BaseException): + message = str(message) + + if message == "": + message = message.__class__.__name__ + + if category: + message = "{}: {}".format(category, message) + + if args: + message = message.format(*args) + + script = split(_sys.argv[0])[1] + message = "{}: {}".format(script, message) + + return message + +def flush(): + _sys.stdout.flush() + _sys.stderr.flush() + +absolute_path = _os.path.abspath +normalize_path = _os.path.normpath +exists = _os.path.exists +is_absolute = _os.path.isabs +is_dir = _os.path.isdir +is_file = _os.path.isfile +is_link = _os.path.islink + +join = _os.path.join +split = _os.path.split +split_extension = _os.path.splitext + +LINE_SEP = _os.linesep +PATH_SEP = _os.sep +PATH_VAR_SEP = _os.pathsep +ENV = _os.environ +ARGS = _sys.argv + +current_dir = _os.getcwd + +def home_dir(user=""): + return _os.path.expanduser("~{}".format(user)) + +def parent_dir(path): + path = normalize_path(path) + parent, child = split(path) + + return parent + +def file_name(file): + file = normalize_path(file) + dir, name = split(file) + + return name + +def name_stem(file): + name = file_name(file) + + if name.endswith(".tar.gz"): + name = name[:-3] + + stem, ext = split_extension(name) + + return stem + +def name_extension(file): + name = file_name(file) + stem, ext = split_extension(name) + + return ext + +def read(file): + with _codecs.open(file, encoding="utf-8", mode="r") as f: + return f.read() + +def write(file, string): + with _codecs.open(file, encoding="utf-8", mode="w") as f: + f.write(string) + + return file + +def append(file, string): + with _codecs.open(file, encoding="utf-8", mode="a") as f: + f.write(string) + + return file + +def prepend(file, string): + orig = read(file) + prepended = string + orig + + return write(file, prepended) + +def touch(file): + return append(file, "") + +def tail(file, n): + return "".join(tail_lines(file, n)) + +def read_lines(file): + with _codecs.open(file, encoding="utf-8", mode="r") as f: + return f.readlines() + +def write_lines(file, lines): + with _codecs.open(file, encoding="utf-8", mode="r") as f: + f.writelines(lines) + + return file + +def append_lines(file, lines): + with _codecs.open(file, encoding="utf-8", mode="a") as f: + f.writelines(string) + + return file + +def prepend_lines(file, lines): + orig_lines = read_lines(file) + + with _codecs.open(file, encoding="utf-8", mode="w") as f: + f.writelines(lines) + f.writelines(orig_lines) + + return file + +# Derived from http://stackoverflow.com/questions/136168/get-last-n-lines-of-a-file-with-python-similar-to-tail +def tail_lines(file, n): + assert n >= 0 + + with _codecs.open(file, encoding="utf-8", mode="r") as f: + pos = n + 1 + lines = list() + + while len(lines) <= n: + try: + f.seek(-pos, 2) + except IOError: + f.seek(0) + break + finally: + lines = f.readlines() + + pos *= 2 + + return lines[-n:] + +_temp_dir = _tempfile.mkdtemp(prefix="plano.") + +def _get_temp_file(key): + assert not key.startswith("_") + + return join(_temp_dir, "_file_{}".format(key)) + +def _remove_temp_dir(): + _shutil.rmtree(_temp_dir, ignore_errors=True) + +_atexit.register(_remove_temp_dir) + +def read_temp(key): + file = _get_temp_file(key) + return read(file) + +def write_temp(key, string): + file = _get_temp_file(key) + return write(file, string) + +def append_temp(key, string): + file = _get_temp_file(key) + return append(file, string) + +def prepend_temp(key, string): + file = _get_temp_file(key) + return prepend(file, string) + +def make_temp(key): + return append_temp(key, "") + +def open_temp(key, mode="r"): + file = _get_temp_file(key) + return _codecs.open(file, encoding="utf-8", mode=mode) + +# This one is deleted on process exit +def make_temp_dir(): + return _tempfile.mkdtemp(prefix="_dir_", dir=_temp_dir) + +# This one sticks around +def make_user_temp_dir(): + temp_dir = _tempfile.gettempdir() + user = _getpass.getuser() + user_temp_dir = join(temp_dir, user) + + return make_dir(user_temp_dir) + +def copy(from_path, to_path): + notice("Copying '{}' to '{}'", from_path, to_path) + + to_dir = parent_dir(to_path) + + if to_dir: + make_dir(to_dir) + + if is_dir(from_path): + _copytree(from_path, to_path, symlinks=True) + else: + _shutil.copy(from_path, to_path) + + return to_path + +def move(from_path, to_path): + notice("Moving '{}' to '{}'", from_path, to_path) + + _shutil.move(from_path, to_path) + + return to_path + +def rename(path, expr, replacement): + path = normalize_path(path) + parent_dir, name = split(path) + to_name = string_replace(name, expr, replacement) + to_path = join(parent_dir, to_name) + + notice("Renaming '{}' to '{}'", path, to_path) + + move(path, to_path) + + return to_path + +def remove(path): + notice("Removing '{}'", path) + + if not exists(path): + return + + if is_dir(path): + _shutil.rmtree(path, ignore_errors=True) + else: + _os.remove(path) + + return path + +def make_link(source_path, link_file): + if exists(link_file): + assert read_link(link_file) == source_path + return + + _os.symlink(source_path, link_file) + + return link_file + +def read_link(file): + return _os.readlink(file) + +def find(dir, *patterns): + matched_paths = set() + + if not patterns: + patterns = ("*",) + + for root, dirs, files in _os.walk(dir): + for pattern in patterns: + matched_dirs = _fnmatch.filter(dirs, pattern) + matched_files = _fnmatch.filter(files, pattern) + + matched_paths.update([join(root, x) for x in matched_dirs]) + matched_paths.update([join(root, x) for x in matched_files]) + + return sorted(matched_paths) + +def find_any_one(dir, *patterns): + paths = find(dir, *patterns) + + if len(paths) == 0: + return + + return paths[0] + +def find_only_one(dir, *patterns): + paths = find(dir, *patterns) + + if len(paths) == 0: + return + + assert len(paths) == 1 + + return paths[0] + +# find_via_expr? + +def string_replace(string, expr, replacement, count=0): + return _re.sub(expr, replacement, string, count) + +def make_dir(dir): + if not exists(dir): + _os.makedirs(dir) + + return dir + +# Returns the current working directory so you can change it back +def change_dir(dir): + notice("Changing directory to '{}'", dir) + + cwd = current_dir() + _os.chdir(dir) + return cwd + +def list_dir(dir, *patterns): + assert is_dir(dir) + + names = _os.listdir(dir) + + if not patterns: + return sorted(names) + + matched_names = set() + + for pattern in patterns: + matched_names.update(_fnmatch.filter(names, pattern)) + + return sorted(matched_names) + +class working_dir(object): + def __init__(self, dir): + self.dir = dir + self.prev_dir = None + + def __enter__(self): + self.prev_dir = change_dir(self.dir) + return self.dir + + def __exit__(self, type, value, traceback): + change_dir(self.prev_dir) + +def _init_call(command, args, kwargs): + if args: + command = command.format(*args) + + if "shell" not in kwargs: + kwargs["shell"] = True + + notice("Calling '{}'", command) + + return command, kwargs + +def call(command, *args, **kwargs): + command, args = _init_call(command, args, kwargs) + _subprocess.check_call(command, **kwargs) + +def call_for_output(command, *args, **kwargs): + command, args = _init_call(command, args, kwargs) + return _subprocess.check_output(command, **kwargs) + +def make_archive(input_dir, output_dir, archive_stem): + temp_dir = make_temp_dir() + temp_input_dir = join(temp_dir, archive_stem) + + copy(input_dir, temp_input_dir) + make_dir(output_dir) + + output_file = "{}.tar.gz".format(join(output_dir, archive_stem)) + output_file = absolute_path(output_file) + + with working_dir(temp_dir): + call("tar -czf {} {}", output_file, archive_stem) + + return output_file + +def extract_archive(archive_file, output_dir): + assert is_file(archive_file) + + if not exists(output_dir): + make_dir(output_dir) + + archive_file = absolute_path(archive_file) + + with working_dir(output_dir): + call("tar -xf {}", archive_file) + + return output_dir + +def rename_archive(archive_file, new_archive_stem): + assert is_file(archive_file) + + if name_stem(archive_file) == new_archive_stem: + return + + temp_dir = make_temp_dir() + + extract_archive(archive_file, temp_dir) + + input_name = list_dir(temp_dir)[0] + input_dir = join(temp_dir, input_name) + output_file = make_archive(input_dir, temp_dir, new_archive_stem) + output_name = file_name(output_file) + archive_dir = parent_dir(archive_file) + new_archive_file = join(archive_dir, output_name) + + move(output_file, new_archive_file) + remove(archive_file) + + return new_archive_file + +def random_port(min=49152, max=65535): + return _random.randint(min, max) + +# Modified copytree impl that allows for already existing destination +# dirs +def _copytree(src, dst, symlinks=False, ignore=None): + """Recursively copy a directory tree using copy2(). + + If exception(s) occur, an Error is raised with a list of reasons. + + If the optional symlinks flag is true, symbolic links in the + source tree result in symbolic links in the destination tree; if + it is false, the contents of the files pointed to by symbolic + links are copied. + + The optional ignore argument is a callable. If given, it + is called with the `src` parameter, which is the directory + being visited by copytree(), and `names` which is the list of + `src` contents, as returned by os.listdir(): + + callable(src, names) -> ignored_names + + Since copytree() is called recursively, the callable will be + called once for each directory that is copied. It returns a + list of names relative to the `src` directory that should + not be copied. + + XXX Consider this example code rather than the ultimate tool. + + """ + names = _os.listdir(src) + if ignore is not None: + ignored_names = ignore(src, names) + else: + ignored_names = set() + + if not exists(dst): + _os.makedirs(dst) + errors = [] + for name in names: + if name in ignored_names: + continue + srcname = _os.path.join(src, name) + dstname = _os.path.join(dst, name) + try: + if symlinks and _os.path.islink(srcname): + linkto = _os.readlink(srcname) + _os.symlink(linkto, dstname) + elif _os.path.isdir(srcname): + _copytree(srcname, dstname, symlinks, ignore) + else: + # Will raise a SpecialFileError for unsupported file types + _shutil.copy2(srcname, dstname) + # catch the Error from the recursive copytree so that we can + # continue with other files + except _shutil.Error as err: + errors.extend(err.args[0]) + except EnvironmentError as why: + errors.append((srcname, dstname, str(why))) + try: + _shutil.copystat(src, dst) + except OSError as why: + if _shutil.WindowsError is not None and isinstance \ + (why, _shutil.WindowsError): + # Copying file access times may fail on Windows + pass + else: + errors.append((src, dst, str(why))) + if errors: + raise _shutil.Error(errors) diff --git a/qpid/cpp/src/tests/python_tests b/qpid/cpp/src/tests/python_tests deleted file mode 100755 index a36839a43c..0000000000 --- a/qpid/cpp/src/tests/python_tests +++ /dev/null @@ -1,34 +0,0 @@ -#!/usr/bin/env 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 the python tests. -source $QPID_TEST_COMMON -ensure_python_tests -QPID_PORT=${QPID_PORT:-5672} -PYTHON_TESTS=${PYTHON_TESTS:-$*} -FAILING=${FAILING:-/dev/null} - -if [ ! -d $QPID_TESTS ]; then - echo "SKIPPED python tests: test code not found" - exit 0 -fi - -python $QPID_PYTHON_TEST -m qpid_tests.broker_0_10 -m qpid.tests -b localhost:$QPID_PORT -I $FAILING $PYTHON_TESTS || exit 1 diff --git a/qpid/cpp/src/tests/python_tests.ps1 b/qpid/cpp/src/tests/python_tests.ps1 deleted file mode 100644 index f7caa8f75a..0000000000 --- a/qpid/cpp/src/tests/python_tests.ps1 +++ /dev/null @@ -1,42 +0,0 @@ -# -# 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 the python tests; intended to be run by run_test.ps1 which sets up -# QPID_PORT -$srcdir = Split-Path $myInvocation.InvocationName -$PYTHON_DIR = "$srcdir\..\..\..\python" -if (!(Test-Path $PYTHON_DIR -pathType Container)) { - "Skipping python tests as python libs not found" - exit 1 -} - -. .\test_env.ps1 - -if (Test-Path env:FAILING) { - $fails = "-I $env:FAILING" -} -if (Test-Path env:PYTHON_TESTS) { - $tests = "$env:PYTHON_TESTS" -} -else { - $tests = "$args" -} - -python $PYTHON_DIR/qpid-python-test -m qpid_tests.broker_0_10 -m qpid.tests -b localhost:$env:QPID_PORT $fails $tests -exit $LASTEXITCODE diff --git a/qpid/cpp/src/tests/qpid-build-rinstall b/qpid/cpp/src/tests/qpid-build-rinstall deleted file mode 100755 index beff7dffba..0000000000 --- a/qpid/cpp/src/tests/qpid-build-rinstall +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under onemake -# 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 "make install"" locally then copy the install tree to each of $HOSTS -# Must be run in a configured qpid build directory. -# -test -f config.status || { echo "Not in a configured build directory."; usage; } -. src/tests/install_env.sh -set -ex -make && make -j1 install -rsynchosts $QPID_INSTALL_PREFIX diff --git a/qpid/cpp/src/tests/quick_topictest.ps1 b/qpid/cpp/src/tests/quick_topictest.ps1 deleted file mode 100644 index 8f5b2caff7..0000000000 --- a/qpid/cpp/src/tests/quick_topictest.ps1 +++ /dev/null @@ -1,30 +0,0 @@ -# -# 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. -# - -# Quick and quiet topic test for make check. -[string]$me = $myInvocation.InvocationName -$srcdir = Split-Path $me -Invoke-Expression "$srcdir\topictest.ps1 -subscribers 2 -messages 2 -batches 1" > topictest.log 2>&1 -if (!$?) { - "$me FAILED:" - cat topictest.log - exit 1 -} -Remove-Item topictest.log -exit 0 diff --git a/qpid/cpp/src/tests/quick_txtest b/qpid/cpp/src/tests/quick_txtest deleted file mode 100755 index 77e8556f1d..0000000000 --- a/qpid/cpp/src/tests/quick_txtest +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env 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. -# - -exec `dirname $0`/run_test ./qpid-txtest --queues 4 --tx-count 10 --quiet diff --git a/qpid/cpp/src/tests/rsynchosts b/qpid/cpp/src/tests/rsynchosts deleted file mode 100755 index 10e1081f76..0000000000 --- a/qpid/cpp/src/tests/rsynchosts +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash -# -# Licensed to the Apache Software Foundation (ASF) under onemake -# 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. -# - -absdir() { echo `cd $1 && pwd`; } - -abspath() { - if test -d "$1"; then absdir "$1"; - else echo $(absdir $(dirname "$1"))/$(basename "$1") - fi -} - -usage() { - echo "Usage: $(basename $0) [-l user] file [file...] -Synchronize the contents of each file or directory to the same absolute path on -each host in \$HOSTS. -" - exit 1 -} - -while getopts "l:" opt; do - case $opt in - l) RSYNC_USER="$OPTARG@" ;; - *) usage ;; - esac -done -shift `expr $OPTIND - 1` - -test "$*" || usage - -for f in $*; do FILES="$FILES $(abspath $f)" || exit 1; done - -OK_FILE=`mktemp` # Will be deleted if anything goes wrong. -trap "rm -f $OK_FILE" EXIT - -for h in $HOSTS; do - rsync -vaRO --delete $FILES $RSYNC_USER$h:/ || { echo "rsync to $h failed"; rm -f $OK_FILE; } & -done -wait -test -f $OK_FILE - diff --git a/qpid/cpp/src/tests/run.py b/qpid/cpp/src/tests/run.py new file mode 100755 index 0000000000..9b74ba4d30 --- /dev/null +++ b/qpid/cpp/src/tests/run.py @@ -0,0 +1,6 @@ +#!/usr/bin/env python + +from common import * + +call(" ".join(ARGS[1:])) + diff --git a/qpid/cpp/src/tests/run_acl_tests b/qpid/cpp/src/tests/run_acl_tests index 4bb9e7aa5d..831fc7fbc7 100755 --- a/qpid/cpp/src/tests/run_acl_tests +++ b/qpid/cpp/src/tests/run_acl_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,148 +19,52 @@ # under the License. # -# Run the acl tests. $srcdir is set by the Makefile. -source ./test_env.sh -DATA_DIR=`pwd`/data_dir -DATA_DIRI=`pwd`/data_diri -DATA_DIRU=`pwd`/data_diru -DATA_DIRQ=`pwd`/data_dirq +from common import * -trap stop_brokers INT TERM QUIT +policy_file = join(BUILD_DIR, "src", "tests", "policy.acl") +broker_args = "--acl-file {}".format(policy_file) -start_brokers() { - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIR --acl-file policy.acl --auth no --log-enable trace+:acl --log-to-file local.log > qpidd.port - LOCAL_PORT=`cat qpidd.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIRI --acl-file policy.acl --auth no --connection-limit-per-ip 2 --log-to-file locali.log > qpiddi.port - LOCAL_PORTI=`cat qpiddi.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIRU --acl-file policy.acl --auth no --connection-limit-per-user 2 --log-to-file localu.log > qpiddu.port - LOCAL_PORTU=`cat qpiddu.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIRQ --acl-file policy.acl --auth no --max-queues-per-user 2 --log-to-file localq.log > qpiddq.port - LOCAL_PORTQ=`cat qpiddq.port` -} +broker_port = start_broker("broker", broker_args, "--log-enable debug+:acl") +broker_i_port = start_broker("broker_i", broker_args, "--connection-limit-per-ip 2") +broker_u_port = start_broker("broker_u", broker_args, "--connection-limit-per-user 2") +broker_q_port = start_broker("broker_q", broker_args, "--max-queues-per-user 2") -start_noacl_noauth_brokers() { - ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIR --auth no --log-to-file local.log > qpidd.port - LOCAL_PORT=`cat qpidd.port` - ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIRI --auth no --log-to-file locali.log > qpiddi.port - LOCAL_PORTI=`cat qpiddi.port` - ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIRU --auth no --log-to-file localu.log > qpiddu.port - LOCAL_PORTU=`cat qpiddu.port` - ../qpidd --daemon --port 0 --no-module-dir --data-dir $DATA_DIRQ --auth no --log-to-file localq.log > qpiddq.port - LOCAL_PORTQ=`cat qpiddq.port` -} +run_broker_tests(broker_port, "-m acl", + "-Dport-i={}".format(broker_i_port), + "-Dport-u={}".format(broker_u_port), + "-Dport-q={}".format(broker_q_port), + "-Dpolicy-file={}".format(policy_file)) -start_noacl_auth_brokers() { - sasl_config_file=$builddir/sasl_config - if [ ! -f $sasl_config_file ] ; then - echo Creating sasl database - . $srcdir/sasl_test_setup.sh - fi - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIR --auth yes --sasl-config=$sasl_config_file --log-to-file local.log > qpidd.port - LOCAL_PORT=`cat qpidd.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIRI --auth yes --sasl-config=$sasl_config_file --log-to-file locali.log > qpiddi.port - LOCAL_PORTI=`cat qpiddi.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIRU --auth yes --sasl-config=$sasl_config_file --log-to-file localu.log > qpiddu.port - LOCAL_PORTU=`cat qpiddu.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --data-dir $DATA_DIRQ --auth yes --sasl-config=$sasl_config_file --log-to-file localq.log > qpiddq.port - LOCAL_PORTQ=`cat qpiddq.port` -} +# Test interaction of authentication and link creation -stop_brokers() { - $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORT - $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORTI - $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORTU - $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORTQ -} +broker_1_port = start_broker("broker_1") +broker_2_port = start_broker("broker_2") -delete_directories() { - rm -rf $DATA_DIR - rm -rf $DATA_DIRI - rm -rf $DATA_DIRU - rm -rf $DATA_DIRQ -} +configure_broker(broker_1_port, "add exchange topic fed.topic") +configure_broker(broker_2_port, "add exchange topic fed.topic") -delete_logfiles() { - rm -rf local.log - rm -rf locali.log - rm -rf localu.log - rm -rf localq.log -} +connect_brokers("dynamic add", + "localhost:{}".format(broker_1_port), + "localhost:{}".format(broker_2_port), + "fed.topic") -create_directories() { - mkdir -p $DATA_DIR - mkdir -p $DATA_DIRI - mkdir -p $DATA_DIRU - mkdir -p $DATA_DIRQ -} +sasl_config_dir = join(BUILD_DIR, "src", "tests", "sasl_config") +broker_args = "--auth yes --sasl-config {}".format(sasl_config_dir) -populate_directories() { - cp $srcdir/policy.acl $DATA_DIR - cp $srcdir/policy.acl $DATA_DIRI - cp $srcdir/policy.acl $DATA_DIRU - cp $srcdir/policy.acl $DATA_DIRQ -} +broker_3_port = start_broker("broker_3", broker_args, auth_disabled=False) +broker_4_port = start_broker("broker_4", broker_args, auth_disabled=False) -test_loading_acl_from_absolute_path(){ - POLICY_FILE=$srcdir/policy.acl - rm -f temp.log - PORT=`../qpidd --daemon --port 0 --interface 127.0.0.1 --no-module-dir --no-data-dir --auth no --acl-file $POLICY_FILE -t --log-to-file temp.log 2>/dev/null` - ACL_FILE=`grep "notice ACL: Read file" temp.log | sed 's/^.*Read file //'` - $QPIDD_EXEC --no-module-dir -q --port $PORT - if test "$ACL_FILE" != "\"$POLICY_FILE\""; then - echo "unable to load policy file from an absolute path"; - return 1; - fi - rm temp.log -} +configure_broker(broker_3_port, "add exchange topic fed.topic") +configure_broker(broker_4_port, "add exchange topic fed.topic") -test_noacl_deny_create_link() { - delete_logfiles - start_noacl_noauth_brokers - echo "Running no-acl, no-auth tests using brokers on ports $LOCAL_PORT, $LOCAL_PORTI, $LOCAL_PORTU, and $LOCAL_PORTQ" - $QPID_CONFIG_EXEC -a localhost:$LOCAL_PORT add exchange topic fed.topic - $QPID_CONFIG_EXEC -a localhost:$LOCAL_PORTI add exchange topic fed.topic - $QPID_ROUTE_EXEC dynamic add localhost:$LOCAL_PORT localhost:$LOCAL_PORTI fed.topic 2>/dev/null - sleep 2 - stop_brokers - grep -q "must specify ACL create link rules" local.log - if [ $? -eq 0 ] - then - echo "Test fail - Broker with auth=no should have allowed link creation"; - return 1; - fi +try: + connect_brokers("dynamic add", + "localhost:{}".format(broker_3_port), + "localhost:{}".format(broker_4_port), + "fed.topic") - delete_logfiles - start_noacl_auth_brokers - echo "Running no-acl, auth tests using brokers on ports $LOCAL_PORT, $LOCAL_PORTI, $LOCAL_PORTU, and $LOCAL_PORTQ" - $QPID_CONFIG_EXEC -a localhost:$LOCAL_PORT add exchange topic fed.topic - $QPID_CONFIG_EXEC -a localhost:$LOCAL_PORTI add exchange topic fed.topic - $QPID_ROUTE_EXEC dynamic add localhost:$LOCAL_PORT localhost:$LOCAL_PORTI fed.topic 2>/dev/null - sleep 2 - stop_brokers - grep -q "must specify ACL create link rules" local.log - if [ $? -ne 0 ] - then - echo "Test fail - Broker with no ACL and --auth=yes file did not deny link creation"; - return 1; - fi -} - -if test -d ${PYTHON_DIR} ; then - # run acl.py test file - delete_directories - create_directories - populate_directories - delete_logfiles - start_brokers - echo "Running acl tests using brokers on ports $LOCAL_PORT, $LOCAL_PORTI, $LOCAL_PORTU, and $LOCAL_PORTQ" - $QPID_PYTHON_TEST -b localhost:$LOCAL_PORT -m acl -Dport-i=$LOCAL_PORTI -Dport-u=$LOCAL_PORTU -Dport-q=$LOCAL_PORTQ || EXITCODE=1 - stop_brokers || EXITCODE=1 - # - test_loading_acl_from_absolute_path || EXITCODE=1 - # - test_noacl_deny_create_link || EXITCODE=1 - delete_directories - exit $EXITCODE -fi + fail("Broker with no ACLs but auth enabled did not deny link creation") +except: + pass +check_results() diff --git a/qpid/cpp/src/tests/run_acl_tests.ps1 b/qpid/cpp/src/tests/run_acl_tests.ps1 deleted file mode 100644 index 8279d87e54..0000000000 --- a/qpid/cpp/src/tests/run_acl_tests.ps1 +++ /dev/null @@ -1,99 +0,0 @@ -# -# 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 the acl tests. - -$srcdir = Split-Path $myInvocation.InvocationName -. .\test_env.ps1 -if (!(Test-Path $PYTHON_DIR -pathType Container)) { - "Skipping acl tests as python libs not found" - exit 1 -} - -$Global:BROKER_EXE = "" - -Function start_broker($acl_options) -{ - # Test runs from the tests directory but the broker executable is one level - # up, and most likely in a subdirectory from there based on what build type. - # Look around for it before trying to start it. - . $srcdir\find_prog.ps1 ..\qpidd.exe - if (!(Test-Path $prog)) { - "Cannot locate qpidd.exe" - exit 1 - } - $Global:BROKER_EXE = $prog - if (Test-Path qpidd.port) { - Remove-Item qpidd.port - } - $cmdline = "$prog --auth=no --no-module-dir --port=0 --log-to-file qpidd.log $acl_options | foreach { set-content qpidd.port `$_ }" - $cmdblock = $executioncontext.invokecommand.NewScriptBlock($cmdline) - . $srcdir\background.ps1 $cmdblock - # Wait for the broker to start - $wait_time = 0 - while (!(Test-Path qpidd.port) -and ($wait_time -lt 30)) { - Start-Sleep 2 - $wait_time += 2 - } - if (!(Test-Path qpidd.port)) { - "Timeout waiting for broker to start" - exit 1 - } - set-item -path env:BROKER_PORT -value (get-content -path qpidd.port -totalcount 1) -} - -Function stop_broker -{ - "Stopping $Global:BROKER_EXE" - Invoke-Expression "$Global:BROKER_EXE --no-module-dir -q --port $env:BROKER_PORT" | Write-Output - Remove-Item qpidd.port -} - -$DATA_DIR = [IO.Directory]::GetCurrentDirectory() + "\data_dir" -Remove-Item $DATA_DIR -recurse -New-Item $DATA_DIR -type directory -Copy-Item $srcdir\policy.acl $DATA_DIR -start_broker("--data-dir $DATA_DIR --acl-file policy.acl") -"Running acl tests using broker on port $env:BROKER_PORT" -Invoke-Expression "python $PYTHON_DIR/qpid-python-test -m acl -b localhost:$env:BROKER_PORT" | Out-Default -$RETCODE=$LASTEXITCODE -stop_broker - -# Now try reading the acl file from an absolute path. -Remove-Item qpidd.log -$policy_full_path = "$srcdir\policy.acl" -start_broker("--no-data-dir --acl-file $policy_full_path") -#test_loading_acl_from_absolute_path(){ -# POLICY_FILE=$srcdir/policy.acl -# rm -f temp.log -# PORT=`../qpidd --daemon --port 0 --no-module-dir --no-data-dir --auth no --load-module $ACL_LIB --acl-file $POLICY_FILE -t --log-to-file temp.log 2>/dev/null` -# ACL_FILE=`grep "notice Read ACL file" temp.log | sed 's/^.*Read ACL file //'` -# $QPIDD_EXEC --no-module-dir -q --port $PORT -# if test "$ACL_FILE" != "\"$POLICY_FILE\""; then -# echo "unable to load policy file from an absolute path"; -# return 1; -# fi -# rm temp.log -#} -# -# test_loading_acl_from_absolute_path || EXITCODE=1 -# rm -rf $DATA_DIR -# exit $EXITCODE -stop_broker -exit $RETCODE diff --git a/qpid/cpp/src/tests/run_cli_tests b/qpid/cpp/src/tests/run_cli_tests index 1db99001a4..54517e0ef0 100755 --- a/qpid/cpp/src/tests/run_cli_tests +++ b/qpid/cpp/src/tests/run_cli_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,63 +19,45 @@ # under the License. # -# Run the cli-utility tests. +# Run the cli-utility tests -source ./test_env.sh -CLI_DIR=$PYTHON_COMMANDS +from common import * -trap stop_brokers INT TERM QUIT +cli_dir = join(SOURCE_DIR, "management", "python", "bin") -# helper function to create test.xquery in the current directory, so -# that the python test program can find it. yes, it leaves a turd. -create_test_xquery() { - cat <<EOF > ./test.xquery - let \$w := ./weather - return \$w/station = 'Raleigh-Durham International Airport (KRDU)' - and \$w/temperature_f > 50 - and \$w/temperature_f - \$w/dewpoint > 5 - and \$w/wind_speed_mph > 7 - and \$w/wind_speed_mph < 20 -EOF -} +xquery = """ +let $w := ./weather +return $w/station = 'Raleigh-Durham International Airport (KRDU)' + and $w/temperature_f > 50 + and $w/temperature_f - $w/dewpoint > 5 + and $w/wind_speed_mph > 7 + and $w/wind_speed_mph < 20 +""" +xquery_file = write(join(WORK_DIR, "xquery_file"), xquery) -start_brokers() { - # if the xml lib is present, use it. if not, disable any tests which - # look like they're xml related. - # if we start supporting xml on windows, it will need something similar - # here - if [ -f ../xml.so ] ; then - xargs="--load-module ../xml.so" - if [ ! -f test.xquery ] ; then - create_test_xquery - fi - targs="" - else - echo "Ignoring XML tests" - xargs="" - targs="--ignore=*xml*" - fi +# If the xml lib is present, use it. if not, disable any tests which +# look like they're xml related. +# +# If we start supporting xml on windows, it will need something +# similar here. + +if XML_LIB is not None: + broker_args = "--load-module {}".format(XML_LIB) + test_args = "" +else: + notice("Ignoring XML tests") - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-data-dir --no-module-dir --mgmt-publish no --auth no $xargs > qpidd.port - LOCAL_PORT=`cat qpidd.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-data-dir --no-module-dir --mgmt-publish no --auth no $xargs > qpidd.port - REMOTE_PORT=`cat qpidd.port` -} + broker_args = "" + test_args = "--ignore=*xml*" -stop_brokers() { - $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORT - $QPIDD_EXEC --no-module-dir -q --port $REMOTE_PORT -} +local_port = start_broker("local", broker_args) +remote_port = start_broker("remote", broker_args) -if test -d ${PYTHON_DIR} ; then - start_brokers - echo "Running CLI tests using brokers on ports $LOCAL_PORT $REMOTE_PORT" - PYTHON_TESTS=${PYTHON_TESTS:-$*} - $QPID_PYTHON_TEST -m cli_tests -b localhost:$LOCAL_PORT -Dremote-port=$REMOTE_PORT -Dcli-dir=$CLI_DIR $targs $PYTHON_TESTS $@ - RETCODE=$? - stop_brokers - if test x$RETCODE != x0; then - echo "FAIL CLI tests"; exit 1; - fi -fi +run_broker_tests(local_port, + "-m cli_tests", + "-Dremote-port={}".format(remote_port), + "-Dcli-dir={}".format(cli_dir), + "-Dxquery-file={}".format(xquery_file), + test_args) +check_results() diff --git a/qpid/cpp/src/tests/multiq_perftest b/qpid/cpp/src/tests/run_client_tests index 9673dd2e6d..76c46ef949 100755 --- a/qpid/cpp/src/tests/multiq_perftest +++ b/qpid/cpp/src/tests/run_client_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,4 +19,12 @@ # under the License. # -exec `dirname $0`/run_perftest 10000 --mode shared --qt 16 +from common import * + +port = start_broker("broker") + +ENV["QPID_PORT"] = str(port) + +call_with_valgrind("qpid-client-test --verbose") + +check_results() diff --git a/qpid/cpp/src/tests/run_federation_sys_tests b/qpid/cpp/src/tests/run_federation_sys_tests deleted file mode 100755 index f5f1ae44d3..0000000000 --- a/qpid/cpp/src/tests/run_federation_sys_tests +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env 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 the federation system tests. - -source ./test_env.sh - -MODULENAME=federation_sys - -# Test for long test -if [[ "$1" == "LONG_TEST" ]]; then - USE_LONG_TEST=1 - shift # get rid of this param so it is not treated as a test name -fi - -trap stop_brokers INT TERM QUIT - -SKIPTESTS="-i federation_sys.E_* -i federation_sys.F_* -i federation_sys.G_* -i federation_sys.H_*" -if [ -z ${USE_LONG_TEST} ]; then - SKIPTESTS="-i federation_sys.A_Long* -i federation_sys.B_Long* ${SKIPTESTS}" -fi -echo "WARNING: Tests using persistence will be ignored." -SKIPTESTS="${SKIPTESTS} -i federation_sys.C_* -i federation_sys.D_*" - -start_brokers() { - start_broker() { - ${QPIDD_EXEC} --daemon --port 0 --interface 127.0.0.1 --auth no --no-data-dir $1 > qpidd.port - PORT=`cat qpidd.port` - eval "$2=${PORT}" - } - start_broker "" LOCAL_PORT - start_broker "" REMOTE_PORT - rm qpidd.port -} - -stop_brokers() { - ${QPIDD_EXEC} -q --port ${LOCAL_PORT} - ${QPIDD_EXEC} -q --port ${REMOTE_PORT} -} - -if test -d ${PYTHON_DIR} ; then - start_brokers - echo "Running federation tests using brokers on local port ${LOCAL_PORT}, remote port ${REMOTE_PORT} (NOTE: clustering is DISABLED)" - if [ -z ${USE_LONG_TEST} ]; then - echo "NOTE: To run a full set of federation system tests, use \"make check-long\". To test with persistence, run the store version of this script." - fi - ${QPID_PYTHON_TEST} -m ${MODULENAME} ${SKIPTESTS} -b localhost:${REMOTE_PORT} -Dlocal-port=${LOCAL_PORT} -Dremote-port=${REMOTE_PORT} $@ - RETCODE=$? - stop_brokers - if test x${RETCODE} != x0; then - echo "FAIL federation tests"; exit 1; - fi -fi diff --git a/qpid/cpp/src/tests/run_federation_tests b/qpid/cpp/src/tests/run_federation_tests index 8cadd3702f..381195af4e 100755 --- a/qpid/cpp/src/tests/run_federation_tests +++ b/qpid/cpp/src/tests/run_federation_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,43 +19,42 @@ # under the License. # -# Run the federation tests. - -source ./test_env.sh -#set -x -trap stop_brokers INT TERM QUIT - -if [ -f ../xml.so ] ; then - MODULES="--load-module xml" # Load the XML exchange and run XML exchange federation tests - SKIPTESTS= -else - MODULES="--no-module-dir" - SKIPTESTS='-i *_xml' # note: single quotes prevent expansion of * -fi - -QPIDD_CMD="../qpidd --daemon --port 0 --interface 127.0.0.1 --no-data-dir $MODULES --auth no --log-enable=info+ --log-enable=debug+:Bridge --log-to-file" -start_brokers() { - rm -f fed_local.log fed_remote.log fed_b1.log fed_b2.log - LOCAL_PORT=$($QPIDD_CMD fed_local.log --federation-tag LOCAL) - REMOTE_PORT=$($QPIDD_CMD fed_remote.log --federation-tag REMOTE) - REMOTE_B1=$($QPIDD_CMD fed_b1.log --federation-tag B1) - REMOTE_B2=$($QPIDD_CMD fed_b2.log --federation-tag B2) -} - -stop_brokers() { - $QPIDD_EXEC $MODULES -q --port $LOCAL_PORT - $QPIDD_EXEC $MODULES -q --port $REMOTE_PORT - $QPIDD_EXEC $MODULES -q --port $REMOTE_B1 - $QPIDD_EXEC $MODULES -q --port $REMOTE_B2 -} - -if test -d ${PYTHON_DIR} ; then - start_brokers - echo "Running federation tests using brokers on ports $LOCAL_PORT $REMOTE_PORT $REMOTE_B1 $REMOTE_B2" - $QPID_PYTHON_TEST -m federation ${SKIPTESTS} -b localhost:$LOCAL_PORT -Dremote-port=$REMOTE_PORT -Dextra-brokers="$REMOTE_B1 $REMOTE_B2" $@ - RETCODE=$? - stop_brokers - if test x$RETCODE != x0; then - echo "FAIL federation tests"; exit 1; - fi -fi +from common import * + +common_args = "--log-enable=debug+:Bridge" +module_args = None +test_args = "-i *_xml" + +sys_test_args = [ + "-i federation_sys.A_Long*", + "-i federation_sys.B_Long*", + "-i federation_sys.C_*", + "-i federation_sys.D_*", + "-i federation_sys.E_*", + "-i federation_sys.F_*", + "-i federation_sys.G_*", + "-i federation_sys.H_*", +] + +if XML_LIB is not None: + module_args = "--load-module {}".format(XML_LIB) + test_args = None + +local_port = start_broker("local", common_args, module_args, "--federation-tag LOCAL") +remote_port = start_broker("remote", common_args, module_args, "--federation-tag REMOTE") +remote_b1 = start_broker("remote_b1", common_args, module_args, "--federation-tag REMOTE_B1") +remote_b2 = start_broker("remote_b2", common_args, module_args, "--federation-tag REMOTE_B2") + +run_broker_tests(local_port, "-m federation", + "-Dremote-port={}".format(remote_port), + "-Dextra-brokers='{} {}'".format(remote_b1, remote_b2), + test_args) + +run_broker_tests(local_port, "-m headers_federation", "-Dremote-port={}".format(remote_port)) + +run_broker_tests(remote_port, "-m federation_sys", + "-Dlocal-port={}".format(local_port), + "-Dremote-port={}".format(remote_port), + *sys_test_args) + +check_results() diff --git a/qpid/cpp/src/tests/run_federation_tests.ps1 b/qpid/cpp/src/tests/run_federation_tests.ps1 deleted file mode 100644 index 803b3eef6f..0000000000 --- a/qpid/cpp/src/tests/run_federation_tests.ps1 +++ /dev/null @@ -1,83 +0,0 @@ -# -# 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 the federation tests. - -$srcdir = Split-Path $myInvocation.InvocationName -$PYTHON_DIR = "$srcdir\..\..\..\python" -if (!(Test-Path $PYTHON_DIR -pathType Container)) { - "Skipping federation tests as python libs not found" - exit 1 -} - -. .\test_env.ps1 - -# Test runs from the tests directory but the broker executable is one level -# up, and most likely in a subdirectory from there based on what build type. -# Look around for it before trying to start it. -$subs = "Debug","Release","MinSizeRel","RelWithDebInfo" -foreach ($sub in $subs) { - $prog = "..\$sub\qpidd.exe" - if (Test-Path $prog) { - break - } -} -if (!(Test-Path $prog)) { - "Cannot locate qpidd.exe" - exit 1 -} -$cmdline = "$prog --auth=no --no-module-dir --no-data-dir --port=0 --ssl-port=0 --log-to-file qpidd.log $args | foreach { set-content qpidd.port `$_ }" -$cmdblock = $executioncontext.invokecommand.NewScriptBlock($cmdline) - -function start_brokers { - # Start 2 brokers, saving the port numbers in LOCAL_PORT, REMOTE_PORT. - . $srcdir\background.ps1 $cmdblock - while (!(Test-Path qpidd.port)) { - Start-Sleep 2 - } - set-item -path env:LOCAL_PORT -value (get-content -path qpidd.port -totalcount 1) - Remove-Item qpidd.port - . $srcdir\background.ps1 $cmdblock - while (!(Test-Path qpidd.port)) { - Start-Sleep 2 - } - set-item -path env:REMOTE_PORT -value (get-content -path qpidd.port -totalcount 1) -} - -function stop_brokers { - Invoke-Expression "$prog -q --port $env:LOCAL_PORT" | Out-Default - Invoke-Expression "$prog -q --port $env:REMOTE_PORT" | Out-Default -} - -trap { - &stop_brokers - break -} - -&start_brokers -"Running federation tests using brokers on ports $env:LOCAL_PORT $env:REMOTE_PORT" -$env:PYTHONPATH="$srcdir;$PYTHON_DIR;$PYTHON_TEST_DIR;$env:PYTHONPATH;$QMF_LIB" -$tests = "*" -Invoke-Expression "python $PYTHON_DIR/qpid-python-test -m federation -b localhost:$env:LOCAL_PORT -Dremote-port=$env:REMOTE_PORT $tests" | Out-Default -$RETCODE=$LASTEXITCODE -&stop_brokers -if ($RETCODE -ne 0) { - "FAIL federation tests" - exit 1 -} diff --git a/qpid/cpp/src/tests/run_queue_flow_limit_tests b/qpid/cpp/src/tests/run_flow_control_tests index 55b3e5d4c5..5158fb2c47 100755 --- a/qpid/cpp/src/tests/run_queue_flow_limit_tests +++ b/qpid/cpp/src/tests/run_flow_control_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,9 +19,10 @@ # under the License. # -source $QPID_TEST_COMMON +from common import * -ensure_python_tests +port = start_broker("broker", "--default-flow-stop-threshold=80 --default-flow-resume-threshold=70") -# Run tests against Queue producer flow control. -$QPID_PYTHON_TEST -m queue_flow_limit_tests $SKIPTESTS -b localhost:$QPID_PORT +run_broker_tests(port, "-m queue_flow_limit_tests") + +check_results() diff --git a/qpid/cpp/src/tests/run_ha_tests b/qpid/cpp/src/tests/run_ha_tests index bb60bea076..159f258c34 100755 --- a/qpid/cpp/src/tests/run_ha_tests +++ b/qpid/cpp/src/tests/run_ha_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -8,9 +8,9 @@ # 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 @@ -19,11 +19,19 @@ # under the License. # +from common import * + +# ENV["QPID_USE_SWIG_CLIENT"] = "1" # XXX is this necessary? + +# XXX These tests hang, and I can't figure out why +# -i *tx_block_threads -# Make sure the python tools are available. They will be if we are building in -# a checkoug, they may not be in a distribution. -test -d $PYTHON_COMMANDS -a -x $PYTHON_COMMANDS/qpid-ha -a -x $PYTHON_COMMANDS/qpid-config || { echo "Skipping HA tests, qpid-ha or qpid-config not available."; exit 0; } +# ENV["QPID_NO_MODULE_DIR"] = "1" # Don't accidentally load installed modules +# ENV["QPID_DATA_DIR"] = "" +# ENV["QPID_CONFIG"] = join(BUILD_DIR, "src", "tests", "qpidd-empty.conf") +# ENV["QPID_PORT"] = "" +# ENV["QPID_LOG_TO_FILE"] = join(BUILD_DIR, "src", "tests", "gah.log") -srcdir=`dirname $0` -$srcdir/ha_tests.py +call("qpid-python-test -m ha_tests -DOUTDIR={}", WORK_DIR) +check_results() diff --git a/qpid/cpp/src/tests/run_header_test.ps1 b/qpid/cpp/src/tests/run_header_test.ps1 deleted file mode 100644 index 344fac9cf9..0000000000 --- a/qpid/cpp/src/tests/run_header_test.ps1 +++ /dev/null @@ -1,48 +0,0 @@ -# -# 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. -# - -# Simple test of encode/decode of a double in application headers -# TODO: this should be expanded to cover a wider set of types and go -# in both directions - -$srcdir = Split-Path $myInvocation.InvocationName -$PYTHON_DIR = "$srcdir\..\..\..\python" -if (!(Test-Path $PYTHON_DIR -pathType Container)) { - "Skipping header test as python libs not found" - exit 0 -} - -. .\test_env.ps1 - -if (Test-Path qpidd.port) { - set-item -path env:QPID_PORT -value (get-content -path qpidd.port -totalcount 1) -} - -# Test runs from the tests directory but the test executables are in a -# subdirectory based on the build type. Look around for it before trying -# to start it. -. $srcdir\find_prog.ps1 .\header_test.exe -if (!(Test-Path $prog)) { - "Cannot locate header_test.exe" - exit 1 -} - -Invoke-Expression "$prog -p $env:QPID_PORT" | Write-Output -Invoke-Expression "python $srcdir/header_test.py localhost $env:QPID_PORT" | Write-Output -exit $LASTEXITCODE diff --git a/qpid/cpp/src/tests/run_headers_federation_tests b/qpid/cpp/src/tests/run_headers_federation_tests deleted file mode 100644 index afbbf144ee..0000000000 --- a/qpid/cpp/src/tests/run_headers_federation_tests +++ /dev/null @@ -1,49 +0,0 @@ -#!/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. -# - -# Run the federation tests for the Headers Exchange. - -source ./test_env.sh - -trap stop_brokers INT TERM QUIT - -start_brokers() { - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-data-dir --no-module-dir --auth no > qpidd.port - LOCAL_PORT=`cat qpidd.port` - ../qpidd --daemon --port 0 --interface 127.0.0.1 --no-data-dir --no-module-dir --auth no > qpidd.port - REMOTE_PORT=`cat qpidd.port` -} - -stop_brokers() { - $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORT - $QPIDD_EXEC --no-module-dir -q --port $REMOTE_PORT -} - -if test -d ${PYTHON_DIR} ; then - start_brokers - echo "Running HeadersExchange federation tests using brokers on ports $LOCAL_PORT $REMOTE_PORT" - $QPID_PYTHON_TEST -m headers_federation -b localhost:$LOCAL_PORT -Dremote-port=$REMOTE_PORT $@ - RETCODE=$? - stop_brokers - if test x$RETCODE != x0; then - echo "FAIL federation tests"; exit 1; - fi -fi diff --git a/qpid/cpp/src/tests/run_idle_timeout_tests b/qpid/cpp/src/tests/run_idle_timeout_tests new file mode 100755 index 0000000000..79de1c9f22 --- /dev/null +++ b/qpid/cpp/src/tests/run_idle_timeout_tests @@ -0,0 +1,26 @@ +#!/usr/bin/env python + +# +# 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. +# + +from common import * + +call("qpid-python-test -m idle_timeout_tests -DOUTDIR={}", WORK_DIR) + +check_results() diff --git a/qpid/cpp/src/tests/run_interlink_tests b/qpid/cpp/src/tests/run_interlink_tests index 71482fa7fd..2505d1e1f8 100755 --- a/qpid/cpp/src/tests/run_interlink_tests +++ b/qpid/cpp/src/tests/run_interlink_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,8 +19,8 @@ # under the License. # -test -e "$AMQP_LIB" || { echo "Skipping AMQP 1.0 based tests; AMQP 1.0 support not available."; exit 0; } +from common import * -srcdir=`dirname $0` -$srcdir/interlink_tests.py +call("qpid-python-test -m interlink_tests -DOUTDIR={}", WORK_DIR) +check_results() diff --git a/qpid/cpp/src/tests/run_interop_tests b/qpid/cpp/src/tests/run_interop_tests new file mode 100755 index 0000000000..8cc918bba8 --- /dev/null +++ b/qpid/cpp/src/tests/run_interop_tests @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +# +# 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. +# + +from common import * + +port = start_broker("broker", "--load-module {}".format(AMQP_LIB)) + +ENV["QPID_INTEROP_URL"] = "localhost:{}".format(port) + +call("qpid-python-test -m interop_tests -DOUTDIR={}", WORK_DIR) + +check_results() diff --git a/qpid/cpp/src/tests/ipv6_test b/qpid/cpp/src/tests/run_ipv6_tests index 4ac5f95fba..55212257a9 100755 --- a/qpid/cpp/src/tests/ipv6_test +++ b/qpid/cpp/src/tests/run_ipv6_tests @@ -19,23 +19,22 @@ # under the License. # +source env.sh + # Check whether we have any globally configured IPv6 addresses # - if not then we can't run the tests because ipv6 lookups won't # work within the qpid code. This is a deliberate feature to avoid # getting addresses that can't be routed by the machine. if ip -f inet6 -o addr | cut -f 9 -s -d' ' | grep global > /dev/null ; then - echo "IPv6 addresses configured continuing" + echo "IPv6 addresses configured - continuing" else echo "No global IPv6 addresses configured - skipping test" exit 0 fi -# Run a simple test over IPv6 -source $QPID_TEST_COMMON - -CONFIG=$(dirname $0)/config.null +CONFIG=$(dirname $0)/qpidd-empty.conf TEST_HOSTNAME=::1 COUNT=10 @@ -43,7 +42,7 @@ 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 +# Don't need --no-module-dir or --no-data-dir as they are set as env vars in env.sh COMMON_OPTS="--interface [::1] --daemon --auth no --config $CONFIG" # Record all broker ports started @@ -57,7 +56,7 @@ declare -a PORTS start_brokers() { local -a ports for (( i=0; $i<$1; i++)) do - ports[$i]=$($QPIDD_EXEC --port 0 $COMMON_OPTS $2) + ports[$i]=$(qpidd --port 0 $COMMON_OPTS $2) done PORTS=( ${PORTS[@]} ${ports[@]} ) } @@ -65,7 +64,7 @@ start_brokers() { stop_brokers() { for port in "${PORTS[@]}"; do - $QPIDD_EXEC -qp $port + qpidd -qp $port done PORTS=() } @@ -79,13 +78,13 @@ 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 +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` +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 @@ -94,9 +93,6 @@ stop_brokers # Start 2 brokers -# In a distribution, the python tools will be absent. -ensure_python_tests - start_brokers 2 echo "Started Federated brokers on ports ${PORTS[*]}" # Make broker urls @@ -104,15 +100,15 @@ BROKER0="[::1]:${PORTS[0]}" BROKER1="[::1]:${PORTS[1]}" TEST_QUEUE=ipv6-fed-test -$QPID_CONFIG_EXEC -b $BROKER0 add queue $TEST_QUEUE -$QPID_CONFIG_EXEC -b $BROKER1 add queue $TEST_QUEUE -$QPID_ROUTE_EXEC dynamic add $BROKER1 $BROKER0 amq.direct -$QPID_CONFIG_EXEC -b $BROKER1 bind amq.direct $TEST_QUEUE $TEST_QUEUE -$QPID_ROUTE_EXEC route map $BROKER1 +qpid-config -b $BROKER0 add queue $TEST_QUEUE +qpid-config -b $BROKER1 add queue $TEST_QUEUE +qpid-route dynamic add $BROKER1 $BROKER0 amq.direct +qpid-config -b $BROKER1 bind amq.direct $TEST_QUEUE $TEST_QUEUE +qpid-route route map $BROKER1 -./datagen --count 100 | tee rdata-in | +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 +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; } diff --git a/qpid/cpp/src/tests/run_header_test b/qpid/cpp/src/tests/run_logging_tests index d1edcf6831..2ebcc5c902 100755 --- a/qpid/cpp/src/tests/run_header_test +++ b/qpid/cpp/src/tests/run_logging_tests @@ -19,13 +19,20 @@ # under the License. # -# Simple test of encode/decode of a double in application headers -# TODO: this should be expanded to cover a wider set of types and go -# in both directions +set -eu -source $QPID_TEST_COMMON +source env.sh -ensure_python_tests +export WORK_DIR=$(mktemp -d $PWD/run_logging_tests_XXXX) -./header_test -p $QPID_PORT -$srcdir/header_test.py "localhost" $QPID_PORT +exit_code=0 + +dynamic_log_hires_timestamp || exit_code=1 +dynamic_log_level_test || exit_code=1 + +if (( exit_code != 0 )); then + echo "Logging test failures" + exit $exit_code +fi + +rm -rf $WORK_DIR diff --git a/qpid/cpp/src/tests/run_long_federation_sys_tests b/qpid/cpp/src/tests/run_long_federation_sys_tests index c2b4e02d81..ab8b5646ec 100644 --- a/qpid/cpp/src/tests/run_long_federation_sys_tests +++ b/qpid/cpp/src/tests/run_long_federation_sys_tests @@ -21,4 +21,4 @@ # Run the federation system tests (long version). -./run_federation_sys_tests LONG_TEST $@ +USE_LONG_TEST=1 ./run_federation_sys_tests $@ diff --git a/qpid/cpp/src/tests/run_msg_group_tests b/qpid/cpp/src/tests/run_msg_group_tests index ee479c23c7..78bc802a09 100755 --- a/qpid/cpp/src/tests/run_msg_group_tests +++ b/qpid/cpp/src/tests/run_msg_group_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -18,45 +18,30 @@ # specific language governing permissions and limitations # under the License. # -#script to run a sequence of message group queue tests via make -source $QPID_TEST_COMMON +from common import * -ensure_python_tests +port = start_broker("broker") -QUEUE_NAME="group-queue" -GROUP_KEY="My-Group-Id" +commands = [ + "qpid-config -b {} add queue group-queue --group-header=My-Group-Id --shared-groups", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 3 --ack-frequency 7 --randomize-group-size --interleave 3", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 7 --ack-frequency 7 --randomize-group-size", + "qpid-config -b {} add queue group-queue-two --group-header=My-Group-Id --shared-groups", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 7 --ack-frequency 3 --randomize-group-size", + "msg_group_test -b {} -a group-queue-two --group-key My-Group-Id --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 3 --ack-frequency 7 --randomize-group-size --interleave 5", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 59 --group-size 5 --receivers 2 --senders 3 --capacity 1 --ack-frequency 3 --randomize-group-size", + "qpid-config -b {} del queue group-queue-two --force", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 59 --group-size 3 --receivers 2 --senders 3 --capacity 1 --ack-frequency 1 --randomize-group-size", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 211 --group-size 13 --receivers 2 --senders 3 --capacity 47 --ack-frequency 79 --interleave 53", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 10000 --group-size 1 --receivers 0 --senders 1", + "msg_group_test -b {} -a group-queue --group-key My-Group-Id --messages 10000 --receivers 5 --senders 0", + "qpid-config -b {} del queue group-queue --force", +] -BROKER_URL="${QPID_BROKER:-localhost}:${QPID_PORT:-5672}" +address = "localhost:{}".format(port) -run_test() { - "$@" -} +for command in commands: + call(command, address) -##set -x - -declare -i i=0 -declare -a tests -tests=("qpid-config -b $BROKER_URL add queue $QUEUE_NAME --group-header=${GROUP_KEY} --shared-groups" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 3 --ack-frequency 7 --randomize-group-size --interleave 3" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 7 --ack-frequency 7 --randomize-group-size" - "qpid-config -b $BROKER_URL add queue ${QUEUE_NAME}-two --group-header=${GROUP_KEY} --shared-groups" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 7 --ack-frequency 3 --randomize-group-size" - "msg_group_test -b $BROKER_URL -a ${QUEUE_NAME}-two --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 3 --ack-frequency 7 --randomize-group-size --interleave 5" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 59 --group-size 5 --receivers 2 --senders 3 --capacity 1 --ack-frequency 3 --randomize-group-size" - "qpid-config -b $BROKER_URL del queue ${QUEUE_NAME}-two --force" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 59 --group-size 3 --receivers 2 --senders 3 --capacity 1 --ack-frequency 1 --randomize-group-size" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 211 --group-size 13 --receivers 2 --senders 3 --capacity 47 --ack-frequency 79 --interleave 53" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 10000 --group-size 1 --receivers 0 --senders 1" - "msg_group_test -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 10000 --receivers 5 --senders 0" - "qpid-config -b $BROKER_URL del queue $QUEUE_NAME --force") - -while [ -n "${tests[i]}" ]; do - run_test ${tests[i]} - RETCODE=$? - if test x$RETCODE != x0; then - echo "FAILED message group test. Failed command: \"${tests[i]}\""; - exit 1; - fi - i+=1 -done +check_results() diff --git a/qpid/cpp/src/tests/run_msg_group_tests.ps1 b/qpid/cpp/src/tests/run_msg_group_tests.ps1 deleted file mode 100644 index e9cee0a5a0..0000000000 --- a/qpid/cpp/src/tests/run_msg_group_tests.ps1 +++ /dev/null @@ -1,71 +0,0 @@ -# -# 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. -# - -# Simple test of encode/decode of a double in application headers -# TODO: this should be expanded to cover a wider set of types and go -# in both directions - -$srcdir = Split-Path $myInvocation.InvocationName -$PYTHON_DIR = "$srcdir\..\..\..\python" -if (!(Test-Path $PYTHON_DIR -pathType Container)) { - "Skipping msg_group test as python libs not found" - exit 0 -} - -. .\test_env.ps1 - -if (Test-Path qpidd.port) { - set-item -path env:QPID_PORT -value (get-content -path qpidd.port -totalcount 1) -} - -# Test runs from the tests directory but the test executables are in a -# subdirectory based on the build type. Look around for it before trying -# to start it. -. $srcdir\find_prog.ps1 .\msg_group_test.exe -if (!(Test-Path $prog)) { - "Cannot locate msg_group_test.exe" - exit 1 -} - -$QUEUE_NAME="group-queue" -$GROUP_KEY="My-Group-Id" -$BROKER_URL="localhost:$env:QPID_PORT" - -$tests=@("python $QPID_CONFIG_EXEC -b $BROKER_URL add queue $QUEUE_NAME --group-header=${GROUP_KEY} --shared-groups", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 3 --ack-frequency 7 --randomize-group-size --interleave 3", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 7 --ack-frequency 7 --randomize-group-size", - "python $QPID_CONFIG_EXEC -b $BROKER_URL add queue ${QUEUE_NAME}-two --group-header=${GROUP_KEY} --shared-groups", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 7 --ack-frequency 3 --randomize-group-size", - "$prog -b $BROKER_URL -a ${QUEUE_NAME}-two --group-key $GROUP_KEY --messages 103 --group-size 13 --receivers 2 --senders 3 --capacity 3 --ack-frequency 7 --randomize-group-size --interleave 5", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 59 --group-size 5 --receivers 2 --senders 3 --capacity 1 --ack-frequency 3 --randomize-group-size", - "python $QPID_CONFIG_EXEC -b $BROKER_URL del queue ${QUEUE_NAME}-two --force", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 59 --group-size 3 --receivers 2 --senders 3 --capacity 1 --ack-frequency 1 --randomize-group-size", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 211 --group-size 13 --receivers 2 --senders 3 --capacity 47 --ack-frequency 79 --interleave 53", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 10000 --group-size 1 --receivers 0 --senders 1", - "$prog -b $BROKER_URL -a $QUEUE_NAME --group-key $GROUP_KEY --messages 10000 --receivers 5 --senders 0", - "python $QPID_CONFIG_EXEC -b $BROKER_URL del queue $QUEUE_NAME --force") - -foreach ($cmd in $tests) -{ - Invoke-Expression "$cmd" | Write-Output - $ret = $LASTEXITCODE - if ($ret -ne 0) {Write-Host "FAILED message group test. Failed command: $cmd" - break} -} -exit $ret diff --git a/qpid/cpp/src/tests/run_msg_group_tests_soak b/qpid/cpp/src/tests/run_msg_group_tests_soak index d87ca16c88..68a16793f3 100755 --- a/qpid/cpp/src/tests/run_msg_group_tests_soak +++ b/qpid/cpp/src/tests/run_msg_group_tests_soak @@ -18,13 +18,11 @@ # specific language governing permissions and limitations # under the License. # -#script to run a sequence of long-running message group tests via make -#setup path to find qpid-config and msg_group_test test progs -source ./test_env.sh -test -d $PYTHON_DIR || { echo "Skipping message group tests, no python dir."; exit 0; } +# Script to run a sequence of long-running message group tests via +# make -export PATH=$PWD:$srcdir:$PYTHON_COMMANDS:$PATH +source env.sh #set port to connect to via env var test -s qpidd.port && QPID_PORT=`cat qpidd.port` diff --git a/qpid/cpp/src/tests/run_paged_queue_tests b/qpid/cpp/src/tests/run_paged_queue_tests index 2c1e3ae614..c5f6aec927 100755 --- a/qpid/cpp/src/tests/run_paged_queue_tests +++ b/qpid/cpp/src/tests/run_paged_queue_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,32 +19,27 @@ # under the License. # -#setup path to find qpid-config and sender/receiver test progs -source ./test_env.sh -trap stop_broker INT TERM QUIT - -export PATH=$PWD:$srcdir:$PYTHON_COMMANDS:$PATH - -start_broker() { - QPID_PORT=$($QPIDD_EXEC --daemon --port 0 --interface 127.0.0.1 --no-data-dir --paging-dir=$PWD/pqtest_data $MODULES --auth no) || { echo "Could not start broker"; exit 1; } -} - -stop_broker() { - $QPIDD_EXEC -q --port $QPID_PORT -} - -test_single_page() { - msgcount=1000 - qpid-send --messages $msgcount --content-size 1024 --broker "localhost:$QPID_PORT" --address "onepage; {create: always, node:{x-declare:{arguments:{'qpid.paging':True,'qpid.max_pages_loaded':1}}}}" - received=$(qpid-receive --address onepage --broker "localhost:$QPID_PORT" --messages $msgcount | wc -l) - if [[ $received -ne $msgcount ]]; then - echo "single page test failed: received $received messages, expected $msgcount" - exit 1 - fi -} - -start_broker -test_single_page -qpid-cpp-benchmark --broker "localhost:$QPID_PORT" --create-option "node:{x-declare:{arguments:{'qpid.paging':True,'qpid.max_size':0,'qpid.max_count':0,'qpid.flow_stop_size':0,'qpid.flow_resume_size':0,'qpid.flow_stop_count':0,'qpid.flow_resume_count':0}}}" -qpid-cpp-benchmark --broker "localhost:$QPID_PORT" --create-option "node:{x-declare:{arguments:{'qpid.paging':True,'qpid.max_size':0,'qpid.max_count':0,'qpid.flow_stop_size':0,'qpid.flow_resume_size':0,'qpid.flow_stop_count':0,'qpid.flow_resume_count':0}}}" --fill-drain -stop_broker +from common import * + +port = start_broker("broker", "--paging-dir={}".format(join(WORK_DIR, "pqtest_data"))) + +messages = 1000 +address = "onepage; {create: always, node:{x-declare:{arguments:{'qpid.paging':True,'qpid.max_pages_loaded':1}}}}" + +call_with_valgrind("qpid-send --messages {} --content-size 1024 --broker localhost:{} --address \"{}\"", + messages, port, address) + +output = call_for_output_with_valgrind("qpid-receive --address onepage --messages {} --broker localhost:{}", + messages, port) + +received = len(output.splitlines()) + +if received != messages: + fail("Single page test failed: received {} messages, expected {}", received, messages) + +option = "node:{x-declare:{arguments:{'qpid.paging':True,'qpid.max_size':0,'qpid.max_count':0,'qpid.flow_stop_size':0,'qpid.flow_resume_size':0,'qpid.flow_stop_count':0,'qpid.flow_resume_count':0}}}" + +call("qpid-cpp-benchmark --broker localhost:{} --create-option \"{}\"", port, option) +call("qpid-cpp-benchmark --broker localhost:{} --create-option \"{}\" --fill-drain", port, option) + +check_results() diff --git a/qpid/cpp/src/tests/quick_perftest b/qpid/cpp/src/tests/run_performance_tests index 698af60324..ea195ae80d 100755 --- a/qpid/cpp/src/tests/quick_perftest +++ b/qpid/cpp/src/tests/run_performance_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,4 +19,10 @@ # under the License. # -exec `dirname $0`/run_test ./qpid-perftest --summary --count 100 +from common import * + +port = start_broker("broker") + +call_with_valgrind("qpid-perftest --summary --count 100 --port {}", port) + +check_results() diff --git a/qpid/cpp/src/tests/run_perftest b/qpid/cpp/src/tests/run_perftest deleted file mode 100755 index 2fadc6cc62..0000000000 --- a/qpid/cpp/src/tests/run_perftest +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env 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. -# - -# Args: count [qpid-perftest options...] -# Run a qpid-perftest with count multiplied. -# -MULTIPLIER=3 -COUNT=`expr $1 \* $MULTIPLIER` -shift -exec `dirname $0`/run_test ./qpid-perftest --summary --count $COUNT "$@" diff --git a/qpid/cpp/src/tests/run_python_tests b/qpid/cpp/src/tests/run_python_tests new file mode 100755 index 0000000000..2c6570335c --- /dev/null +++ b/qpid/cpp/src/tests/run_python_tests @@ -0,0 +1,62 @@ +#!/usr/bin/env python + +# +# 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. +# + +from common import * + +load_module_arg = None + +if AMQP_LIB is not None: + load_module_arg = "--load-module {}".format(AMQP_LIB) + +acl_file = join(BUILD_DIR, "src", "tests", "policy.acl") +acl_file_arg = "--acl-file {}".format(acl_file) + +port = start_broker("broker", load_module_arg, acl_file_arg) + +# Native python tests + +run_broker_tests(port, "-m qpid_tests.broker_0_10 -m qpid.tests") + +# Swigged python tests + +failing_tests = join(BUILD_DIR, "src", "tests", "failing-amqp0-10-python-tests") + +ENV["QPID_USE_SWIG_CLIENT"] = "1" + +run_broker_tests(port, + "-m qpid.tests.messaging.message", + "-m qpid_tests.broker_0_10.priority", + "-m qpid_tests.broker_0_10.lvq", + "-m qpid_tests.broker_0_10.new_api", + "-I {}".format(failing_tests)) + +if AMQP_LIB is not None: + failing_tests = join(BUILD_DIR, "src", "tests", "failing-amqp1.0-python-tests") + + run_broker_tests(port, + "--define=\"protocol_version=amqp1.0\"", + "--define=\"policy_file={}\"".format(acl_file), + "-m qpid_tests.broker_1_0", + "-m qpid_tests.broker_0_10.new_api", + "-m assertions -m reject_release -m misc -m policies -m acl_1", + "-I {}".format(failing_tests)) + +check_results() diff --git a/qpid/cpp/src/tests/config.null b/qpid/cpp/src/tests/run_qmf_tests index e2f355768b..40c6118470 100644..100755 --- a/qpid/cpp/src/tests/config.null +++ b/qpid/cpp/src/tests/run_qmf_tests @@ -1,3 +1,5 @@ +#!/usr/bin/env python + # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -17,5 +19,8 @@ # under the License. # -# Deliberately empty configuration file for tests. +from common import * + +call("qpid-python-test -m qpidd_qmfv2_tests -DOUTDIR={}", WORK_DIR) +check_results() diff --git a/qpid/cpp/src/tests/run_queue_redirect b/qpid/cpp/src/tests/run_queue_redirect deleted file mode 100755 index 3a0ae5118a..0000000000 --- a/qpid/cpp/src/tests/run_queue_redirect +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env 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 the queue redirect. $srcdir is set by the Makefile. -source ./test_env.sh -DATA_DIR=`pwd`/data_dir - -trap stop_brokers INT TERM QUIT - -start_brokers() { - $QPIDD_EXEC --daemon \ - --port 0 --interface 127.0.0.1 \ - --no-module-dir \ - --data-dir $DATA_DIR \ - --acl-file policy.acl \ - --auth no \ - --log-to-file queue_redirect.log \ - --log-enable info+ \ - --log-enable trace+:Model \ - --log-enable trace+ > qpidd.port - LOCAL_PORT=`cat qpidd.port` -} - -stop_brokers() { - $QPIDD_EXEC --no-module-dir -q --port $LOCAL_PORT -} - -if test -d ${PYTHON_DIR} ; then - rm -f queue_redirect.log - rm -rf $DATA_DIR - mkdir -p $DATA_DIR - cp $srcdir/policy.acl $DATA_DIR - start_brokers - echo "Running queue redirect tests using broker on port $LOCAL_PORT" - $QPID_PYTHON_TEST -b localhost:$LOCAL_PORT -m queue_redirect - stop_brokers || EXITCODE=1 - exit $EXITCODE -fi diff --git a/qpid/cpp/src/tests/run_queue_redirect_tests b/qpid/cpp/src/tests/run_queue_redirect_tests new file mode 100644 index 0000000000..27458c272e --- /dev/null +++ b/qpid/cpp/src/tests/run_queue_redirect_tests @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +# +# 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. +# + +from common import * + +policy_file = join(BUILD_DIR, "src", "tests", "policy.acl") + +port = start_broker("broker", "--acl-file {}".format(policy_file), "--log-enable debug+:Model") + +run_broker_tests(port, "-m queue_redirect", "-Dpolicy-file={}".format(policy_file)) + +check_results() diff --git a/qpid/cpp/src/tests/run_ring_queue_test b/qpid/cpp/src/tests/run_ring_queue_test deleted file mode 100755 index 69497f9872..0000000000 --- a/qpid/cpp/src/tests/run_ring_queue_test +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env 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. -# -#script to run a sequence of ring queue tests via make - -#setup path to find qpid-config and sender/receiver test progs -source ./test_env.sh - -export PATH=$PWD:$srcdir:$PYTHON_COMMANDS:$PATH - -#set port to connect to via env var -test -s qpidd.port && QPID_PORT=`cat qpidd.port` -export QPID_PORT - -ring_queue_test -c -s 4 -r 4 -ring_queue_test -s 4 -r 0 -ring_queue_test -s 1 -r 1 - - diff --git a/qpid/cpp/src/tests/run_ring_queue_tests b/qpid/cpp/src/tests/run_ring_queue_tests new file mode 100755 index 0000000000..fbd6b0dff8 --- /dev/null +++ b/qpid/cpp/src/tests/run_ring_queue_tests @@ -0,0 +1,30 @@ +#!/usr/bin/env python + +# +# 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. +# + +from common import * + +ENV["QPID_PORT"] = start_broker("broker") + +call("ring_queue_test -c -s 4 -r 4") +call("ring_queue_test -s 4 -r 0") +call("ring_queue_test -s 1 -r 1") + +check_results() diff --git a/qpid/cpp/src/tests/run_sasl_tests b/qpid/cpp/src/tests/run_sasl_tests new file mode 100755 index 0000000000..7ce92a232b --- /dev/null +++ b/qpid/cpp/src/tests/run_sasl_tests @@ -0,0 +1,64 @@ +#!/usr/bin/env 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. +# + +set -eu + +source env.sh + +export WORK_DIR=$(mktemp -d $PWD/run_sasl_tests_XXXX) + +echo "Created work dir '${WORK_DIR}'" + +min_sasl_version=131350 # Sasl version 2.1.22 +sasl_version=$(sasl_version) + +if (( $sasl_version < min_sasl_version )); then + echo "Sasl version is too old; found $version; require $min_version or greater" + echo "SKIPPING" + exit 0 +fi + +exit_code=0 + +function fail { + echo "FAILED! ${1}" + exit_code=1 +} + +echo "# Running sasl_fed" +sasl_fed || fail "Test sasl_fed failed" +echo "# Running sasl_fed_ex dynamic" +sasl_fed_ex dynamic || fail "Test sasl_fed_ex dynamic failed" +echo "# Running sasl_fed_ex link" +sasl_fed_ex link || fail "Test sasl_fed_ex link failed" +echo "# Running sasl_fed_ex queue" +sasl_fed_ex queue || fail "Test sasl_fed_ex queue failed" +echo "# Running sasl_fed_ex route" +sasl_fed_ex route || fail "Test sasl_fed_ex route failed" +echo "# Running sasl_no_dir" +sasl_no_dir || fail "Test sasl_no_dir failed" + +if (( exit_code != 0 )); then + echo "SASL test failures" + exit $exit_code +fi + +rm -rf $WORK_DIR diff --git a/qpid/cpp/src/tests/run_ssl_tests b/qpid/cpp/src/tests/run_ssl_tests new file mode 100755 index 0000000000..896893eb3d --- /dev/null +++ b/qpid/cpp/src/tests/run_ssl_tests @@ -0,0 +1,329 @@ +#!/usr/bin/env 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 SSL + +source env.sh + +#set -x + +CONFIG=$(dirname $0)/qpidd-empty.conf +TEST_CERT_DIR=`pwd`/test_cert_dir +CERT_DB=${TEST_CERT_DIR}/test_cert_db +CERT_PW_FILE=`pwd`/cert.password +TEST_HOSTNAME=127.0.0.1 +TEST_CLIENT_CERT=rumplestiltskin +CA_PEM_FILE=${TEST_CERT_DIR}/ca_cert.pem +OTHER_CA_CERT_DB=${TEST_CERT_DIR}/x_ca_cert_db +OTHER_CA_PEM_FILE=${TEST_CERT_DIR}/other_ca_cert.pem +PY_PING_BROKER=$SOURCE_DIR/src/tests/ping_broker +COUNT=10 + +if [[ -a $AMQP_LIB ]] ; then + MODULES="--load-module $AMQP_LIB" +fi + +trap cleanup EXIT + +error() { echo $*; exit 1; } + +# create the test certificate database +# $1 = string used as Subject in server's certificate +# $2 = string used as SubjectAlternateName (SAN) in server's certificate +create_certs() { + + local CERT_SUBJECT=${1:-"CN=${TEST_HOSTNAME},O=MyCo,ST=Massachusetts,C=US"} + local CERT_SAN=${2:-"*.server.com"} + + mkdir -p ${TEST_CERT_DIR} + rm -rf ${TEST_CERT_DIR}/* + + # Set Up a CA with a self-signed Certificate + # + mkdir -p ${CERT_DB} + certutil -N -d ${CERT_DB} -f ${CERT_PW_FILE} + certutil -S -d ${CERT_DB} -n "Test-CA" -s "CN=Test-CA,O=MyCo,ST=Massachusetts,C=US" -t "CT,," -x -f ${CERT_PW_FILE} -z /bin/sh >/dev/null 2>&1 + certutil -L -d ${CERT_DB} -n "Test-CA" -a -o ${CERT_DB}/rootca.crt -f ${CERT_PW_FILE} + #certutil -L -d ${CERT_DB} -f ${CERT_PW_FILE} + + # create server certificate signed by Test-CA + # + certutil -R -d ${CERT_DB} -s "${CERT_SUBJECT}" -o ${TEST_CERT_DIR}/server.req -f ${CERT_PW_FILE} -z /bin/sh > /dev/null 2>&1 + certutil -C -d ${CERT_DB} -c "Test-CA" -8 "${CERT_SAN}" -i ${TEST_CERT_DIR}/server.req -o ${TEST_CERT_DIR}/server.crt -f ${CERT_PW_FILE} -m ${RANDOM} + certutil -A -d ${CERT_DB} -n ${TEST_HOSTNAME} -i ${TEST_CERT_DIR}/server.crt -t "Pu,," + + # create a certificate to identify the client + # + certutil -R -d ${CERT_DB} -s "CN=${TEST_CLIENT_CERT}" -o ${TEST_CERT_DIR}/client.req -f ${CERT_PW_FILE} -z /bin/sh > /dev/null 2>&1 + certutil -C -d ${CERT_DB} -c "Test-CA" -8 "*.client.com" -i ${TEST_CERT_DIR}/client.req -o ${TEST_CERT_DIR}/client.crt -f ${CERT_PW_FILE} -m ${RANDOM} + certutil -A -d ${CERT_DB} -n ${TEST_CLIENT_CERT} -i ${TEST_CERT_DIR}/client.crt -t "Pu,," + ### + #certutil -N -d ${SERVER_CERT_DIR} -f ${CERT_PW_FILE} + #certutil -S -d ${SERVER_CERT_DIR} -n ${TEST_HOSTNAME} -s "CN=${TEST_HOSTNAME}" -t "CT,," -x -f ${CERT_PW_FILE} -z /usr/bin/certutil + #certutil -S -d ${SERVER_CERT_DIR} -n ${TEST_CLIENT_CERT} -s "CN=${TEST_CLIENT_CERT}" -t "CT,," -x -f ${CERT_PW_FILE} -z /usr/bin/certutil + + # Set up a separate DB with its own CA for testing failure to validate scenario + # + mkdir -p ${OTHER_CA_CERT_DB} + certutil -N -d ${OTHER_CA_CERT_DB} -f ${CERT_PW_FILE} + certutil -S -d ${OTHER_CA_CERT_DB} -n "Other-Test-CA" -s "CN=Another Test CA,O=MyCo,ST=Massachusetts,C=US" -t "CT,," -x -f ${CERT_PW_FILE} -z /bin/sh >/dev/null 2>&1 + certutil -L -d ${OTHER_CA_CERT_DB} -n "Other-Test-CA" -a -o ${OTHER_CA_CERT_DB}/rootca.crt -f ${CERT_PW_FILE} + #certutil -L -d ${OTHER_CA_CERT_DB} -f ${CERT_PW_FILE} +} + +delete_certs() { + if [[ -e ${TEST_CERT_DIR} ]] ; then + rm -rf ${TEST_CERT_DIR} + fi +} + +# Don't need --no-module-dir or --no-data-dir as they are set as env vars in env.sh +COMMON_OPTS="--daemon --config $CONFIG --ssl-cert-db $CERT_DB --ssl-cert-password-file $CERT_PW_FILE --ssl-cert-name $TEST_HOSTNAME" + +# 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 --port 0 --interface 127.0.0.1 $COMMON_OPTS $2) || error "Could not start broker $i" + done + PORTS=( ${PORTS[@]} ${ports[@]} ) +} + +# Stop single broker: +# $1 is number of broker to stop (0 based) +stop_broker() { + qpidd -qp ${PORTS[$1]} + + # Remove from ports array + unset PORTS[$1] +} + +stop_brokers() { + for port in "${PORTS[@]}"; + do + qpidd -qp $port + done + PORTS=() +} + +pick_port() { + # We need a fixed port to set --cluster-url. Use qpidd to pick a free port. + PICK=`qpidd --no-module-dir --listen-disable ssl -dp0` + qpidd --no-module-dir -qp $PICK + echo $PICK +} + +cleanup() { + stop_brokers + delete_certs + rm -f ${CERT_PW_FILE} +} + +start_ssl_broker() { + start_brokers 1 "--transport ssl --ssl-port 0 --require-encryption --auth no $MODULES" +} + +start_ssl_mux_broker() { + qpidd $COMMON_OPTS --port $1 --ssl-port $1 --auth no + PORTS=( ${PORTS[@]} $1 ) +} + +sasl_config_dir=$BUILD_DIR/src/tests/sasl_config + +start_authenticating_broker() { + start_brokers 1 "--transport ssl --ssl-port 0 --require-encryption --ssl-sasl-no-dict --ssl-require-client-authentication --auth yes --sasl-config=${sasl_config_dir} $MODULES" +} + +ssl_cluster_broker() { # $1 = port + start_brokers 1 "--ssl-port $1 --auth no --load-module $CLUSTER_LIB --cluster-name ssl_test.$HOSTNAME.$$ --cluster-url amqp:ssl:$TEST_HOSTNAME:$1" + + # Wait for broker to be ready + qpid-ping -Pssl -b $TEST_HOSTNAME:$1 -q || { echo "Cannot connect to broker on $1"; exit 1; } +} + +CERTUTIL=$(type -p certutil) +if [[ !(-x $CERTUTIL) ]] ; then + echo "No certutil, skipping ssl test"; + exit 0; +fi + +if [[ !(-e ${CERT_PW_FILE}) ]] ; then + echo password > ${CERT_PW_FILE} +fi +delete_certs +create_certs || error "Could not create test certificate database" + +start_ssl_broker +PORT=${PORTS[0]} +echo "Running SSL test on port $PORT" +export QPID_NO_MODULE_DIR=1 +export QPID_SSL_CERT_DB=${CERT_DB} +export QPID_SSL_CERT_PASSWORD_FILE=${CERT_PW_FILE} + +## Test connection via connection settings +qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary + +## Test connection with a URL +URL=amqp:ssl:$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; } + +if [[ -a $AMQP_LIB ]] ; then + echo "Testing ssl over AMQP 1.0" + qpid-send --connection-options '{protocol:amqp1.0}' -b $URL --content-string=hello -a "foo;{create:always}" + MSG=`qpid-receive --connection-options '{protocol:amqp1.0}' -b $URL -a "foo;{create:always}" --messages 1` + test "$MSG" = "hello" || { echo "receive failed for AMQP 1.0 '$MSG' != 'hello'"; exit 1; } +fi + +## Test connection with a combination of URL and connection options (in messaging API) +URL=$TEST_HOSTNAME:$PORT +qpid-send -b $URL --connection-options '{transport:ssl,heartbeat:2}' --content-string='hello again' -a "foo;{create:always}" +MSG=`qpid-receive -b $URL --connection-options '{transport:ssl,heartbeat:2}' -a "foo;{create:always}" --messages 1` +test "$MSG" = "hello again" || { echo "receive failed '$MSG' != 'hello again'"; exit 1; } + +## Test using the Python client +if test -d $PYTHON_DIR; then + echo "Testing Non-Authenticating with Python Client..." + URL=amqps://$TEST_HOSTNAME:$PORT + if `$PY_PING_BROKER -b $URL`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi +else + echo "Skipping python part of ssl_test, no python dir." +fi + +#### Client Authentication tests + +start_authenticating_broker +PORT2=${PORTS[1]} +echo "Running SSL client authentication test on port $PORT2" +URL=amqp:ssl:$TEST_HOSTNAME:$PORT2 + +## See if you can set the SSL cert-name for the connection +qpid-send -b $URL --connection-options "{ssl-cert-name: $TEST_CLIENT_CERT }" --content-string=hello -a "bar;{create:always}" +MSG2=`qpid-receive -b $URL --connection-options "{ssl-cert-name: $TEST_CLIENT_CERT }" -a "bar;{create:always}" --messages 1` +test "$MSG2" = "hello" || { echo "receive failed '$MSG2' != 'hello'"; exit 1; } + +## Make sure that connect fails with an invalid SSL cert-name +qpid-send -b $URL --connection-options "{ssl-cert-name: pignose }" --content-string=hello -a "baz;{create:always}" 2>/dev/null 1>/dev/null +MSG3=`qpid-receive -b $URL --connection-options "{ssl-cert-name: pignose }" -a "baz;{create:always}" --messages 1 2>/dev/null` +test "$MSG3" = "" || { echo "receive succeeded without valid ssl cert '$MSG3' != ''"; exit 1; } + +stop_brokers + +# Test ssl muxed with plain TCP on the same connection + +# Test a specified port number - since tcp/ssl are the same port don't need to specify --transport ssl +PORT=`pick_port` +start_ssl_mux_broker $PORT || error "Could not start broker" +echo "Running SSL/TCP mux test on fixed port $PORT" + +## Test connection via connection settings +qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary || error "SSL connection failed!" +qpid-perftest --count ${COUNT} --port ${PORT} -P tcp -b $TEST_HOSTNAME --summary || error "TCP connection failed!" + +# Test a broker chosen port - since ssl chooses port need to use --transport ssl here +start_ssl_broker +PORT=${PORTS[0]} +echo "Running SSL/TCP mux test on random port $PORT" + +## Test connection via connection settings +qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary || error "SSL connection failed!" +qpid-perftest --count ${COUNT} --port ${PORT} -P tcp -b $TEST_HOSTNAME --summary || error "TCP connection failed!" + +stop_brokers + +### Additional tests that require 'openssl' and 'pk12util' to be installed (optional) + +PK12UTIL=$(type -p pk12util) +if [[ !(-x $PK12UTIL) ]] ; then + echo >&2 "'pk12util' command not available, skipping remaining tests" + exit 0 +fi + +OPENSSL=$(type -p openssl) +if [[ !(-x $OPENSSL) ]] ; then + echo >&2 "'openssl' command not available, skipping remaining tests" + exit 0 +fi + +## verify python version > 2.5 (only 2.6+ does certificate checking) +PY_VERSION=$(python -c "import sys; print hex(sys.hexversion)") +if (( PY_VERSION < 0x02060000 )); then + echo >&2 "Detected python version < 2.6 - skipping certificate verification tests" + exit 0 +fi + +echo "Testing Certificate validation and Authentication with the Python Client..." + +# extract the CA's certificate as a PEM file +get_ca_certs() { + $PK12UTIL -o ${TEST_CERT_DIR}/CA_pk12.out -d ${CERT_DB} -n "Test-CA" -w ${CERT_PW_FILE} -k ${CERT_PW_FILE} > /dev/null + $OPENSSL pkcs12 -in ${TEST_CERT_DIR}/CA_pk12.out -out ${CA_PEM_FILE} -nokeys -passin file:${CERT_PW_FILE} >/dev/null + $PK12UTIL -o ${TEST_CERT_DIR}/other_CA_pk12.out -d ${OTHER_CA_CERT_DB} -n "Other-Test-CA" -w ${CERT_PW_FILE} -k ${CERT_PW_FILE} > /dev/null + $OPENSSL pkcs12 -in ${TEST_CERT_DIR}/other_CA_pk12.out -out ${OTHER_CA_PEM_FILE} -nokeys -passin file:${CERT_PW_FILE} >/dev/null +} + +get_ca_certs || error "Could not extract CA certificates as PEM files" +start_ssl_broker +PORT=${PORTS[0]} +URL=amqps://$TEST_HOSTNAME:$PORT +# verify the python client can authenticate the broker using the CA +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi +# verify the python client fails to authenticate the broker when using the other CA +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${OTHER_CA_PEM_FILE} > /dev/null 2>&1`; then { echo " Failed"; exit 1; }; else echo " Passed"; fi +stop_brokers + +# create a certificate without matching TEST_HOSTNAME, should fail to verify + +create_certs "O=MyCo" "*.${TEST_HOSTNAME}.com" || error "Could not create server test certificate" +get_ca_certs || error "Could not extract CA certificates as PEM files" +start_ssl_broker +PORT=${PORTS[0]} +URL=amqps://$TEST_HOSTNAME:$PORT +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE} > /dev/null 2>&1`; then { echo " Failed"; exit 1; }; else echo " Passed"; fi +# but disabling the check for the hostname should pass +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE} --ssl-skip-hostname-check`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi +stop_brokers + +# test SubjectAltName parsing + +if (( PY_VERSION >= 0x02070300 )); then +# python 2.7.3+ supports SubjectAltName extraction +# create a certificate with TEST_HOSTNAME only in SAN, should verify OK + create_certs "O=MyCo" "*.foo.com,${TEST_HOSTNAME},*xyz.com" || error "Could not create server test certificate" + get_ca_certs || error "Could not extract CA certificates as PEM files" + start_ssl_broker + PORT=${PORTS[0]} + URL=amqps://$TEST_HOSTNAME:$PORT + if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi + stop_brokers + + create_certs "O=MyCo" "*${TEST_HOSTNAME}" || error "Could not create server test certificate" + get_ca_certs || error "Could not extract CA certificates as PEM files" + start_ssl_broker + PORT=${PORTS[0]} + URL=amqps://$TEST_HOSTNAME:$PORT + if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi + stop_brokers +fi diff --git a/qpid/cpp/src/tests/run_store_tests.ps1 b/qpid/cpp/src/tests/run_store_tests.ps1 index 0683892393..f85e158cc0 100644 --- a/qpid/cpp/src/tests/run_store_tests.ps1 +++ b/qpid/cpp/src/tests/run_store_tests.ps1 @@ -31,7 +31,7 @@ if ($test_store -ne "MSSQL" -and $test_store -ne "MSSQL-CLFS") { $srcdir = Split-Path $myInvocation.InvocationName -. .\test_env.ps1 +. .\env.ps1 if (!(Test-Path $PYTHON_DIR -pathType Container)) { "Skipping store tests as python libs not found" diff --git a/qpid/cpp/src/tests/run_test b/qpid/cpp/src/tests/run_test deleted file mode 100755 index 8e397b3458..0000000000 --- a/qpid/cpp/src/tests/run_test +++ /dev/null @@ -1,191 +0,0 @@ -#!/usr/bin/env 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. -# - -# -# Set up environment and run a test executable or script. -# -# Output nothing if test passes, show the output if it fails and -# leave output in <test>.log for examination. -# -# If qpidd.port exists and is not empty run test with QPID_PORT=`cat qpidd.port` -# -# If $VALGRIND if is set run under valgrind. If there are valgrind -# erros show valgrind output, also leave it in <test>.valgrind for -# examination. -# - -wrapper="Qpid Test Wrapper" -function usage { - echo "Usage:" - echo " -workingDir DIR" - echo " -buildDir DIR" - echo " -sourceDir DIR" - echo " -python - run python script" - echo " -boostTest - run boost unit test" - echo " -xml - XML output from tests" - echo " -startBroker - start/stop broker before/after test" - echo " -brokerOptions - use these extra options when starting broker" - echo " -help - print this message" - echo " -- - This is required to separate the wrapped command" - echo " from the test parameters" -} - -function illegal_option { - echo "$wrapper: $1 is not an accepted option" - usage >&2 -} - -function no_command { - echo "$wrapper: No wrapped command specified" - usage >&2 -} - -function ignored_argument { - echo "Ignored argument: $1" >&2 -} - -working_dir='.' - -while true; do -case "$1" in - --) shift; break ;; - # Split up any parameters expressed as -blah=foo - # and process them next time round the loop - -*=*) option=${1%%=*}; param=${1#*=} - shift; - set -- "$option" "$param" "$@" ;; - -workingDir) working_dir=$2; shift 2 ;; - -buildDir) build_dir=$2; shift 2 ;; - -sourceDir) source_dir=$2; shift 2 ;; - -python) run_python=yes; shift ;; - -boostTest) boost_test=yes; shift ;; - -xml) xml_output=yes; shift ;; - -startBroker) start_broker=yes; shift ;; - -brokerOptions) qpidd_extra_options=$2; shift 2 ;; - -help) usage; exit 0; ;; - -*) illegal_option "$1"; exit 1; ;; - '') no_command; exit 1; ;; - *) ignored_argument "$1"; shift; ;; -esac -done - -program=$1 -shift - -logfilebase=$(pwd -P)/$(basename $program) -source $build_dir/src/tests/test_env.sh || (echo "Error: Couldn't read test_env.sh (build settings)" ; exit 1) -source $srcdir/vg_check - -# Allow environment to dictate if we output xml test results -if [ -n "$QPID_XML_TEST_OUTPUT" ] ; then - xml_output=yes -fi - -# Use VALGRIND_OPTS="--gen-suppressions=all" to generated suppressions -VALGRIND_OPTS="$VALGRIND_OPTS ---leak-check=full ---demangle=yes ---suppressions=$srcdir/.valgrind.supp ---num-callers=25 -" - -# Set up environment for running a Qpid test -if [ -n "$start_broker" ] ; then - qpidd_command="$QPIDD_EXEC --auth=no --no-module-dir --daemon --port=0 --interface 127.0.0.1 --log-to-file $logfilebase-qpidd.log $qpidd_extra_options" - if [ -n "$VALGRIND" ] ; then - if [ -n "$xml_output" ] ; then - QPID_PORT=$($VALGRIND $VALGRIND_OPTS --xml=yes --xml-file=$logfilebase-qpidd-vg.xml -- $qpidd_command) - else - QPID_PORT=$($VALGRIND $VALGRIND_OPTS --log-file=$logfilebase-qpidd.vglog -- $qpidd_command) - fi - else - QPID_PORT=$($qpidd_command) - fi -elif [ -r qpidd.port ]; then - QPID_PORT=$(cat qpidd.port) -fi -export QPID_PORT -QPID_LOG_TO_FILE="$logfilebase.log" -export QPID_LOG_TO_FILE - -# Export variables from makefile. -export srcdir - -if [ -n "$VALGRIND" ] ; then - if [ -n "$xml_output" ] ; then - valgrind_command="$VALGRIND $VALGRIND_OPTS --xml=yes --xml-file=$logfilebase-vg.xml --" - else - VG_LOG="$logfilebase.vglog" - rm -f $VG_LOG* - valgrind_command="$VALGRIND $VALGRIND_OPTS --log-file=$VG_LOG --" - fi -fi - -ERROR=0 -if [ -n "$run_python" -a -n "$PYTHON" ] ; then - (cd $working_dir; $PYTHON $program "$@") || ERROR=1 -elif [ ! -x $program ] ; then - echo "Cannot execute $program" - ERROR=1 -elif file $program | grep -q ELF; then - if [ -n "$boost_test" ] ; then - # Set boost unit test environment - if [ -n "$xml_output" ] ; then - export BOOST_TEST_SHOW_PROGRESS=no - export BOOST_TEST_OUTPUT_FORMAT=XML - export BOOST_TEST_LOG_LEVEL=test_suite - export BOOST_TEST_REPORT_LEVEL=no - (cd $working_dir; $valgrind_command $program "$@") > $logfilebase-unittest.xml || ERROR=1 - else - (cd $working_dir; $valgrind_command $program "$@") || ERROR=1 - fi - else - # This is a real executable, valgrind it if required - # Hide output unless there's an error. - (cd $working_dir; $valgrind_command $program "$@" 2>&1) || ERROR=1 - fi - if [ -n "$VG_LOG" ] ; then - vg_check $VG_LOG* || ERROR=1 - fi -else - (cd $working_dir; $program "$@") || ERROR=1 -fi - -# Check log -if [ -r $QPID_LOG_TO_FILE ]; then -egrep 'warning\|error\|critical' $QPID_LOG_TO_FILE && { - echo "WARNING: Suspicious log entries in $QPID_LOG_TO_FILE, above." -} -fi - -if [ -n "$start_broker" ] ; then - $QPIDD_EXEC --no-module-dir --quit || ERROR=1 - - # Check qpidd.log. - egrep 'warning\|error\|critical' $logfilebase-qpidd.log && { - echo "WARNING: Suspicious broker log entries in qpidd.log, above." - } - - # Check valgrind log. - if [ -n "$VALGRIND" -a -z "$xml_output" ] ; then - vg_check $logfilebase-qpidd.vglog || ERROR=1 - fi -fi -exit $ERROR diff --git a/qpid/cpp/src/tests/run_test.ps1 b/qpid/cpp/src/tests/run_test.ps1 deleted file mode 100644 index ff103e4556..0000000000 --- a/qpid/cpp/src/tests/run_test.ps1 +++ /dev/null @@ -1,162 +0,0 @@ -# -# 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. -# - -param( - [string]$workingDir = $pwd, - [string]$buildDir = $(throw "-buildDir is required"), - [string]$sourceDir, - [switch]$python = $false, - [switch]$boostTest = $false, - [switch]$xml, - [switch]$startBroker = $false, - [string]$brokerOptions, - [switch]$help, - [Parameter(Mandatory=$true, ValueFromRemainingArguments=$true, Position=0)] - [String[]]$rest - ) - -if ([string]::IsNullOrEmpty($sourceDir)) { - $sourceDir = Split-Path $myInvocation.InvocationName -} - -if ([string]::IsNullOrEmpty($xml)) { - $xml = Test-Path variable:global:QPID_XML_TEST_OUTPUT -} - -# Set up environment and run a test executable or script. -. .\test_env.ps1 - -if ($rest[0] -eq $null) { - "No wrapped command specified" - exit 1 -} -# The test exe is probably not in the current binary dir - it's usually -# placed in a subdirectory based on the configuration built in Visual Studio. -# So check around to see where it is - when located, set the QPID_LIB_DIR -# and PATH to look in the corresponding configuration off the src directory, -# one level up. -$prog = $rest[0] -$logfilebase = [System.IO.Path]::GetFileNameWithoutExtension($prog) -$logfilebase = "$pwd\\$logfilebase" -# Qpid client lib sees QPID_LOG_TO_FILE; acts like using --log-to-file on -# command line. -$env:QPID_LOG_TO_FILE = "$logfilebase.log" -$is_script = $prog -match ".ps1$" -if (($is_script -or $python) -and !(Test-Path "$prog")) { - "$prog does not exist" - exit 1 -} -if (!$is_script -and !(Test-Path "$prog")) { - . $sourceDir\find_prog.ps1 $prog - $rest[0] = $prog - $env:QPID_LIB_DIR = "..\$sub" -} - -# Set up environment for running a Qpid test. If a broker should be started, -# do that, else check for a saved port number to use. -if ($startBroker) { - $broker = new-object System.Diagnostics.ProcessStartInfo - $broker.WorkingDirectory = $pwd - $broker.UseShellExecute = $false - $broker.CreateNoWindow = $true - $broker.RedirectStandardOutput = $true - $broker.FileName = $env:QPIDD_EXEC - $broker.Arguments = "--auth=no --no-module-dir --port=0 --interface 127.0.0.1 --log-to-file $logfilebase-qpidd.log $brokerOptions" - $broker_process = [System.Diagnostics.Process]::Start($broker) - $env:QPID_PORT = $broker_process.StandardOutput.ReadLine() -} -else { - # If qpidd.port exists and is not empty run test with QPID_PORT set. - if (Test-Path qpidd.port) { - set-item -path env:QPID_PORT -value (get-content -path qpidd.port -totalcount 1) - } -} - -# Now start the real test. -if ($python) { - $to_run = $PYTHON_EXE - $skip_args0 = $false - $outputfile = "" -} -elseif ($boostTest) { - if ($xml) { - $env:BOOST_TEST_SHOW_PROGRESS=no - $env:BOOST_TEST_OUTPUT_FORMAT=XML - $env:BOOST_TEST_LOG_LEVEL=test_suite - $env:BOOST_TEST_REPORT_LEVEL=no - $to_run = $rest[0] - $skip_args0 = $true - $outputfile = "$logfilebase-unittest.xml" - } - else { - $to_run = $rest[0] - $skip_args0 = $true - $outputfile = "" - } -} -else { - # Non-boost executable or powershell script - $outputfile = "" - if ($is_script) { - $to_run = (get-command powershell.exe).Definition - $skip_args0 = $false - } - else { - $to_run = $rest[0] - $skip_args0 = $true - } -} - -if ($skip_args0) { - $arglist = $rest[1..($rest.length-1)] -} -else { - $arglist = $rest -} - -if ($outputfile -eq "") { - $p = Start-Process -FilePath $to_run -ArgumentList $arglist -NoNewWindow -PassThru - $line = "" -} -else { - $p = Start-Process -FilePath $to_run -ArgumentList $arglist -NoNewWindow -RedirectStandardOutput $outputfile -PassThru -} -Wait-Process -InputObject $p -$status = $p.ExitCode - -if (Test-Path $env:QPID_LOG_TO_FILE) { - $problems = Select-String -Path $env:QPID_LOG_TO_FILE -pattern " error ", " warning ", " critical " - if ($problems -ne $null) { - "WARNING: suspicious log entries in $env:QPID_LOG_TO_FILE:\n$problems" - $status = 1 - } -} - -# If a broker was started, stop it. -if ($startBroker) { - & $env:QPIDD_EXEC --no-module-dir --quit - # Check qpid log for problems - $problems = Select-String -Path $logfilebase-qpidd.log -pattern " error ", " warning ", " critical " - if ($problems -ne $null) { - "WARNING: suspicious log entries in $logfilebase-qpidd.log:\n$problems" - $status = 1 - } -} - -exit $status diff --git a/qpid/cpp/src/tests/fanout_perftest b/qpid/cpp/src/tests/run_topic_tests index 168994d372..f34b8044ba 100755 --- a/qpid/cpp/src/tests/fanout_perftest +++ b/qpid/cpp/src/tests/run_topic_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,4 +19,12 @@ # under the License. # -exec `dirname $0`/run_perftest 10000 --mode fanout --npubs 16 --nsubs 16 --size 64 +# Quick and quiet topic test for make test + +from common import * + +ENV["QPID_PORT"] = start_broker("broker") + +call_with_valgrind("topictest -s2 -m2 -b1") + +check_results() diff --git a/qpid/cpp/src/tests/quick_topictest b/qpid/cpp/src/tests/run_transaction_tests index e44ec0f477..4319b22096 100755 --- a/qpid/cpp/src/tests/quick_topictest +++ b/qpid/cpp/src/tests/run_transaction_tests @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/usr/bin/env python # # Licensed to the Apache Software Foundation (ASF) under one @@ -19,12 +19,12 @@ # under the License. # +from common import * -# Quick and quiet topic test for make check. -test -z "$srcdir" && srcdir=`dirname $0` -$srcdir/topictest -s2 -m2 -b1 > topictest.log 2>&1 || { - echo $0 FAILED: - cat topictest.log - exit 1 -} -rm topictest.log +port1 = start_broker("broker1") +port2 = start_broker("broker2") + +call_with_valgrind("qpid-txtest --queues 4 --tx-count 10 --quiet --port {}", port1) +call_with_valgrind("qpid-txtest2 --queues 4 --tx-count 10 --quiet --port {}", port2) + +check_results() diff --git a/qpid/extras/qmf/setup.py b/qpid/cpp/src/tests/run_unit_tests index e48899e5c7..8e81fe73a0 100755 --- a/qpid/extras/qmf/setup.py +++ b/qpid/cpp/src/tests/run_unit_tests @@ -1,4 +1,5 @@ #!/usr/bin/env python + # # Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file @@ -7,9 +8,9 @@ # 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 @@ -17,14 +18,22 @@ # specific language governing permissions and limitations # under the License. # -from distutils.core import setup -setup(name="qpid-qmf", - version="0.35", - author="Apache Qpid", - author_email="dev@qpid.apache.org", - packages=["qmf"], - package_dir={"": "src/py"}, - url="http://qpid.apache.org/", - license="Apache Software License", - description="QMF Library") +from common import * + +# Options for boost test framework + +if "BOOST_TEST_SHOW_PROGRESS" not in ENV: + ENV["BOOST_TEST_SHOW_PROGRESS"] = "yes" + +if "BOOST_TEST_CATCH_SYSTEM_ERRORS" not in ENV: + ENV["BOOST_TEST_CATCH_SYSTEM_ERRORS"] = "no" + +if WINDOWS: + ENV["QPID_SSL_CERT_STORE_LOCATION"] = "LocalMachine" + ENV["QPID_SSL_CERT_NAME"] = "localhost" + ENV["QPID_SSL_PORT"] = "0" + +call_with_valgrind("unit_test") + +check_results() diff --git a/qpid/cpp/src/tests/sasl_fed b/qpid/cpp/src/tests/sasl_fed index 38ef43f56f..8491d428be 100755 --- a/qpid/cpp/src/tests/sasl_fed +++ b/qpid/cpp/src/tests/sasl_fed @@ -19,69 +19,54 @@ # under the License. # -# This minimum value corresponds to sasl version 2.1.22 -minimum_sasl_version=131350 +set -eu -sasl_version=`$QPID_TEST_EXEC_DIR/sasl_version` - -# This test is necessary becasue this sasl version is the first one that permits -# redirection of the sasl config file path. -if [ "$sasl_version" -lt "$minimum_sasl_version" ]; then - echo "sasl_fed: must have sasl version 2.1.22 or greater. ( Integer value: $minimum_sasl_version ) Version is: $sasl_version" - exit 0 -fi - -# In a distribution, the python tools will be absent. -if [ ! -f $QPID_CONFIG_EXEC ] || [ ! -f $QPID_ROUTE_EXEC ] ; then - echo "python tools absent - skipping sasl_fed." - exit 0 -fi +WORK_DIR=$WORK_DIR/sasl_fed +mkdir $WORK_DIR +sasl_config_dir=$BUILD_DIR/src/tests/sasl_config -sasl_config_file=$QPID_TEST_EXEC_DIR/sasl_config +# Create ACL file to allow links +echo acl allow all all > $WORK_DIR/sasl_fed.acl -my_random_number=$RANDOM -tmp_root=/tmp/sasl_fed_$my_random_number -mkdir -p $tmp_root +echo "Starting broker 1" -# create ACL file to allow links -echo acl allow all all > $tmp_root/sasl_fed.acl - - -#-------------------------------------------------- -#echo " Starting broker 1" -#-------------------------------------------------- -$QPIDD_EXEC \ +qpidd \ -p 0 --interface 127.0.0.1 \ - --data-dir $tmp_root/data_1 \ + --data-dir $WORK_DIR/data_1 \ --auth=yes \ --mgmt-enable=yes \ --log-enable info+ \ --log-source yes \ - --log-to-file $tmp_root/qpidd_1.log \ - --sasl-config=$sasl_config_file \ - --acl-file $tmp_root/sasl_fed.acl \ - -d > $tmp_root/broker_1_port + --log-to-file $WORK_DIR/qpidd_1.log \ + --sasl-config=$sasl_config_dir \ + --acl-file $WORK_DIR/sasl_fed.acl \ + -d > $WORK_DIR/broker_1_port -broker_1_port=`cat $tmp_root/broker_1_port` +broker_1_port=$(cat $WORK_DIR/broker_1_port) +echo "Starting broker 2" -#-------------------------------------------------- -#echo " Starting broker 2" -#-------------------------------------------------- -$QPIDD_EXEC \ +qpidd \ -p 0 --interface 127.0.0.1 \ - --data-dir $tmp_root/data_2 \ + --data-dir $WORK_DIR/data_2 \ --auth=yes \ --mgmt-enable=yes \ --log-enable info+ \ --log-source yes \ - --log-to-file $tmp_root/qpidd_2.log \ - --sasl-config=$sasl_config_file \ - --acl-file $tmp_root/sasl_fed.acl \ - -d > $tmp_root/broker_2_port + --log-to-file $WORK_DIR/qpidd_2.log \ + --sasl-config=$sasl_config_dir \ + --acl-file $WORK_DIR/sasl_fed.acl \ + -d > $WORK_DIR/broker_2_port + +broker_2_port=$(cat $WORK_DIR/broker_2_port) + +function stop_brokers { + qpidd --port $broker_1_port --quit + qpidd --port $broker_2_port --quit +} -broker_2_port=`cat $tmp_root/broker_2_port` +trap stop_brokers EXIT sleep 2 @@ -90,80 +75,48 @@ QUEUE_NAME=sasl_fed_queue ROUTING_KEY=sasl_fed_queue EXCHANGE_NAME=sasl_fedex -#-------------------------------------------------- -#echo " add exchanges" -#-------------------------------------------------- -$QPID_CONFIG_EXEC -b localhost:$broker_1_port add exchange direct $EXCHANGE_NAME -$QPID_CONFIG_EXEC -b localhost:$broker_2_port add exchange direct $EXCHANGE_NAME +echo "Adding exchanges" +qpid-config -b localhost:$broker_1_port add exchange direct $EXCHANGE_NAME +qpid-config -b localhost:$broker_2_port add exchange direct $EXCHANGE_NAME -#-------------------------------------------------- -#echo " add queues" -#-------------------------------------------------- -$QPID_CONFIG_EXEC -b localhost:$broker_1_port add queue $QUEUE_NAME -$QPID_CONFIG_EXEC -b localhost:$broker_2_port add queue $QUEUE_NAME +echo "Adding queues" + +qpid-config -b localhost:$broker_1_port add queue $QUEUE_NAME +qpid-config -b localhost:$broker_2_port add queue $QUEUE_NAME sleep 5 -#-------------------------------------------------- -#echo " create bindings" -#-------------------------------------------------- -$QPID_CONFIG_EXEC -b localhost:$broker_1_port bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY -$QPID_CONFIG_EXEC -b localhost:$broker_2_port bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY +echo "Creating bindings" + +qpid-config -b localhost:$broker_1_port bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY +qpid-config -b localhost:$broker_2_port bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY sleep 5 +echo "Adding routes" -#-------------------------------------------------- -#echo " qpid-route route add" -#-------------------------------------------------- -$QPID_ROUTE_EXEC route add zag/zag@localhost:$broker_2_port zag/zag@localhost:$broker_1_port $EXCHANGE_NAME $ROUTING_KEY "" "" DIGEST-MD5 +qpid-route route add zag/zag@localhost:$broker_2_port zag/zag@localhost:$broker_1_port $EXCHANGE_NAME $ROUTING_KEY "" "" DIGEST-MD5 sleep 5 - n_messages=100 -#-------------------------------------------------- -#echo " Sending 100 messages to $broker_1_port " -#-------------------------------------------------- -$QPID_TEST_EXEC_DIR/datagen --count $n_messages | $SENDER_EXEC --mechanism DIGEST-MD5 --username zag --password zag --exchange $EXCHANGE_NAME --routing-key $ROUTING_KEY --port $broker_1_port -sleep 5 +echo "Sending 100 messages to $broker_1_port " -#-------------------------------------------------- -#echo " Examine Broker $broker_1_port" -#-------------------------------------------------- -broker_1_message_count=`$PYTHON_COMMANDS/qpid-stat -q -b localhost:$broker_1_port | grep sasl_fed_queue | awk '{print $2}'` -#echo " " - -#-------------------------------------------------- -#echo " Examine Broker $broker_2_port" -#-------------------------------------------------- -broker_2_message_count=`$PYTHON_COMMANDS/qpid-stat -q -b localhost:$broker_2_port | grep sasl_fed_queue | awk '{print $2}'` -#echo " " - -#-------------------------------------------------- -#echo " Asking brokers to quit." -#-------------------------------------------------- -$QPIDD_EXEC --port $broker_1_port --quit -$QPIDD_EXEC --port $broker_2_port --quit - - -#-------------------------------------------------- -#echo "Removing temporary directory $tmp_root" -#-------------------------------------------------- -rm -rf $tmp_root - -if [ "$broker_2_message_count" -eq "$n_messages" ]; then - # echo "good: |$broker_2_message_count| == |$n_messages|" - exit 0 -else - # echo "not ideal: |$broker_1_message_count| != |$n_messages|" - exit 1 -fi +datagen --count $n_messages | sender --mechanism DIGEST-MD5 --username zag --password zag --exchange $EXCHANGE_NAME --routing-key $ROUTING_KEY --port $broker_1_port +sleep 5 +echo "Examining Broker $broker_1_port" +broker_1_message_count=$(qpid-stat -q -b localhost:$broker_1_port | grep sasl_fed_queue | awk '{print $2}') +echo "Examining Broker $broker_2_port" +broker_2_message_count=$(qpid-stat -q -b localhost:$broker_2_port | grep sasl_fed_queue | awk '{print $2}') +if (( $broker_2_message_count != $n_messages )); then + echo "Expected ${n_messages} and received ${broker_2_message_count}" + exit 1 +fi diff --git a/qpid/cpp/src/tests/sasl_fed_ex b/qpid/cpp/src/tests/sasl_fed_ex index e2ee37ba39..bf62be95df 100755 --- a/qpid/cpp/src/tests/sasl_fed_ex +++ b/qpid/cpp/src/tests/sasl_fed_ex @@ -25,86 +25,47 @@ # transport-layer security. #=============================================================================== -source $QPID_TEST_COMMON +set -eu -ensure_python_tests - -script_name=`basename $0` - -if [ $# -lt 1 ] || [ $# -gt 2 ] -then - echo - # These are the four different ways of creating links ( or routes+links ) - # that the qpid-route command provides. - echo "Usage: ${script_name} dynamic|link|queue|route" - echo - exit 1 +if (( $# != 1 )); then + # These are the four different ways of creating links ( or routes+links ) + # that the qpid-route command provides. + echo "Usage: $(basename $0) dynamic|link|queue|route" + exit 1 fi qpid_route_method=$1 -# Debugging print. -------------------------- -debug= -function print { - if [ "$debug" ]; then - echo "${script_name}: $1" - fi -} - -print "=========== start sasl_fed_ex $* ============" - +WORK_DIR="${WORK_DIR}/sasl_fed_ex_${qpid_route_method}" +mkdir $WORK_DIR - -# This minimum value corresponds to sasl version 2.1.22 -minimum_sasl_version=131350 - -sasl_version=`$QPID_TEST_EXEC_DIR/sasl_version` - -# This test is necessary because this sasl version is the first one that permits -# redirection of the sasl config file path. -if [ "$sasl_version" -lt "$minimum_sasl_version" ]; then - echo "sasl_fed: must have sasl version 2.1.22 or greater. ( Integer value: $minimum_sasl_version ) Version is: $sasl_version" - exit 0 -fi - -CERT_DIR=`pwd`/test_cert_db -CERT_PW_FILE=`pwd`/cert.password +CERT_DIR=$WORK_DIR/test_cert_db +CERT_PW_FILE=$WORK_DIR/cert.password TEST_HOSTNAME=127.0.0.1 create_certs() { - #create certificate and key databases with single, simple, self-signed certificate in it + # Create certificate and key databases with single, simple, + # self-signed certificate in it mkdir ${CERT_DIR} certutil -N -d ${CERT_DIR} -f ${CERT_PW_FILE} certutil -S -d ${CERT_DIR} -n ${TEST_HOSTNAME} -s "CN=${TEST_HOSTNAME}" -t "CT,," -x -f ${CERT_PW_FILE} -z /bin/sh 2> /dev/null } -delete_certs() { - if [[ -e ${CERT_DIR} ]] ; then - print "removing cert dir ${CERT_DIR}" - rm -rf ${CERT_DIR} - fi -} - - CERTUTIL=$(type -p certutil) -if [[ !(-x $CERTUTIL) ]] ; then - echo "No certutil, skipping ssl test"; - exit 0; + +if [[ ! -x $CERTUTIL ]]; then + echo "No certutil, skipping ssl test" + exit 0 fi -delete_certs create_certs 2> /dev/null -if [ ! $? ]; then - error "Could not create test certificate" - exit 1 -fi -sasl_config_dir=$QPID_TEST_EXEC_DIR/sasl_config +if (( $? != 0 )); then + echo "Could not create test certificate" + exit 1 +fi -tmp_root=$QPID_TEST_EXEC_DIR/sasl_fed_ex_temp -print "results dir is ${tmp_root}" -rm -rf ${tmp_root} -mkdir -p $tmp_root +sasl_config_dir=$BUILD_DIR/src/tests/sasl_config SRC_SSL_PORT=6667 DST_SSL_PORT=6666 @@ -125,8 +86,6 @@ export QPID_SSL_CERT_DB=${CERT_DIR} export QPID_SSL_CERT_PASSWORD_FILE=${CERT_PW_FILE} export QPID_SSL_CERT_NAME=${TEST_HOSTNAME} - - ####################################### # Understanding this Plumbing ####################################### @@ -146,7 +105,7 @@ export QPID_SSL_CERT_NAME=${TEST_HOSTNAME} COMMON_BROKER_OPTIONS=" \ --ssl-sasl-no-dict \ - --sasl-config=$sasl_config_dir \ + --sasl-config $sasl_config_dir \ --ssl-require-client-authentication \ --auth yes \ --ssl-cert-db $CERT_DIR \ @@ -154,130 +113,111 @@ COMMON_BROKER_OPTIONS=" \ --ssl-cert-name $TEST_HOSTNAME \ --no-data-dir \ --no-module-dir \ - --mgmt-enable=yes \ + --mgmt-enable yes \ --log-enable info+ \ --log-source yes \ - --daemon " + --daemon" - function start_brokers { # vanilla brokers -------------------------------- - print "Starting SRC broker" - $QPIDD_EXEC \ + echo "Starting SRC broker" + qpidd \ --port=${SRC_TCP_PORT} \ --ssl-port ${SRC_SSL_PORT} \ ${COMMON_BROKER_OPTIONS} \ - --log-to-file $tmp_root/qpidd_src.log 2> /dev/null + --log-to-file $WORK_DIR/qpidd_src.log 2> /dev/null broker_ports[0]=${SRC_TCP_PORT} - print "Starting DST broker" - $QPIDD_EXEC \ + echo "Starting DST broker" + qpidd \ --port=${DST_TCP_PORT} \ --ssl-port ${DST_SSL_PORT} \ ${COMMON_BROKER_OPTIONS} \ - --log-to-file $tmp_root/qpidd_dst.log 2> /dev/null + --log-to-file $WORK_DIR/qpidd_dst.log 2> /dev/null broker_ports[1]=${DST_TCP_PORT} } function halt_brokers { - n_brokers=${#broker_ports[@]} - print "Halting ${n_brokers} brokers." - for i in $(seq 0 $((${n_brokers} - 1))) - do - halt_port=${broker_ports[$i]} - print "Halting broker $i on port ${halt_port}" - $QPIDD_EXEC --port ${halt_port} --quit - done - + n_brokers=${#broker_ports[@]} + echo "Halting ${n_brokers} brokers" + for i in $(seq 0 $((${n_brokers} - 1))); do + halt_port=${broker_ports[$i]} + echo "Halting broker $i on port ${halt_port}" + qpidd --port ${halt_port} --quit + done } - start_brokers - +trap halt_brokers EXIT # I am not randomizing these names, because this test creates its own brokers. QUEUE_NAME=sasl_fed_queue ROUTING_KEY=sasl_fed_queue EXCHANGE_NAME=sasl_fedex +echo "Add exchanges" +qpid-config -b localhost:${SRC_TCP_PORT} add exchange direct $EXCHANGE_NAME +qpid-config -b localhost:${DST_TCP_PORT} add exchange direct $EXCHANGE_NAME -print "add exchanges" -$QPID_CONFIG_EXEC -b localhost:${SRC_TCP_PORT} add exchange direct $EXCHANGE_NAME -$QPID_CONFIG_EXEC -b localhost:${DST_TCP_PORT} add exchange direct $EXCHANGE_NAME - - -print "add queues" -$QPID_CONFIG_EXEC -b localhost:${SRC_TCP_PORT} add queue $QUEUE_NAME -$QPID_CONFIG_EXEC -b localhost:${DST_TCP_PORT} add queue $QUEUE_NAME - - -print "create bindings" -$QPID_CONFIG_EXEC -b localhost:${SRC_TCP_PORT} bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY -$QPID_CONFIG_EXEC -b localhost:${DST_TCP_PORT} bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY +echo "Add queues" +qpid-config -b localhost:${SRC_TCP_PORT} add queue $QUEUE_NAME +qpid-config -b localhost:${DST_TCP_PORT} add queue $QUEUE_NAME +echo "Create bindings" +qpid-config -b localhost:${SRC_TCP_PORT} bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY +qpid-config -b localhost:${DST_TCP_PORT} bind $EXCHANGE_NAME $QUEUE_NAME $ROUTING_KEY # # NOTE: The SRC broker *must* be referred to as $TEST_HOSTNAME, and not as "localhost". # It must be referred to by the exact string given as the Common Name (CN) in the cert, # which was created in the function create_certs, above. - - #---------------------------------------------------------------- # Use qpid-route to create the link, or the link+route, depending # on which of its several methods was requested. #---------------------------------------------------------------- -if [ ${qpid_route_method} == "dynamic" ]; then - print "dynamic add" - $QPID_ROUTE_EXEC -t ssl dynamic add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME "" "" EXTERNAL -elif [ ${qpid_route_method} == "link" ]; then - print "link add" - $QPID_ROUTE_EXEC -t ssl link add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} EXTERNAL -elif [ ${qpid_route_method} == "queue" ]; then - print "queue add" - $QPID_ROUTE_EXEC -t ssl queue add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME $ROUTING_KEY EXTERNAL -elif [ ${qpid_route_method} == "route" ]; then - print "route add" - $QPID_ROUTE_EXEC -t ssl route add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME $ROUTING_KEY "" "" EXTERNAL +if [[ $qpid_route_method == "dynamic" ]]; then + echo "Dynamic add" + qpid-route -t ssl dynamic add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME "" "" EXTERNAL || : +elif [[ $qpid_route_method == "link" ]]; then + echo "Link add" + qpid-route -t ssl link add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} EXTERNAL || : +elif [[ $qpid_route_method == "queue" ]]; then + echo "Queue add" + qpid-route -t ssl queue add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME $ROUTING_KEY EXTERNAL || : +elif [[ $qpid_route_method == "route" ]]; then + echo "Route add" + qpid-route -t ssl route add localhost:${DST_TCP_PORT} $TEST_HOSTNAME:${SRC_SSL_PORT} $EXCHANGE_NAME $ROUTING_KEY "" "" EXTERNAL || : else - echo "unknown method: |${qpid_route_method}|" - echo " choices are: dynamic|link|queue|route " - halt_brokers - exit 1 + echo "Unknown method: |${qpid_route_method}|" + echo "Choices are: dynamic|link|queue|route " + halt_brokers + exit 1 fi - # I don't know how to avoid this sleep yet. It has to come after route-creation # to avoid false negatives. sleep 5 # Look only at the transport field, which should be "ssl". -print "check the link" -link_status=$($QPID_ROUTE_EXEC link list localhost:${DST_TCP_PORT} | tail -1 | awk '{print $3}') - -halt_brokers +echo "Check the link" +link_status=$(qpid-route link list localhost:${DST_TCP_PORT} | tail -1 | awk '{print $3}') sleep 1 -if [ ! ${link_status} ]; then - print "link_status is empty" - print "result: fail" - exit 2 +if [[ ! $link_status ]]; then + echo "Link status is empty" + echo "Result: fail" + exit 2 fi -if [ ${link_status} == "ssl" ]; then - print "result: good" - # Only remove the tmp_root on success, to permit debugging. - print "Removing temporary directory $tmp_root" - rm -rf $tmp_root - exit 0 +if [[ $link_status == "ssl" ]]; then + echo "Result: good" + exit 0 fi -print "link_status has a bad value: ${link_status}" -print "result: fail" +echo "Link status has a bad value: ${link_status}" +echo "Result: fail" exit 3 - - - diff --git a/qpid/cpp/src/tests/sasl_no_dir b/qpid/cpp/src/tests/sasl_no_dir index b2f5d1668e..30d8434079 100755 --- a/qpid/cpp/src/tests/sasl_no_dir +++ b/qpid/cpp/src/tests/sasl_no_dir @@ -19,88 +19,40 @@ # under the License. # -script_name=`basename $0` +set -eu -# This minimum value corresponds to sasl version 2.1.22 -minimum_sasl_version=131350 +sasl_config_dir=$BUILD_DIR/not_there_at_all -sasl_version=$($QPID_TEST_EXEC_DIR/sasl_version) - -# This test is necessary because this sasl version is the first one that permits -# redirection of the sasl config file path. -if [ "$sasl_version" -lt "$minimum_sasl_version" ]; then - echo "sasl_fed: must have sasl version 2.1.22 or greater. ( Integer value: $minimum_sasl_version ) Version is: $sasl_version" - exit 0 -fi - - -sasl_config_dir=$QPID_TEST_EXEC_DIR/sasl_config - - -# Debugging print. -------------------------- -debug= -function print { - if [ "$debug" ]; then - echo "${script_name}: $1" - fi -} - - -my_random_number=$RANDOM -tmp_root=/tmp/sasl_fed_$my_random_number -mkdir -p $tmp_root - - -LOG_FILE=$tmp_root/qpidd.log - -# If you want to see this test fail, just comment out this 'mv' command. -print "Moving sasl configuration dir." -mv ${sasl_config_dir} ${sasl_config_dir}- - - -#-------------------------------------------------- -print " Starting broker" -#-------------------------------------------------- -$QPIDD_EXEC \ - -p 0 --interface 127.0.0.1 \ - --no-data-dir \ - --auth=yes \ - --mgmt-enable=yes \ - --log-enable info+ \ - --log-source yes \ - --log-to-file ${LOG_FILE} \ - --sasl-config=$sasl_config_dir \ - -d 2> /dev/null 1> $tmp_root/broker_port +WORK_DIR=$WORK_DIR/sasl_no_dir +mkdir $WORK_DIR +LOG_FILE=$WORK_DIR/qpidd.log +echo "Starting broker" +qpidd \ + -p 0 --interface 127.0.0.1 \ + --no-data-dir \ + --auth=yes \ + --mgmt-enable=yes \ + --log-enable info+ \ + --log-source yes \ + --log-to-file ${LOG_FILE} \ + --sasl-config=$sasl_config_dir \ + -d 2> /dev/null 1> $WORK_DIR/broker_port || : # If it works right, the output will look something like this: ( two lines long ) # Daemon startup failed: SASL: sasl_set_path failed: no such directory: /home/mick/trunk/qpid/cpp/src/tests/sasl_config (qpid/broker/SaslAuthenticator.cpp:112) # 2011-10-13 14:07:00 critical qpidd.cpp:83: Unexpected error: Daemon startup failed: SASL: sasl_set_path failed: no such directory: /home/mick/trunk/qpid/cpp/src/tests/sasl_config (qpid/broker/SaslAuthenticator.cpp:112) -result=`cat ${LOG_FILE} | grep "sasl_set_path failed: no such directory" | wc -l ` - -#-------------------------------------------------- -print "Restore the Sasl config dir to its original place." -#-------------------------------------------------- -mv ${sasl_config_dir}- ${sasl_config_dir} +result=$(cat ${LOG_FILE} | grep "sasl_set_path failed: no such directory" | wc -l) -if [ "2" -eq ${result} ]; then - print "result: success" - rm -rf $tmp_root - exit 0 +if (( $result == 2 )); then + echo "Result: success" + exit 0 fi +broker_port=$(cat $WORK_DIR/broker_port) +qpidd --port ${broker_port} --quit -# If this test fails, the broker is still alive. -# Kill it. -broker_port=`cat $tmp_root/broker_port` -#-------------------------------------------------- -print "Asking broker to quit." -#-------------------------------------------------- -$QPIDD_EXEC --port $broker_port --quit - -rm -rf $tmp_root - -print "result: fail" +echo "Result: fail" exit 1 diff --git a/qpid/cpp/src/tests/sasl_test_setup.sh b/qpid/cpp/src/tests/sasl_test_setup.sh index d41efbe6e5..1416759da7 100755 --- a/qpid/cpp/src/tests/sasl_test_setup.sh +++ b/qpid/cpp/src/tests/sasl_test_setup.sh @@ -18,9 +18,10 @@ # specific language governing permissions and limitations # under the License. # -source ./test_env.sh -test -x $SASL_PW || { echo Skipping SASL test, saslpasswd2 not found; exit 0; } +source env.sh + +test -x $SASLPASSWD2 || { echo Skipping SASL test, saslpasswd2 not found; exit 0; } mkdir -p sasl_config @@ -36,7 +37,7 @@ EOF # Populate temporary sasl db. SASLTEST_DB=./sasl_config/qpidd.sasldb rm -f $SASLTEST_DB -echo guest | $SASL_PW -c -p -f $SASLTEST_DB -u QPID guest -echo zig | $SASL_PW -c -p -f $SASLTEST_DB -u QPID zig -echo zag | $SASL_PW -c -p -f $SASLTEST_DB -u QPID zag +echo guest | $SASLPASSWD2 -c -p -f $SASLTEST_DB -u QPID guest +echo zig | $SASLPASSWD2 -c -p -f $SASLTEST_DB -u QPID zig +echo zag | $SASLPASSWD2 -c -p -f $SASLTEST_DB -u QPID zag diff --git a/qpid/cpp/src/tests/shared_perftest b/qpid/cpp/src/tests/shared_perftest deleted file mode 100755 index 709ffd56b5..0000000000 --- a/qpid/cpp/src/tests/shared_perftest +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env 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. -# - -exec `dirname $0`/run_perftest 100000 --mode shared --npubs 16 --nsubs 16 diff --git a/qpid/cpp/src/tests/ssl_test b/qpid/cpp/src/tests/ssl_test index 46068afefb..7c85087ad1 100755 --- a/qpid/cpp/src/tests/ssl_test +++ b/qpid/cpp/src/tests/ssl_test @@ -21,9 +21,11 @@ # Run a simple test over SSL +source env.sh + #set -x -CONFIG=$(dirname $0)/config.null +CONFIG=$(dirname $0)/qpidd-empty.conf TEST_CERT_DIR=`pwd`/test_cert_dir CERT_DB=${TEST_CERT_DIR}/test_cert_db CERT_PW_FILE=`pwd`/cert.password @@ -32,7 +34,7 @@ TEST_CLIENT_CERT=rumplestiltskin CA_PEM_FILE=${TEST_CERT_DIR}/ca_cert.pem OTHER_CA_CERT_DB=${TEST_CERT_DIR}/x_ca_cert_db OTHER_CA_PEM_FILE=${TEST_CERT_DIR}/other_ca_cert.pem -PY_PING_BROKER=${QPID_TEST_SRC_DIR}/ping_broker +PY_PING_BROKER=$SOURCE_DIR/src/tests/ping_broker COUNT=10 if [[ -a $AMQP_LIB ]] ; then @@ -93,7 +95,7 @@ delete_certs() { fi } -# Don't need --no-module-dir or --no-data-dir as they are set as env vars in test_env.sh +# Don't need --no-module-dir or --no-data-dir as they are set as env vars in env.sh COMMON_OPTS="--daemon --config $CONFIG --ssl-cert-db $CERT_DB --ssl-cert-password-file $CERT_PW_FILE --ssl-cert-name $TEST_HOSTNAME" # Start new brokers: @@ -103,7 +105,7 @@ COMMON_OPTS="--daemon --config $CONFIG --ssl-cert-db $CERT_DB --ssl-cert-passwor start_brokers() { local -a ports for (( i=0; $i<$1; i++)) do - ports[$i]=$($QPIDD_EXEC --port 0 --interface 127.0.0.1 $COMMON_OPTS $2) || error "Could not start broker $i" + ports[$i]=$(qpidd --port 0 --interface 127.0.0.1 $COMMON_OPTS $2) || error "Could not start broker $i" done PORTS=( ${PORTS[@]} ${ports[@]} ) } @@ -111,7 +113,7 @@ start_brokers() { # Stop single broker: # $1 is number of broker to stop (0 based) stop_broker() { - $QPIDD_EXEC -qp ${PORTS[$1]} + qpidd -qp ${PORTS[$1]} # Remove from ports array unset PORTS[$1] @@ -120,15 +122,15 @@ stop_broker() { stop_brokers() { for port in "${PORTS[@]}"; do - $QPIDD_EXEC -qp $port + qpidd -qp $port done PORTS=() } pick_port() { # We need a fixed port to set --cluster-url. Use qpidd to pick a free port. - PICK=`../qpidd --no-module-dir --listen-disable ssl -dp0` - ../qpidd --no-module-dir -qp $PICK + PICK=`qpidd --no-module-dir --listen-disable ssl -dp0` + qpidd --no-module-dir -qp $PICK echo $PICK } @@ -143,11 +145,11 @@ start_ssl_broker() { } start_ssl_mux_broker() { - ../qpidd $COMMON_OPTS --port $1 --ssl-port $1 --auth no + qpidd $COMMON_OPTS --port $1 --ssl-port $1 --auth no PORTS=( ${PORTS[@]} $1 ) } -sasl_config_dir=$QPID_TEST_EXEC_DIR/sasl_config +sasl_config_dir=$BUILD_DIR/src/tests/sasl_config start_authenticating_broker() { start_brokers 1 "--transport ssl --ssl-port 0 --require-encryption --ssl-sasl-no-dict --ssl-require-client-authentication --auth yes --sasl-config=${sasl_config_dir} $MODULES" @@ -180,25 +182,25 @@ export QPID_SSL_CERT_DB=${CERT_DB} export QPID_SSL_CERT_PASSWORD_FILE=${CERT_PW_FILE} ## Test connection via connection settings -./qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary +qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary ## Test connection with a URL URL=amqp:ssl:$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` +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; } if [[ -a $AMQP_LIB ]] ; then echo "Testing ssl over AMQP 1.0" - ./qpid-send --connection-options '{protocol:amqp1.0}' -b $URL --content-string=hello -a "foo;{create:always}" - MSG=`./qpid-receive --connection-options '{protocol:amqp1.0}' -b $URL -a "foo;{create:always}" --messages 1` + qpid-send --connection-options '{protocol:amqp1.0}' -b $URL --content-string=hello -a "foo;{create:always}" + MSG=`qpid-receive --connection-options '{protocol:amqp1.0}' -b $URL -a "foo;{create:always}" --messages 1` test "$MSG" = "hello" || { echo "receive failed for AMQP 1.0 '$MSG' != 'hello'"; exit 1; } fi ## Test connection with a combination of URL and connection options (in messaging API) URL=$TEST_HOSTNAME:$PORT -./qpid-send -b $URL --connection-options '{transport:ssl,heartbeat:2}' --content-string='hello again' -a "foo;{create:always}" -MSG=`./qpid-receive -b $URL --connection-options '{transport:ssl,heartbeat:2}' -a "foo;{create:always}" --messages 1` +qpid-send -b $URL --connection-options '{transport:ssl,heartbeat:2}' --content-string='hello again' -a "foo;{create:always}" +MSG=`qpid-receive -b $URL --connection-options '{transport:ssl,heartbeat:2}' -a "foo;{create:always}" --messages 1` test "$MSG" = "hello again" || { echo "receive failed '$MSG' != 'hello again'"; exit 1; } ## Test using the Python client @@ -218,14 +220,14 @@ echo "Running SSL client authentication test on port $PORT2" URL=amqp:ssl:$TEST_HOSTNAME:$PORT2 ## See if you can set the SSL cert-name for the connection -./qpid-send -b $URL --connection-options "{ssl-cert-name: $TEST_CLIENT_CERT }" --content-string=hello -a "bar;{create:always}" -MSG2=`./qpid-receive -b $URL --connection-options "{ssl-cert-name: $TEST_CLIENT_CERT }" -a "bar;{create:always}" --messages 1` +qpid-send -b $URL --connection-options "{ssl-cert-name: $TEST_CLIENT_CERT }" --content-string=hello -a "bar;{create:always}" +MSG2=`qpid-receive -b $URL --connection-options "{ssl-cert-name: $TEST_CLIENT_CERT }" -a "bar;{create:always}" --messages 1` test "$MSG2" = "hello" || { echo "receive failed '$MSG2' != 'hello'"; exit 1; } ## Make sure that connect fails with an invalid SSL cert-name -./qpid-send -b $URL --connection-options "{ssl-cert-name: pignose }" --content-string=hello -a "baz;{create:always}" 2>/dev/null 1>/dev/null -MSG3=`./qpid-receive -b $URL --connection-options "{ssl-cert-name: pignose }" -a "baz;{create:always}" --messages 1 2>/dev/null` +qpid-send -b $URL --connection-options "{ssl-cert-name: pignose }" --content-string=hello -a "baz;{create:always}" 2>/dev/null 1>/dev/null +MSG3=`qpid-receive -b $URL --connection-options "{ssl-cert-name: pignose }" -a "baz;{create:always}" --messages 1 2>/dev/null` test "$MSG3" = "" || { echo "receive succeeded without valid ssl cert '$MSG3' != ''"; exit 1; } ## Set the userid in the message to the authenticated username @@ -243,8 +245,8 @@ start_ssl_mux_broker $PORT || error "Could not start broker" echo "Running SSL/TCP mux test on fixed port $PORT" ## Test connection via connection settings -./qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary || error "SSL connection failed!" -./qpid-perftest --count ${COUNT} --port ${PORT} -P tcp -b $TEST_HOSTNAME --summary || error "TCP connection failed!" +qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary || error "SSL connection failed!" +qpid-perftest --count ${COUNT} --port ${PORT} -P tcp -b $TEST_HOSTNAME --summary || error "TCP connection failed!" # Test a broker chosen port - since ssl chooses port need to use --transport ssl here start_ssl_broker @@ -252,8 +254,8 @@ PORT=${PORTS[0]} echo "Running SSL/TCP mux test on random port $PORT" ## Test connection via connection settings -./qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary || error "SSL connection failed!" -./qpid-perftest --count ${COUNT} --port ${PORT} -P tcp -b $TEST_HOSTNAME --summary || error "TCP connection failed!" +qpid-perftest --count ${COUNT} --port ${PORT} -P ssl -b $TEST_HOSTNAME --summary || error "SSL connection failed!" +qpid-perftest --count ${COUNT} --port ${PORT} -P tcp -b $TEST_HOSTNAME --summary || error "TCP connection failed!" stop_brokers @@ -271,67 +273,63 @@ if [[ !(-x $OPENSSL) ]] ; then exit 0 fi -if test -d $PYTHON_DIR; then ## verify python version > 2.5 (only 2.6+ does certificate checking) - PY_VERSION=$(python -c "import sys; print hex(sys.hexversion)") - if (( PY_VERSION < 0x02060000 )); then - echo >&2 "Detected python version < 2.6 - skipping certificate verification tests" - exit 0 - fi +PY_VERSION=$(python -c "import sys; print hex(sys.hexversion)") +if (( PY_VERSION < 0x02060000 )); then + echo >&2 "Detected python version < 2.6 - skipping certificate verification tests" + exit 0 +fi - echo "Testing Certificate validation and Authentication with the Python Client..." +echo "Testing Certificate validation and Authentication with the Python Client..." # extract the CA's certificate as a PEM file - get_ca_certs() { - $PK12UTIL -o ${TEST_CERT_DIR}/CA_pk12.out -d ${CERT_DB} -n "Test-CA" -w ${CERT_PW_FILE} -k ${CERT_PW_FILE} > /dev/null - $OPENSSL pkcs12 -in ${TEST_CERT_DIR}/CA_pk12.out -out ${CA_PEM_FILE} -nokeys -passin file:${CERT_PW_FILE} >/dev/null - $PK12UTIL -o ${TEST_CERT_DIR}/other_CA_pk12.out -d ${OTHER_CA_CERT_DB} -n "Other-Test-CA" -w ${CERT_PW_FILE} -k ${CERT_PW_FILE} > /dev/null - $OPENSSL pkcs12 -in ${TEST_CERT_DIR}/other_CA_pk12.out -out ${OTHER_CA_PEM_FILE} -nokeys -passin file:${CERT_PW_FILE} >/dev/null - } +get_ca_certs() { + $PK12UTIL -o ${TEST_CERT_DIR}/CA_pk12.out -d ${CERT_DB} -n "Test-CA" -w ${CERT_PW_FILE} -k ${CERT_PW_FILE} > /dev/null + $OPENSSL pkcs12 -in ${TEST_CERT_DIR}/CA_pk12.out -out ${CA_PEM_FILE} -nokeys -passin file:${CERT_PW_FILE} >/dev/null + $PK12UTIL -o ${TEST_CERT_DIR}/other_CA_pk12.out -d ${OTHER_CA_CERT_DB} -n "Other-Test-CA" -w ${CERT_PW_FILE} -k ${CERT_PW_FILE} > /dev/null + $OPENSSL pkcs12 -in ${TEST_CERT_DIR}/other_CA_pk12.out -out ${OTHER_CA_PEM_FILE} -nokeys -passin file:${CERT_PW_FILE} >/dev/null +} +get_ca_certs || error "Could not extract CA certificates as PEM files" +start_ssl_broker +PORT=${PORTS[0]} +URL=amqps://$TEST_HOSTNAME:$PORT +# verify the python client can authenticate the broker using the CA +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi +# verify the python client fails to authenticate the broker when using the other CA +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${OTHER_CA_PEM_FILE} > /dev/null 2>&1`; then { echo " Failed"; exit 1; }; else echo " Passed"; fi +stop_brokers + +# create a certificate without matching TEST_HOSTNAME, should fail to verify + +create_certs "O=MyCo" "*.${TEST_HOSTNAME}.com" || error "Could not create server test certificate" +get_ca_certs || error "Could not extract CA certificates as PEM files" +start_ssl_broker +PORT=${PORTS[0]} +URL=amqps://$TEST_HOSTNAME:$PORT +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE} > /dev/null 2>&1`; then { echo " Failed"; exit 1; }; else echo " Passed"; fi +# but disabling the check for the hostname should pass +if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE} --ssl-skip-hostname-check`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi +stop_brokers + +# test SubjectAltName parsing + +if (( PY_VERSION >= 0x02070300 )); then +# python 2.7.3+ supports SubjectAltName extraction +# create a certificate with TEST_HOSTNAME only in SAN, should verify OK + create_certs "O=MyCo" "*.foo.com,${TEST_HOSTNAME},*xyz.com" || error "Could not create server test certificate" get_ca_certs || error "Could not extract CA certificates as PEM files" start_ssl_broker PORT=${PORTS[0]} URL=amqps://$TEST_HOSTNAME:$PORT -# verify the python client can authenticate the broker using the CA if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi -# verify the python client fails to authenticate the broker when using the other CA - if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${OTHER_CA_PEM_FILE} > /dev/null 2>&1`; then { echo " Failed"; exit 1; }; else echo " Passed"; fi stop_brokers -# create a certificate without matching TEST_HOSTNAME, should fail to verify - - create_certs "O=MyCo" "*.${TEST_HOSTNAME}.com" || error "Could not create server test certificate" + create_certs "O=MyCo" "*${TEST_HOSTNAME}" || error "Could not create server test certificate" get_ca_certs || error "Could not extract CA certificates as PEM files" start_ssl_broker PORT=${PORTS[0]} URL=amqps://$TEST_HOSTNAME:$PORT - if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE} > /dev/null 2>&1`; then { echo " Failed"; exit 1; }; else echo " Passed"; fi -# but disabling the check for the hostname should pass - if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE} --ssl-skip-hostname-check`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi + if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi stop_brokers - -# test SubjectAltName parsing - - if (( PY_VERSION >= 0x02070300 )); then - # python 2.7.3+ supports SubjectAltName extraction - # create a certificate with TEST_HOSTNAME only in SAN, should verify OK - create_certs "O=MyCo" "*.foo.com,${TEST_HOSTNAME},*xyz.com" || error "Could not create server test certificate" - get_ca_certs || error "Could not extract CA certificates as PEM files" - start_ssl_broker - PORT=${PORTS[0]} - URL=amqps://$TEST_HOSTNAME:$PORT - if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi - stop_brokers - - create_certs "O=MyCo" "*${TEST_HOSTNAME}" || error "Could not create server test certificate" - get_ca_certs || error "Could not extract CA certificates as PEM files" - start_ssl_broker - PORT=${PORTS[0]} - URL=amqps://$TEST_HOSTNAME:$PORT - if `${PY_PING_BROKER} -b $URL --ssl-trustfile=${CA_PEM_FILE}`; then echo " Passed"; else { echo " Failed"; exit 1; }; fi - stop_brokers - fi - fi - diff --git a/qpid/cpp/src/tests/swig_python_tests b/qpid/cpp/src/tests/swig_python_tests deleted file mode 100755 index c28c96e839..0000000000 --- a/qpid/cpp/src/tests/swig_python_tests +++ /dev/null @@ -1,68 +0,0 @@ -#!/usr/bin/env 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 the python tests. -source $QPID_TEST_COMMON - -ensure_python_tests - -trap stop_broker INT TERM QUIT - -if [[ -a $AMQP_LIB ]] ; then - echo "Found AMQP support: $AMQP_LIB" - MODULES="--load-module $AMQP_LIB" -fi - -fail() { - echo "FAIL swigged python tests: $1"; exit 1; -} -skip() { - echo "SKIPPED swigged python tests: $1"; exit 0; -} - -start_broker() { - rm -f swig_python_tests.log - cp $srcdir/policy.acl $builddir/policy.acl - QPID_PORT=$($QPIDD_EXEC --daemon --port 0 --interface 127.0.0.1 --no-data-dir $MODULES --auth no --acl-file $builddir/policy.acl --log-to-file swig_python_tests.log) || fail "Could not start broker" -} - -stop_broker() { - $QPIDD_EXEC -q --port $QPID_PORT - rm $builddir/policy.acl -} - -test -f $PYTHONSWIGMODULE || skip "no swigged python client" -test -d $QPID_TESTS || skip "test code not found" - -start_broker -echo "Running swigged python tests using broker on port $QPID_PORT" - -export PYTHONPATH=$PYTHONPATH:$PYTHONPATH_SWIG -export QPID_USE_SWIG_CLIENT=1 -$QPID_PYTHON_TEST -m qpid.tests.messaging.message -m qpid_tests.broker_0_10.priority -m qpid_tests.broker_0_10.lvq -m qpid_tests.broker_0_10.new_api -b localhost:$QPID_PORT -I $srcdir/failing-amqp0-10-python-tests $* || FAILED=1 -if [[ -a $AMQP_LIB ]] ; then - $QPID_PYTHON_TEST --define="protocol_version=amqp1.0" --define="policy_file=$builddir/policy.acl" -m qpid_tests.broker_1_0 -m qpid_tests.broker_0_10.new_api -m assertions -m reject_release -m misc -m policies -m acl_1 -b localhost:$QPID_PORT -I $srcdir/failing-amqp1.0-python-tests $* || FAILED=1 -fi -stop_broker -if [[ $FAILED -eq 1 ]]; then - fail "" -fi - diff --git a/qpid/cpp/src/tests/test.xquery b/qpid/cpp/src/tests/test.xquery deleted file mode 100644 index 4cfe3af02d..0000000000 --- a/qpid/cpp/src/tests/test.xquery +++ /dev/null @@ -1,6 +0,0 @@ - let $w := ./weather - return $w/station = 'Raleigh-Durham International Airport (KRDU)' - and $w/temperature_f > 50 - and $w/temperature_f - $w/dewpoint > 5 - and $w/wind_speed_mph > 7 - and $w/wind_speed_mph < 20 diff --git a/qpid/cpp/src/tests/test_env.sh.in b/qpid/cpp/src/tests/test_env.sh.in deleted file mode 100644 index 1c4c117e4b..0000000000 --- a/qpid/cpp/src/tests/test_env.sh.in +++ /dev/null @@ -1,100 +0,0 @@ -# -# 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. -# - -absdir() { echo `cd $1 && pwd`; } - -# Environment variables substituted by cmake. -export srcdir=`absdir @abs_srcdir@` -export builddir=`absdir @abs_builddir@` -export top_srcdir=`absdir @abs_top_srcdir@` -export top_builddir=`absdir @abs_top_builddir@` -export moduledir=$top_builddir/src@builddir_lib_suffix@ -export pythonswigdir=$top_builddir/bindings/qpid/python/ -export pythonswiglibdir=$top_builddir/bindings/qpid/python@builddir_lib_suffix@ -export testmoduledir=$builddir@builddir_lib_suffix@ -export QPID_INSTALL_PREFIX=@prefix@ - -# Tools substituted by cmake -enable_valgrind=${enable_valgrind-@ENABLE_VALGRIND@} -if [ "$enable_valgrind" = "ON" ] ; then - export VALGRIND=@VALGRIND_EXECUTABLE@ -fi -export SASL_PW=@SASLPASSWD2_EXECUTABLE@ -export PYTHON=@PYTHON_EXECUTABLE@ - -# Python paths and directories -export PYTHON_DIR=$builddir/python -export QPID_PYTHON_TEST=$PYTHON_DIR/commands/qpid-python-test -if [ ! -d $PYTHON_DIR -a -d $top_srcdir/../python ]; then - export PYTHON_DIR=$top_srcdir/../python - export QPID_PYTHON_TEST=$PYTHON_DIR/qpid-python-test -fi -export QPID_TESTS=$top_srcdir/../tests -export QPID_TESTS_PY=$QPID_TESTS/src/py -export QPID_TOOLS=$top_srcdir/../tools -export QMF_LIB=$top_srcdir/../extras/qmf/src/py -export PYTHON_COMMANDS=$QPID_TOOLS/src/py -export PYTHONPATH_SWIG=$pythonswigdir:$pythonswiglibdir -export PYTHONPATH=$srcdir:$PYTHON_DIR:$PYTHON_COMMANDS:$QPID_TESTS_PY:$QMF_LIB:$PYTHONPATH_SWIG:$PYTHONPATH -export QPID_CONFIG_EXEC=$PYTHON_COMMANDS/qpid-config -export QPID_ROUTE_EXEC=$PYTHON_COMMANDS/qpid-route -export QPID_HA_EXEC=$PYTHON_COMMANDS/qpid-ha -export PYTHONSWIGMODULE=$pythonswigdir/qpid_messaging.py -# Executables -export QPIDD_EXEC=$top_builddir/src/qpidd - -# Test executables -export QPID_TEST_EXEC_DIR=$builddir -export QPID_TEST_SRC_DIR=$srcdir -export RECEIVER_EXEC=$QPID_TEST_EXEC_DIR/receiver -export SENDER_EXEC=$QPID_TEST_EXEC_DIR/sender - -# Path -export PATH=$top_builddir/src:$builddir:$srcdir:$PYTHON_COMMANDS:$QPID_TEST_EXEC_DIR:$PYTHON_DIR/commands:$PATH - -# Modules -export TEST_STORE_LIB=$testmoduledir/test_store.so - -exportmodule() { test -f $moduledir/$2 && eval "export $1=$moduledir/$2"; } -exportmodule HA_LIB ha.so -exportmodule XML_LIB xml.so -test "$STORE_LIB" || exportmodule STORE_LIB linearstore.so -test "$STORE_LIB" || exportmodule STORE_LIB legacystore.so -exportmodule AMQP_LIB amqp.so - -# Qpid options -export QPID_NO_MODULE_DIR=1 # Don't accidentally load installed modules -export QPID_DATA_DIR= -export QPID_CONFIG=$srcdir/qpidd-empty.conf - -# Use temporary directory if $HOME does not exist -if [ ! -e "$HOME" ]; then - export QPID_DATA_DIR=/tmp/qpid - export QPID_PID_DIR=/tmp/qpid -fi - -# Options for boost test framework -test -z "$BOOST_TEST_SHOW_PROGRESS" && export BOOST_TEST_SHOW_PROGRESS=yes -test -z "$BOOST_TEST_CATCH_SYSTEM_ERRORS" && export BOOST_TEST_CATCH_SYSTEM_ERRORS=no - -# Source this for useful common testing functions -export QPID_TEST_COMMON=$srcdir/test_env_common.sh - -# Proton configuration -export QPID_PROTON_VERSION=@Proton_VERSION@ diff --git a/qpid/cpp/src/tests/test_env_common.sh b/qpid/cpp/src/tests/test_env_common.sh deleted file mode 100644 index 348664ca76..0000000000 --- a/qpid/cpp/src/tests/test_env_common.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env 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. -# - -# Ensure that we have python testing tools available -function ensure_python_tests { - if [ ! -d ${PYTHON_DIR} ] ; then - echo "Python test code not found: skipping python based test" - exit 0; - fi -} - diff --git a/qpid/cpp/src/tests/topic_perftest b/qpid/cpp/src/tests/topic_perftest deleted file mode 100755 index 04e1cdcffb..0000000000 --- a/qpid/cpp/src/tests/topic_perftest +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env 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. -# - -exec `dirname $0`/run_perftest 10000 --mode topic --qt 16 diff --git a/qpid/cpp/src/tests/topictest b/qpid/cpp/src/tests/topictest index f4c6e7187d..13f38120b3 100755 --- a/qpid/cpp/src/tests/topictest +++ b/qpid/cpp/src/tests/topictest @@ -46,11 +46,11 @@ done subscribe() { echo Start subscriber $1 LOG="subscriber_$1.log" - ./qpid-topic-listener $TRANSACTIONAL > $LOG 2>&1 && rm -f $LOG + qpid-topic-listener $TRANSACTIONAL > $LOG 2>&1 && rm -f $LOG } publish() { - ./qpid-topic-publisher --messages $MESSAGES --batches $BATCHES --subscribers $SUBSCRIBERS $HOST $TRANSACTIONAL + qpid-topic-publisher --messages $MESSAGES --batches $BATCHES --subscribers $SUBSCRIBERS $HOST $TRANSACTIONAL } for ((i=$SUBSCRIBERS ; i--; )); do diff --git a/qpid/cpp/src/tests/vg_check b/qpid/cpp/src/tests/vg_check deleted file mode 100644 index 462f4cb5e4..0000000000 --- a/qpid/cpp/src/tests/vg_check +++ /dev/null @@ -1,43 +0,0 @@ -# -# 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. -# - -# Check for valgrind errors. Sourced by test scripts. - -vg_failed() { - echo "Valgrind error log in $VG_LOG." 1>&2 - cat $VG_LOG 1>&2 - echo $1 1>&2 - exit 1 -} - -vg_check() -{ - test -z "$1" || VG_LOG=$1 - test -f $VG_LOG || vg_failed Valgrind log file $VG_LOG missing. - # Ensure there is an ERROR SUMMARY line. - grep -E '^==[0-9]+== ERROR SUMMARY:' $VG_LOG > /dev/null || \ - vg_failed "No valgrind ERROR SUMMARY line in $VG_LOG." - # Ensure that the number of errors is 0. - grep -E '^==[0-9]+== ERROR SUMMARY: [^0]' $VG_LOG > /dev/null && \ - vg_failed "Valgrind reported errors in $VG_LOG; see above." - # Check for leaks. - grep -E '^==[0-9]+== +.* lost: [^0]' $VG_LOG && \ - vg_failed "Found memory leaks (see log file, $VG_LOG); see above." - true -} diff --git a/qpid/extras/qmf/.gitignore b/qpid/extras/qmf/.gitignore deleted file mode 100644 index 846f2ac5b0..0000000000 --- a/qpid/extras/qmf/.gitignore +++ /dev/null @@ -1,20 +0,0 @@ -# -# 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. -# - -/build diff --git a/qpid/extras/qmf/NOTICE.txt b/qpid/extras/qmf/NOTICE.txt deleted file mode 100644 index 238d1242f7..0000000000 --- a/qpid/extras/qmf/NOTICE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Apache Qpid QMF -Copyright 2008-2016 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). diff --git a/qpid/python/doc/test-requirements.txt b/qpid/python/doc/test-requirements.txt deleted file mode 100644 index 5089b49dbe..0000000000 --- a/qpid/python/doc/test-requirements.txt +++ /dev/null @@ -1,29 +0,0 @@ -############################################################################### -# 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. -############################################################################### - - * start and stop server, possibly in different configurations, should - at least be able to specify host and port - - * initiate multiple connections/server - - * initiate multiple channels/connection - - * enable positive and negative tests for any protocol interaction - - * test harness must be as robust as possible to spec changes diff --git a/qpid/python/qpid-python-test.bat b/qpid/python/qpid-python-test.bat new file mode 100755 index 0000000000..3fd6f9693b --- /dev/null +++ b/qpid/python/qpid-python-test.bat @@ -0,0 +1,2 @@ +@echo off +python %~dp0\qpid-python-test %* diff --git a/qpid/tests/src/py/qpid_tests/__init__.py b/qpid/python/qpid_tests/__init__.py index 0459ace65c..0459ace65c 100644 --- a/qpid/tests/src/py/qpid_tests/__init__.py +++ b/qpid/python/qpid_tests/__init__.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/__init__.py b/qpid/python/qpid_tests/broker_0_10/__init__.py index 312dc22645..312dc22645 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/__init__.py +++ b/qpid/python/qpid_tests/broker_0_10/__init__.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py b/qpid/python/qpid_tests/broker_0_10/alternate_exchange.py index 2e2d5de13a..2e2d5de13a 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/alternate_exchange.py +++ b/qpid/python/qpid_tests/broker_0_10/alternate_exchange.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/broker.py b/qpid/python/qpid_tests/broker_0_10/broker.py index 81d723e322..81d723e322 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/broker.py +++ b/qpid/python/qpid_tests/broker_0_10/broker.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/dtx.py b/qpid/python/qpid_tests/broker_0_10/dtx.py index a9619bcdb8..a9619bcdb8 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/dtx.py +++ b/qpid/python/qpid_tests/broker_0_10/dtx.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/example.py b/qpid/python/qpid_tests/broker_0_10/example.py index e36907d501..e36907d501 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/example.py +++ b/qpid/python/qpid_tests/broker_0_10/example.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py b/qpid/python/qpid_tests/broker_0_10/exchange.py index 916f9d8b85..916f9d8b85 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/exchange.py +++ b/qpid/python/qpid_tests/broker_0_10/exchange.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/extensions.py b/qpid/python/qpid_tests/broker_0_10/extensions.py index 50c0aa3dd1..50c0aa3dd1 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/extensions.py +++ b/qpid/python/qpid_tests/broker_0_10/extensions.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/lvq.py b/qpid/python/qpid_tests/broker_0_10/lvq.py index 07a8906fe7..07a8906fe7 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/lvq.py +++ b/qpid/python/qpid_tests/broker_0_10/lvq.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/management.py b/qpid/python/qpid_tests/broker_0_10/management.py index 751839291b..751839291b 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/management.py +++ b/qpid/python/qpid_tests/broker_0_10/management.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/message.py b/qpid/python/qpid_tests/broker_0_10/message.py index c6095a0579..c6095a0579 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/message.py +++ b/qpid/python/qpid_tests/broker_0_10/message.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py b/qpid/python/qpid_tests/broker_0_10/msg_groups.py index ec015e1be4..ec015e1be4 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/msg_groups.py +++ b/qpid/python/qpid_tests/broker_0_10/msg_groups.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py b/qpid/python/qpid_tests/broker_0_10/new_api.py index 4e94395121..4e94395121 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/new_api.py +++ b/qpid/python/qpid_tests/broker_0_10/new_api.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/persistence.py b/qpid/python/qpid_tests/broker_0_10/persistence.py index e9cf9b7caa..e9cf9b7caa 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/persistence.py +++ b/qpid/python/qpid_tests/broker_0_10/persistence.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/priority.py b/qpid/python/qpid_tests/broker_0_10/priority.py index 47aae6dfd6..47aae6dfd6 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/priority.py +++ b/qpid/python/qpid_tests/broker_0_10/priority.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/qmf_events.py b/qpid/python/qpid_tests/broker_0_10/qmf_events.py index 7ab7b0a1ac..7ab7b0a1ac 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/qmf_events.py +++ b/qpid/python/qpid_tests/broker_0_10/qmf_events.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/query.py b/qpid/python/qpid_tests/broker_0_10/query.py index fd741821d5..fd741821d5 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/query.py +++ b/qpid/python/qpid_tests/broker_0_10/query.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/queue.py b/qpid/python/qpid_tests/broker_0_10/queue.py index 132bd7b987..132bd7b987 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/queue.py +++ b/qpid/python/qpid_tests/broker_0_10/queue.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/stats.py b/qpid/python/qpid_tests/broker_0_10/stats.py index 4f3931b78b..4f3931b78b 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/stats.py +++ b/qpid/python/qpid_tests/broker_0_10/stats.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/threshold.py b/qpid/python/qpid_tests/broker_0_10/threshold.py index fa172c66d2..fa172c66d2 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/threshold.py +++ b/qpid/python/qpid_tests/broker_0_10/threshold.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_10/tx.py b/qpid/python/qpid_tests/broker_0_10/tx.py index 8cdc539a08..8cdc539a08 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_10/tx.py +++ b/qpid/python/qpid_tests/broker_0_10/tx.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/__init__.py b/qpid/python/qpid_tests/broker_0_8/__init__.py index 526f2452f8..526f2452f8 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/__init__.py +++ b/qpid/python/qpid_tests/broker_0_8/__init__.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/basic.py b/qpid/python/qpid_tests/broker_0_8/basic.py index 13f4252ffb..13f4252ffb 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/basic.py +++ b/qpid/python/qpid_tests/broker_0_8/basic.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/broker.py b/qpid/python/qpid_tests/broker_0_8/broker.py index 7f3fe7530e..7f3fe7530e 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/broker.py +++ b/qpid/python/qpid_tests/broker_0_8/broker.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/example.py b/qpid/python/qpid_tests/broker_0_8/example.py index d82bad1f61..d82bad1f61 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/example.py +++ b/qpid/python/qpid_tests/broker_0_8/example.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/exchange.py b/qpid/python/qpid_tests/broker_0_8/exchange.py index 8d610a79dd..8d610a79dd 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/exchange.py +++ b/qpid/python/qpid_tests/broker_0_8/exchange.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/queue.py b/qpid/python/qpid_tests/broker_0_8/queue.py index b7a41736ab..b7a41736ab 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/queue.py +++ b/qpid/python/qpid_tests/broker_0_8/queue.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/testlib.py b/qpid/python/qpid_tests/broker_0_8/testlib.py index 76f7e964a2..76f7e964a2 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/testlib.py +++ b/qpid/python/qpid_tests/broker_0_8/testlib.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_8/tx.py b/qpid/python/qpid_tests/broker_0_8/tx.py index 9faddb1110..9faddb1110 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_8/tx.py +++ b/qpid/python/qpid_tests/broker_0_8/tx.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_9/__init__.py b/qpid/python/qpid_tests/broker_0_9/__init__.py index 72e69a51b9..72e69a51b9 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_9/__init__.py +++ b/qpid/python/qpid_tests/broker_0_9/__init__.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_9/echo.py b/qpid/python/qpid_tests/broker_0_9/echo.py index a883568e35..a883568e35 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_9/echo.py +++ b/qpid/python/qpid_tests/broker_0_9/echo.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_9/messageheader.py b/qpid/python/qpid_tests/broker_0_9/messageheader.py index 3d64adfcf0..3d64adfcf0 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_9/messageheader.py +++ b/qpid/python/qpid_tests/broker_0_9/messageheader.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_9/query.py b/qpid/python/qpid_tests/broker_0_9/query.py index cb66d079e5..cb66d079e5 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_9/query.py +++ b/qpid/python/qpid_tests/broker_0_9/query.py diff --git a/qpid/tests/src/py/qpid_tests/broker_0_9/queue.py b/qpid/python/qpid_tests/broker_0_9/queue.py index 249850caf9..249850caf9 100644 --- a/qpid/tests/src/py/qpid_tests/broker_0_9/queue.py +++ b/qpid/python/qpid_tests/broker_0_9/queue.py diff --git a/qpid/tests/src/py/qpid_tests/broker_1_0/__init__.py b/qpid/python/qpid_tests/broker_1_0/__init__.py index b14bb96dc8..b14bb96dc8 100644 --- a/qpid/tests/src/py/qpid_tests/broker_1_0/__init__.py +++ b/qpid/python/qpid_tests/broker_1_0/__init__.py diff --git a/qpid/tests/src/py/qpid_tests/broker_1_0/general.py b/qpid/python/qpid_tests/broker_1_0/general.py index a5b9779add..a5b9779add 100644 --- a/qpid/tests/src/py/qpid_tests/broker_1_0/general.py +++ b/qpid/python/qpid_tests/broker_1_0/general.py diff --git a/qpid/tests/src/py/qpid_tests/broker_1_0/legacy_exchanges.py b/qpid/python/qpid_tests/broker_1_0/legacy_exchanges.py index eefa49e817..eefa49e817 100644 --- a/qpid/tests/src/py/qpid_tests/broker_1_0/legacy_exchanges.py +++ b/qpid/python/qpid_tests/broker_1_0/legacy_exchanges.py diff --git a/qpid/tests/src/py/qpid_tests/broker_1_0/selector.py b/qpid/python/qpid_tests/broker_1_0/selector.py index 323baaab07..323baaab07 100644 --- a/qpid/tests/src/py/qpid_tests/broker_1_0/selector.py +++ b/qpid/python/qpid_tests/broker_1_0/selector.py diff --git a/qpid/tests/src/py/qpid_tests/broker_1_0/translation.py b/qpid/python/qpid_tests/broker_1_0/translation.py index a6394fb8c5..a6394fb8c5 100644 --- a/qpid/tests/src/py/qpid_tests/broker_1_0/translation.py +++ b/qpid/python/qpid_tests/broker_1_0/translation.py diff --git a/qpid/tests/src/py/qpid_tests/broker_1_0/tx.py b/qpid/python/qpid_tests/broker_1_0/tx.py index 45817fc64f..45817fc64f 100644 --- a/qpid/tests/src/py/qpid_tests/broker_1_0/tx.py +++ b/qpid/python/qpid_tests/broker_1_0/tx.py diff --git a/qpid/tests/src/py/qpid_tests/client/client-api-example-tests.py b/qpid/python/qpid_tests/client/client-api-example-tests.py index 43e0aada46..43e0aada46 100755 --- a/qpid/tests/src/py/qpid_tests/client/client-api-example-tests.py +++ b/qpid/python/qpid_tests/client/client-api-example-tests.py diff --git a/qpid/tests/src/py/qpid_tests/client/log4j.conf b/qpid/python/qpid_tests/client/log4j.conf index 2c7bd74e29..2c7bd74e29 100644 --- a/qpid/tests/src/py/qpid_tests/client/log4j.conf +++ b/qpid/python/qpid_tests/client/log4j.conf diff --git a/qpid/python/setup.py b/qpid/python/setup.py index b85ca12b0c..fece3d91b3 100755 --- a/qpid/python/setup.py +++ b/qpid/python/setup.py @@ -17,7 +17,7 @@ # specific language governing permissions and limitations # under the License. # -import os, re, sys, string +import os, re, sys, string, platform from distutils.core import setup, Command from distutils.command.build import build as _build from distutils.command.build_py import build_py as _build_py @@ -297,17 +297,24 @@ class install_lib(_install_lib): extra.append(tgt) return outfiles + extra +scripts = ["qpid-python-test"] + +if platform.system() == "Windows": + scripts.append("qpid-python-test.bat") + setup(name="qpid-python", version="0.35", author="Apache Qpid", - author_email="dev@qpid.apache.org", + author_email="users@qpid.apache.org", packages=["mllib", "qpid", "qpid.messaging", "qpid.tests", - "qpid.tests.messaging", "qpid.saslmech", "qpid.tests.saslmech"], + "qpid.tests.messaging", "qpid.saslmech", "qpid.tests.saslmech", + "qpid_tests", "qpid_tests.broker_1_0", "qpid_tests.broker_0_10", + "qpid_tests.broker_0_9", "qpid_tests.broker_0_8"], package_data={"qpid": ["specs/*.dtd", "specs/*.xml"]}, - scripts=["qpid-python-test"], + scripts=scripts, url="http://qpid.apache.org/", license="Apache Software License", - description="Python client implementation for Apache Qpid", + description="Python client implementation and AMQP conformance tests for Apache Qpid", cmdclass={"build": build, "build_py": build_py, "build_doc": build_doc, diff --git a/qpid/python/todo.txt b/qpid/python/todo.txt deleted file mode 100644 index 8dbe9c7cc4..0000000000 --- a/qpid/python/todo.txt +++ /dev/null @@ -1,197 +0,0 @@ -Key: - F = Functional - PF = Partially Functional - NR = Needs Additional Review - ND = Needs Additional Design - NF = Not Functional - -Connection: - - variables/configuration: - - - reconnect: F, NR, ND - + reconnect functionality is done and the API semantics provided - are ready for review - + reconnect policies need to be finished, there is currently - only one hardcoded reconnect policy (retry every three - seconds), we need to define the pre-canned policies that we - want to support and a means to configure them, as well as a - very simple plugin/callback for defining ad-hoc policies - + need to feed failover exchange into the reconnect policy - + acks can be lost on reconnect - + handle reconnect during commit/rollback - - - timeout: NF - + some sort of timeout threshold for killing the connection - - methods: - - - open/__init__: F, ND - + need to support kerberos - + need a better way of supplying various kinds of configuration: - - authentication info - - transport specific configuration options, e.g - - heartbeat - - socket options - - tcp-nodelay - - multiple brokers - - - session: F, NR - - - connect: F, NR - - - disconnect: F, NR - - - connected: F, NR - - - close: F, NR, ND - + currently there is no distinction between a "close" that does - a complete handshake with the remote broker, and a "close" - that reclaims resources, this means that close can fail with - an exception, I don't like this as it is unclear to the user - if there is a responsibility to do further cleanup in this - case - - errors: - - - ConnectionError: F, NR - + ConnectError F, NR - + Disconnected F, NR - - - notification of disconnect? - -Session: - - methods: - - - sender: F, NR, ND - + need to detail address options - + need to define subject pattern semantics - + consider providing convenience for sender/receiver caching - + need to provide sync option, possibly change default - - - receiver: F, NR, ND - + need to detail address options - + need to define filter syntax/semantics - + consider providing convenience for sender/receiver caching - + need to provide sync option, possibly change default - - - acknowledge: F, NR - - - reject: NF - - - release: NF - - - commit: F, NR - - - rollback: F, NR - - - next_receiver: F, NR - - - close: F, ND - + see comment on Connection.close - - errors: - - - SessionError: F, NR, ND - + SendError: F, NR, ND - + ReceiveError: F, NR, ND - + should there be fatal/non fatal variants? - -Sender: - - methods: - - - pending: F, NR - - - send: F, NR - - - sync: F, NR, ND - + currently this blocks until pending == 0, I'm thinking of - renaming this to wait and adding a slightly richer interface - that would let you wait for something like pending < n - - - close: F, NR - - errors: - - - SendError - + InsufficientCapacity - + need specific subhierarchy for certain conditions, e.g. no such queue - -Receiver: - - methods: - - - pending: F, NR - - - listen: F, ND - + see comment on Session.fetch - - - fetch: F, NR, ND - + explicit grant for receiver - + changing capacity/prefetch to issue credit on ack rather than - fetch return - - - sync/wait: NF - - - close: F, NR - - errors: - - - ReceiveError - + Empty - + need specific subhierarchy for certain conditions, e.g. no such queue - -Message: - - - standard message properties: F, NR, ND - - - map messages: F, NR - + needs interop testing: NF - + needs java impl: NF - - - list messages: F, NR, NI - + needs interop testing: NF - + needs java impl: NF - - - boxed types: NF - -Address: - - - syntax: F, NR - + need to consider whitespace in name/subject - + consider unquoted string concept - - subject related changes, e.g. allowing patterns on both ends: NF - - creating/deleting queues/exchanges F, NR - + need to handle cleanup of temp queues/topics: F, NR - + passthrough options for creating exchanges/queues: F, NR - - integration with java: NF - - queue browsing: F, NR - - temporary queues: NF - - xquery: NF - -Testing: - - stress/soak testing for async: NF - - stress/soak testing for reconnect: NF - - interop testing: NF - - multi session and multi connection client tests: NF - -Documentation: - - api level docs largely present but need updating and elaboration - - tutorial: NF - -Examples: - - drain: F, NR - - spout: F, NR - - server: F, NR - - client: NF - - reservations: F, NR - + code: F, NR - + doc: NF - - other examples, e.g. async? - -Miscellaneous: - - standard ping-like (drain/spout) utilities for all clients: NF - - caching of resolved addresses: F, NR - - consider using separate session for query/deletion/creation of addresses diff --git a/qpid/tests/LICENSE.txt b/qpid/tests/LICENSE.txt deleted file mode 100644 index 6b0b1270ff..0000000000 --- a/qpid/tests/LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/qpid/tests/MANIFEST.in b/qpid/tests/MANIFEST.in deleted file mode 100644 index ab30e9acee..0000000000 --- a/qpid/tests/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include *.txt diff --git a/qpid/tests/NOTICE.txt b/qpid/tests/NOTICE.txt deleted file mode 100644 index 695f589ffe..0000000000 --- a/qpid/tests/NOTICE.txt +++ /dev/null @@ -1,5 +0,0 @@ -Apache Qpid Python Tests -Copyright 2006-2014 The Apache Software Foundation - -This product includes software developed at -The Apache Software Foundation (http://www.apache.org/). diff --git a/qpid/tests/setup.py b/qpid/tests/setup.py deleted file mode 100755 index fbf05b7738..0000000000 --- a/qpid/tests/setup.py +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# -from distutils.core import setup - -setup(name="qpid-tests", - version="0.35", - author="Apache Qpid", - author_email="dev@qpid.apache.org", - packages=["qpid_tests", "qpid_tests.broker_1_0", "qpid_tests.broker_0_10", - "qpid_tests.broker_0_9", "qpid_tests.broker_0_8"], - package_dir={"": "src/py"}, - url="http://qpid.apache.org/", - license="Apache Software License", - description="Apache Qpid conformance tests") diff --git a/qpid/tools/LICENSE.txt b/qpid/tools/LICENSE.txt deleted file mode 100644 index 6b0b1270ff..0000000000 --- a/qpid/tools/LICENSE.txt +++ /dev/null @@ -1,203 +0,0 @@ - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed 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. - diff --git a/qpid/tools/MANIFEST.in b/qpid/tools/MANIFEST.in deleted file mode 100644 index ab30e9acee..0000000000 --- a/qpid/tools/MANIFEST.in +++ /dev/null @@ -1 +0,0 @@ -include *.txt diff --git a/qpid/tools/setup.py b/qpid/tools/setup.py deleted file mode 100755 index a921be03ed..0000000000 --- a/qpid/tools/setup.py +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env python -# -# 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. -# -from distutils.core import setup - -pypi_long_description = """ - -=========== -qpidtoollibs -=========== - -qpidtoollibs provides a useful BrokerAgent object for managing a Qpid broker -using Qpid Management Framework (QMF). - -This library depends on the qpid.messaging python client to send AMQP messaging -containing QMF commands to the Qpid broker. - -""" - -setup(name="qpid-tools", - version="0.35", - author="Apache Qpid", - author_email="dev@qpid.apache.org", - package_dir={'' : 'src/py'}, - packages=["qpidtoollibs"], - scripts=["src/py/qpid-config", - "src/py/qpid-ha", - "src/py/qpid-printevents", - "src/py/qpid-queue-stats", - "src/py/qpid-route", - "src/py/qpid-stat", - "src/py/qpid-tool", - "src/py/qmf-tool"], - data_files=[("libexec", ["src/py/qpid-qls-analyze"]), - ("share/qpid-tools/python/qlslibs", - ["src/py/qlslibs/__init__.py", - "src/py/qlslibs/analyze.py", - "src/py/qlslibs/efp.py", - "src/py/qlslibs/err.py", - "src/py/qlslibs/jrnl.py", - "src/py/qlslibs/utils.py"])], - url="http://qpid.apache.org/", - license="Apache Software License", - description="Diagnostic and management tools for Apache Qpid brokers.", - long_description=pypi_long_description, - install_requires=[ - "qpid-python >= 0.26", - ]) |