blob: 2524afceb128a528ba45345b1e4464a1616b49e8 [file] [log] [blame]
.Apache License
____
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.
____
= Qpid Interoperability Test Users Guide
== 1. Introduction
qpid-interop-test is an AMQP client interoperability test suite. It tests
various aspects of the AMQP protocol and/or test client features against
each other to ensure that they can interoperate.
The test suite consists of tests and shims. Each test has a set of test-cases
which make up the test. Each test case will pass or fail a specific feature
or piece of functionality under test.
Each test has a set of shims, which are small and specific clients which
send and receive messages, and is written using one of the client libraries
under test. For example, the amqp_types test has shims for the following
clients:
* AmqpNetLite
* ProtonCpp
* ProtonPython
* RheaJS
To obtain both self- and interoperability testing, each test program will
run each shim against every other shim in the role of both sender and
receiver. For the amqp-type-test example above, this will result in the
following combinations of shims being used:
[width="30%", cols="10%,45%,45%"]
|===
| |*Sender shim* |*Receiver shim*
|1 |AmqpNetLite | AmqpNetLite
|2 |AmqpNetLite | ProtonCpp
|3 |AmqpNetLite | ProtonPython
|4 |AmqpNetLite | RheaJS
|5 |ProtonCpp | AmqpNetLite
|6 |ProtonCpp | ProtonCpp
|7 |ProtonCpp | ProtonPython
|8 |ProtonCpp | RheaJS
|9 |ProtonPython | AmqpNetLite
|10 |ProtonPython | ProtonCpp
|11 |ProtonPython | ProtonPython
|12 |ProtonPython | RheaJS
|13 |RheaJS | AmqpNetLite
|14 |RheaJS | ProtonCpp
|15 |RheaJS | ProtonPython
|16 |RheaJS | RheaJS
|===
so that for each test case, 16 individual tests are run. The test program
will by default run all the available shims against each other in this way,
but it is possible to control which shims are used using the --include-shim
or --exclude-shim arguments (see below).
== 2. Obtaining
qpid-interop-test is an Apache Qpid project.
Web page: xxx
Download soruce: xxx
== 3. Building
=== a. Install dependencies:
* Build tools: git, gcc, cmake
* Qpid Proton: qpid-proton-c-devel
=== b. Decide on local vs system install
==== Local install:
Installs all of the Proton and QIT bits in a local directory. This is
useful for limited testing where you don't want to have these files
in your system directories. Also, if you don't have root privileges, then
this is the only way to install. The drawback is that you may need to
adjust some environment settings (`PATH`, `PYTHONPATH`, `LD_LIBRARY_PATH`) so
that the test will run.
==== System install:
Installs the files into traditional system locations. This type of install
requires root privileges. As the files are located in expected locations, no
environment settings need be made.
=== c. Build qpid-proton
*System install:*
----
$ cd qpid-proton
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
----
*Local install:*
----
$ cd qpid-proton
$ mkdir build
$ cd build
$ cmake ..
$ make install
----
=== d. Build qpid-interop-test
*System install:*
----
$ cd qpid-interop-test
$ mkdir build
$ cd build
$ cmake ..
$ make
$ sudo make install
----
*Local install:*
----
$ cd qpid-interop-test
$ mkdir build
$ cd build
$ cmake ..
$ make install
----
== 4. Running
The tests assume a broker is available and running. The assumed default is at
`localhost:5672`. For other broker location(s), use the `--sender` and `--receiver`
arguments to specify where the clients should interact, see below.
The tests do not start or stop brokers.
There are several tests in the test suite:
* *amqp_types_test.py* - Tests all of the AMQP primitive types. This primarily tests
the encoding and decoding of AMQP types.
* *amqp_large_content_test.py* - Tests large messages of various types. Messages sizes
are 1MB, 10MB, 100MB. Compound types (lists, maps, etc) send elements of various
sizes so that the total payload is the target size.
* *jms_messages_test.py* - Tests JMS message types (as implemented by Qpid-jms over AMQP)
from all the Qpid clients (including non-jms clients)
* *jms_hdrs_props_test.py* - Tests various combinations of JMS headers and properties
are correctly sent and received by the various clients.
Each test is executed directly.
=== Command-line arguments
.Common to all tests
[cols="20%,80%"]
|===
|`--help` |Print help. This is useful for seeing the available argument options and
defaults for some arguments.
|`--sender` |Node to which test suite will send messages.
Format: `ip-address:port`
Default: `localhost:5672`
|`--receiver` |Node from which test suite will receive messages.
Format: `ip-address:port`
Default: `localhost:5672`
|`--no-skip` |Do not skip tests that are excluded by default for reasons of a known bug.
Warning: some tests may lock up of freeze rather than fail.
|`--broker-type` |Specify the broker manually, which eliminates the test connection made
to the broker to determine its identity through connection properties. If
"None" is specified, then Artemis broker will be assumed, but this will
change in the future when Artemis fixes the connection properties issue.
Format: For our current brokers: one of: "ActiveMQ", "qpid-cpp",
"qpid-dispatch-router". Artemis does not currently pass its name
in connection properties, and is equivalent to "None".
|`--include-shim` |Name of shim to include. Cannot be used together with `--exclude-shim`. May
be used multiple times to include more than one shim.
|`--exclude-shim` |Name of shim to exclude. Cannot be used together with `--include-shim`. May
be used multiple times to exclude more that one shim.
|===
.amqp-types-test
[cols="20%,80%"]
|===
|`--include-type` |Name of AMQP type to include. Cannot be used together with `--exclude-type`.
May be used multiple times to include more than one type.
|`--exclude-type` |Name of AMQP type to exclude. Cannot be used together with `--include-type`.
May be used multiple times to exclude more than one type.
|===
.amqp-large-content-test
|===
|No other parameters. There is currently no way to select/limit the message size, but there
an issue open to address this limitation.
|===
.jms-messages-test
[cols="20%,80%"]
|===
|`--include-type` |Name of JMS message type to include. Cannot be used together with
`--exclude-type`. May be used multiple times to include more than one type.
|`--exclude-type` |Name of JMS message type to exclude. Cannot be used together with
`--include-type`. May be used multiple times to exclude more than one type.
|===
.jms-hdrs-props-test
[cols="20%,80%"]
|===
|`--include-type` |Name of Java property type to include. Cannot be used together with
`--exclude-type`. May be used multiple times to include more than one type.
|`--exclude-type` |Name of Java property type to exclude. Cannot be used together with
`--include-type`. May be used multiple times to exclude more than one type.
|===
There is currently no way to control/limit the JMS header types in this test, but there is
an issue open to address this limitation.
==== Examples:
To limit amqp_types_test to boolean type only:
`$ amqp_types_test --include-type boolean`
To limit amqp_types_test to Qpid-cpp and Proton-python shims only:
`$ amqp_types_test --include-shim ProtonCpp --include-shim ProtonPython`
To test against a pair of Dispatch Routers and a broker running on the local machine
as follows (first set up the brokers and routers):
----
+----------+ 9001 +----------+ 5672 +--------+
| sender |--------->| dispatch |-------->| |
| shim | | router 1 | | |
+----------+ +----------+ | |
| broker |
+----------+ 9002 +----------+ 5672 | |
| receiver |<---------| dispatch |<--------| |
| shim | | router 2 | | |
+----------+ +----------+ +--------+
----
`$ amqp_types_test --sender localhost:9001 --receiver localhost:9002`
== 5. Output
All the tests will list each test as it runs and whether it passes or fails.
If a test fails, then the details of the failure will be printed at the end of
the test.
----
======================================================================
FAIL: test.B.MESSAGE.JMS_TYPE_HEADER:string+JMS_REPLYTO_HEADER:topic.QpidJms->ProtonCpp (__main__.PartB_JmsHeaderCombination_TestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "./install/lib/python2.7/site-packages/qpid_interop_test/jms_hdrs_props_test.py", line 422, in inner_test_method
receive_shim)
File "./install/lib/python2.7/site-packages/qpid_interop_test/jms_hdrs_props_test.py", line 313, in run_test
self.fail(str(receive_obj))
AssertionError: JmsReceiver error: Unexpected JMS message header: JMS_PRIORITY: Expected default priority (4), found priority 0
----
Currently, the tests do not produce log files.