<!DOCTYPE html>
<!--
 -
 - 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.
 -
-->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
  <head>
    <title>QUICKSTART GUIDE - Apache Qpid&#8482;</title>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <meta name="viewport" content="width=device-width, initial-scale=1.0"/>
    <link rel="stylesheet" href="/site.css" type="text/css" async="async"/>
    <link rel="stylesheet" href="/deferred.css" type="text/css" defer="defer"/>
    <script type="text/javascript">var _deferredFunctions = [];</script>
    <script type="text/javascript" src="/deferred.js" defer="defer"></script>
    <!--[if lte IE 8]>
      <link rel="stylesheet" href="/ie.css" type="text/css"/>
      <script type="text/javascript" src="/html5shiv.js"></script>
    <![endif]-->

    <!-- Redirects for `go get` and godoc.org -->
    <meta name="go-import"
          content="qpid.apache.org git https://git-wip-us.apache.org/repos/asf/qpid-proton.git"/>
    <meta name="go-source"
          content="qpid.apache.org
https://github.com/apache/qpid-proton/blob/go1/README.md
https://github.com/apache/qpid-proton/tree/go1{/dir}
https://github.com/apache/qpid-proton/blob/go1{/dir}/{file}#L{line}"/>
  </head>
  <body>
    <div id="-content">
      <div id="-top" class="panel">
        <a id="-menu-link"><img width="16" height="16" src="" alt="Menu"/></a>

        <a id="-search-link"><img width="22" height="16" src="" alt="Search"/></a>

        <ul id="-global-navigation">
          <li><a id="-logotype" href="/index.html">Apache Qpid<sup>&#8482;</sup></a></li>
          <li><a href="/documentation.html">Documentation</a></li>
          <li><a href="/download.html">Download</a></li>
          <li><a href="/discussion.html">Discussion</a></li>
        </ul>
      </div>

      <div id="-menu" class="panel" style="display: none;">
        <div class="flex">
          <section>
            <h3>Project</h3>

            <ul>
              <li><a href="/overview.html">Overview</a></li>
              <li><a href="/components/index.html">Components</a></li>
              <li><a href="/releases/index.html">Releases</a></li>
            </ul>
          </section>

          <section>
            <h3>Messaging APIs</h3>

            <ul>
              <li><a href="/proton/index.html">Qpid Proton</a></li>
              <li><a href="/components/jms/index.html">Qpid JMS</a></li>
              <li><a href="/components/messaging-api/index.html">Qpid Messaging API</a></li>
            </ul>
          </section>

          <section>
            <h3>Servers and tools</h3>

            <ul>
              <li><a href="/components/broker-j/index.html">Broker-J</a></li>
              <li><a href="/components/cpp-broker/index.html">C++ broker</a></li>
              <li><a href="/components/dispatch-router/index.html">Dispatch router</a></li>
            </ul>
          </section>

          <section>
            <h3>Resources</h3>

            <ul>
              <li><a href="/dashboard.html">Dashboard</a></li>
              <li><a href="https://cwiki.apache.org/confluence/display/qpid/Index">Wiki</a></li>
              <li><a href="/resources.html">More resources</a></li>
            </ul>
          </section>
        </div>
      </div>

      <div id="-search" class="panel" style="display: none;">
        <form action="http://www.google.com/search" method="get">
          <input type="hidden" name="sitesearch" value="qpid.apache.org"/>
          <input type="text" name="q" maxlength="255" autofocus="autofocus" tabindex="1"/>
          <button type="submit">Search</button>
          <a href="/search.html">More ways to search</a>
        </form>
      </div>

      <div id="-middle" class="panel">
        <ul id="-path-navigation"><li><a href="/index.html">Home</a></li><li><a href="/releases/index.html">Releases</a></li><li><a href="/releases/qpid-interop-test-0.1.0/index.html">Qpid Interop Test 0.1.0</a></li><li>QUICKSTART GUIDE</li></ul>

        <div id="-middle-content">
          <!--

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.

-->

<h1 id="quickstart-guide">QUICKSTART GUIDE</h1>

<p>You must build <em>and install</em> qpid-interop-test before you can run the tests.</p>

<p>By default, qpid-interop-test will install to /usr/local, but you can set any
non-priviedged directory as the install prefix using the CMAKE_INSTALL_PREFIX
environment variable, for example $HOME/install.</p>

<p>The following tools are needed to build qpid-interop-test:</p>

<ul>
<li>git</li>
<li>gcc-c++</li>
<li>Python 2.7.x</li>
<li>cmake</li>
<li>Java JDK</li>
<li>Maven</li>
<li>JSON cpp</li>
</ul>

