96 lines
4.1 KiB
Python
96 lines
4.1 KiB
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 qpid.datatypes import Message, RangedSet
|
||
|
from qpid.testlib import TestBase010
|
||
|
|
||
|
class ExampleTest (TestBase010):
|
||
|
"""
|
||
|
An example Qpid test, illustrating the unittest framework and the
|
||
|
python Qpid client. The test class must inherit TestBase. The
|
||
|
test code uses the Qpid client to interact with a qpid broker and
|
||
|
verify it behaves as expected.
|
||
|
"""
|
||
|
|
||
|
def test_example(self):
|
||
|
"""
|
||
|
An example test. Note that test functions must start with 'test_'
|
||
|
to be recognized by the test framework.
|
||
|
"""
|
||
|
|
||
|
# By inheriting TestBase, self.client is automatically connected
|
||
|
# and self.session is automatically opened as session(1)
|
||
|
# Other session methods mimic the protocol.
|
||
|
session = self.session
|
||
|
|
||
|
# Now we can send regular commands. If you want to see what the method
|
||
|
# arguments mean or what other commands are available, you can use the
|
||
|
# python builtin help() method. For example:
|
||
|
#help(chan)
|
||
|
#help(chan.exchange_declare)
|
||
|
|
||
|
# If you want browse the available protocol methods without being
|
||
|
# connected to a live server you can use the amqp-doc utility:
|
||
|
#
|
||
|
# Usage amqp-doc [<options>] <spec> [<pattern_1> ... <pattern_n>]
|
||
|
#
|
||
|
# Options:
|
||
|
# -e, --regexp use regex instead of glob when matching
|
||
|
|
||
|
# Now that we know what commands are available we can use them to
|
||
|
# interact with the server.
|
||
|
|
||
|
# Here we use ordinal arguments.
|
||
|
session.exchange_declare("test", "direct")
|
||
|
|
||
|
# Here we use keyword arguments.
|
||
|
session.queue_declare(queue="test-queue", exclusive=True, auto_delete=True)
|
||
|
session.exchange_bind(queue="test-queue", exchange="test", binding_key="key")
|
||
|
|
||
|
# Call Session.subscribe to register as a consumer.
|
||
|
# All the protocol methods return a message object. The message object
|
||
|
# has fields corresponding to the reply method fields, plus a content
|
||
|
# field that is filled if the reply includes content. In this case the
|
||
|
# interesting field is the consumer_tag.
|
||
|
session.message_subscribe(queue="test-queue", destination="consumer_tag")
|
||
|
session.message_flow(destination="consumer_tag", unit=session.credit_unit.message, value=0xFFFFFFFFL)
|
||
|
session.message_flow(destination="consumer_tag", unit=session.credit_unit.byte, value=0xFFFFFFFFL)
|
||
|
|
||
|
# We can use the session.incoming(...) method to access the messages
|
||
|
# delivered for our consumer_tag.
|
||
|
queue = session.incoming("consumer_tag")
|
||
|
|
||
|
# Now lets publish a message and see if our consumer gets it. To do
|
||
|
# this we need to import the Message class.
|
||
|
delivery_properties = session.delivery_properties(routing_key="key")
|
||
|
sent = Message(delivery_properties, "Hello World!")
|
||
|
session.message_transfer(destination="test", message=sent)
|
||
|
|
||
|
# Now we'll wait for the message to arrive. We can use the timeout
|
||
|
# argument in case the server hangs. By default queue.get() will wait
|
||
|
# until a message arrives or the connection to the server dies.
|
||
|
msg = queue.get(timeout=10)
|
||
|
|
||
|
# And check that we got the right response with assertEqual
|
||
|
self.assertEqual(sent.body, msg.body)
|
||
|
|
||
|
# Now acknowledge the message.
|
||
|
session.message_accept(RangedSet(msg.id))
|
||
|
|