<p>The following Qpid components must be installed <em>before</em> you build and install
qpid-interop-test:</p>

<ul>
<li>Qpid Proton (including C++ Proton API)</li>
<li>Qpid Python</li>
</ul>

<p>The following are not required, but if installed and present, will be tested:</p>

<ul>
<li>Rhea (a Javascript client, also requires npm and nodejs)</li>
<li>AMQP.Net Lite (requires mono)</li>
</ul>

<p>Pre-requisites can be installed using the standard system package manager (yum,
dnf, apt-get etc.) OR built from source and installed.</p>

<p>These are the install steps:</p>

<ol>
<li>Install prerequisites, from packages or source</li>
<li>Install or download / build AMQP brokers to test against (or set up networked brokers)</li>
<li>Build qpid-interop-test</li>
<li>Run the tests</li>
</ol>

<h2 id="1-install-prerequisites">1. Install prerequisites</h2>

<h3 id="11-rhel6">1.1 RHEL6</h3>

<p>Currently RHEL6 is not supported because it uses Python 2.6.x, and the test code uses
features of Python 2.7.x. This may be supported in a future release.</p>

<h3 id="12-rhel7">1.2 RHEL7</h3>

<p>From a clean install:</p>

<p><code>
yum install cmake maven java-1.8.0-openjdk-devel perl-XML-XPath
</code></p>

<p>Some packages will need to be downloaded from <a href="https://fedoraproject.org/wiki/EPEL">EPEL</a>.
To set up the EPEL repo in yum:</p>

<p><code>
wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -ivh epel-release-latest-6.noarch.rpm
</code></p>

<p>then install the following packages:</p>

<p><code>
yum install jsoncpp-devel nodejs-rhea qpid-proton-cpp-devel python-qpid-proton
</code></p>

<h3 id="13-fedora-26">1.3 Fedora 26</h3>

<p>All packages are available directly from the Fedora repositories:</p>

<p><code>
dnf install gcc-c++ cmake maven java-1.8.0-openjdk-devel perl-XML-XPath jsoncpp-devel nodejs-rhea qpid-proton-cpp-devel python-qpid-proton
</code></p>

<h2 id="2-obtaining-a-broker">2. Obtaining a broker</h2>

<p>Qpid-interop-test requires a running broker to be available. This
may be on localhost as a local install or build, or on another machine, in which case its
IP addresss must be known. Some local broker install options are:</p>

<h3 id="21-activemq-5">2.1 ActiveMQ 5</h3>

<p>Download from <a href="http://activemq.apache.org/download.html">Apache</a>.</p>

<p>Make the following changes to the <code>activemq.xml</code> config file: For XML element
<code>broker.transportConnectors.transportConnector@name="amqp"</code> add the attribute
<code>wireFormat.allowNonSaslConnections=true</code>. ie:</p>

<p><code>
&lt;transportConnector name="amqp" uri="amqp://0.0.0.0:5672?maximumConnections=1000&amp;amp;wireFormat.maxFrameSize=1048576000&amp;amp;wireFormat.allowNonSaslConnections=true"/&gt;
</code></p>

<h3 id="22-artemis">2.2 Artemis</h3>

<p>Download from <a href="https://activemq.apache.org/artemis/download.html">Apache</a>.</p>

<h3 id="23-qpid-cpp-broker">2.3 Qpid cpp broker</h3>

<pre><code>yum install qpid-cpp-server
</code></pre>

<p>and set the configuration file in /etc/qpid/qpidd.conf as follows:</p>

<p><code>
auth=no
queue-patterns=jms.queue.qpid-interop
</code></p>

<h3 id="24-qpid-dispatch-router">2.4 Qpid Dispatch Router</h3>

<pre><code>yum install qpid-dispatch-router
</code></pre>

<p>and add the following to the config file in /etc/qpid-dispatch/qdrouterd.conf:</p>

<p>````
listener {
    host: ::1
    port: amqp
    authenticatePeer: no
    saslMechanisms: ANONYMOUS
}</p>

<p>````</p>

<h2 id="3-install-qpid-interop-test">3. Install qpid-interop-test</h2>

<p>Qpid-interop-test may be installed locally (preferred for local builds) or to the system
(which requires root privileges). For a local install, use the <code>-DCMAKE_INSTALL_PREFIX</code>
option to the <code>cmake</code> command. If it is omitted, then qpid-interop-test will be installed
into the default system directories.  The source may be unpacked, or (if you need to use the
latest and greatest), cloned from git:</p>

<p><code>
git clone https://git-wip-us.apache.org/repos/asf/qpid-interop-test.git
</code></p>

<p>Assuming the source tree is located in directory <code>qpid-interop-test</code>:</p>

<p><code>
cd qpid-interop-test
mkdir build
cd build
</code>
For a local install:</p>

<p><code>
cmake -DCMAKE_INSTALL_PREFIX=&lt;abs-path-to-local-install-dir&gt; ..
make install
</code></p>

<p>For a system install, root privileges are required:</p>

<p>````
cmake ..
make
sudo make install</p>

<p>````</p>

<h2 id="4-run-the-tests">4. Run the tests</h2>

<h3 id="41-set-the-environment">4.1 Set the environment</h3>

<p>The config.sh script is in the qpid-interop-test build directory: </p>

<p><code>
source build/config.sh
</code></p>

<h3 id="42-start-the-test-broker">4.2 Start the test broker</h3>

<p>If the broker is at a remote location rather than localhost, the IP address must be known.  In tests using
the Qpid Dispatch Router, then the entire broker network must be running before the tests are run. The IP
addresses of the sender (the broker to which messages are being sent) and receiver (the broker from which
messages will be received) must be known.</p>

<h3 id="43-run-chosen-tests">4.3 Run chosen tests</h3>

<p>The available tests are:</p>

<table>
<thead>
<tr>
  <th>Module</th>
  <th>Description</th>
  <th>Clients</th>
</tr>
</thead>
<tbody>
<tr>
  <td>amqp_large_content_test</td>
  <td>Tests implementation of large messages up to 10MB</td>
  <td>C++ Python AMQP.NetLite</td>
</tr>
<tr>
  <td>amqp_types_test</td>
  <td>Tests the implementation of AMQP 1.0 types</td>
  <td>C++ Python Rhea AMQP.NetLite</td>
</tr>
<tr>
  <td>jms_hdrs_props_test</td>
  <td>Tests JMS headers and properties</td>
  <td>C++ JMS Python</td>
</tr>
<tr>
  <td>jms_messages_test</td>
  <td>Tests all JMS message types (except ObjectMessage)</td>
  <td>C++ JMS Python</td>
</tr>
</tbody>
</table>

<p>The preferred method to run the tests is using the Python module option as follows:</p>

<p><code>
python -m qpid_interop_test.amqp_types_test
python -m qpid_interop_test.jms_messages_test
...
</code></p>

<p>If the broker is remote, use the following to point to the broker(s):</p>

<p><code>
python -m qpid_interop_test.amqp_types_test --sender &lt;broker-ip-addr&gt; --receiver &lt;broker-ip-addr&gt;
python -m qpid_interop_test.jms_messages_test --sender &lt;broker-ip-addr&gt; --receiver &lt;broker-ip-addr&gt;
...
</code></p>

<p>In tests using the Qpid dispatch router, a multi-node configuration may be set up such that messages
are sent to a different broker to that from which they will be received. For example, to send to
broker A and receive from broker B:</p>

<p><code>
python -m qpid_interop_test.amqp_types_test --sender &lt;broker-ip-addr-A&gt; --receiver &lt;broker-ip-addr-B&gt;
python -m qpid_interop_test.jms_messages_test --sender &lt;broker-ip-addr-A&gt; --receiver &lt;broker-ip-addr-B&gt;
...
</code></p>


          <hr/>

          <ul id="-apache-navigation">
            <li><a href="http://www.apache.org/">Apache</a></li>
            <li><a href="http://www.apache.org/licenses/">License</a></li>
            <li><a href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
            <li><a href="http://www.apache.org/foundation/thanks.html">Thanks!</a></li>
            <li><a href="/security.html">Security</a></li>
            <li><a href="http://www.apache.org/"><img id="-apache-feather" width="48" height="14" src="" alt="Apache"/></a></li>
          </ul>

          <p id="-legal">
            Apache Qpid, Messaging built on AMQP; Copyright &#169; 2015
            The Apache Software Foundation; Licensed under
            the <a href="http://www.apache.org/licenses/LICENSE-2.0">Apache
            License, Version 2.0</a>; Apache Qpid, Qpid, Qpid Proton,
            Proton, Apache, the Apache feather logo, and the Apache Qpid
            project logo are trademarks of The Apache Software
            Foundation; All other marks mentioned may be trademarks or
            registered trademarks of their respective owners
          </p>
        </div>
      </div>
    </div>
  </body>
</html>
