You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by rh...@apache.org on 2009/08/11 17:40:20 UTC
svn commit: r803168 [2/2] - in /qpid/trunk/qpid/python: ./ qpid/ qpid/tests/
tests/ tests_0-10/ tests_0-8/ tests_0-9/
Modified: qpid/trunk/qpid/python/tests/connection.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests/connection.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests/connection.py (original)
+++ qpid/trunk/qpid/python/tests/connection.py Tue Aug 11 15:40:19 2009
@@ -22,10 +22,10 @@
from qpid.util import connect, listen
from qpid.connection import *
from qpid.datatypes import Message
-from qpid.testlib import testrunner
from qpid.delegates import Server
from qpid.queue import Queue
from qpid.session import Delegate
+from qpid.ops import QueueQueryResult
PORT = 1234
@@ -51,12 +51,12 @@
pass
def queue_query(self, qq):
- return qq._type.result.type.new((qq.queue,), {})
+ return QueueQueryResult(qq.queue)
- def message_transfer(self, cmd, headers, body):
+ def message_transfer(self, cmd):
if cmd.destination == "echo":
- m = Message(body)
- m.headers = headers
+ m = Message(cmd.payload)
+ m.headers = cmd.headers
self.session.message_transfer(cmd.destination, cmd.accept_mode,
cmd.acquire_mode, m)
elif cmd.destination == "abort":
@@ -64,7 +64,7 @@
elif cmd.destination == "heartbeat":
self.session.channel.connection_heartbeat()
else:
- self.queue.put((cmd, headers, body))
+ self.queue.put(cmd)
class ConnectionTest(TestCase):
@@ -134,17 +134,17 @@
ssn.message_transfer(d)
for d in destinations:
- cmd, header, body = self.queue.get(10)
+ cmd = self.queue.get(10)
assert cmd.destination == d
- assert header == None
- assert body == None
+ assert cmd.headers == None
+ assert cmd.payload == None
msg = Message("this is a test")
ssn.message_transfer("four", message=msg)
- cmd, header, body = self.queue.get(10)
+ cmd = self.queue.get(10)
assert cmd.destination == "four"
- assert header == None
- assert body == msg.body
+ assert cmd.headers == None
+ assert cmd.payload == msg.body
qq = ssn.queue_query("asdf")
assert qq.queue == "asdf"
Modified: qpid/trunk/qpid/python/tests/datatypes.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests/datatypes.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests/datatypes.py (original)
+++ qpid/trunk/qpid/python/tests/datatypes.py Tue Aug 11 15:40:19 2009
@@ -18,9 +18,8 @@
#
from unittest import TestCase
-from qpid.testlib import testrunner
-from qpid.spec010 import load
from qpid.datatypes import *
+from qpid.ops import DeliveryProperties, FragmentProperties, MessageProperties
class SerialTest(TestCase):
@@ -176,10 +175,9 @@
class MessageTest(TestCase):
def setUp(self):
- self.spec = load(testrunner.get_spec_file("amqp.0-10-qpid-errata.xml"))
- self.mp = Struct(self.spec["message.message_properties"])
- self.dp = Struct(self.spec["message.delivery_properties"])
- self.fp = Struct(self.spec["message.fragment_properties"])
+ self.mp = MessageProperties()
+ self.dp = DeliveryProperties()
+ self.fp = FragmentProperties()
def testHas(self):
m = Message(self.mp, self.dp, self.fp, "body")
@@ -207,7 +205,7 @@
def testSetReplace(self):
m = Message(self.mp, self.dp, self.fp, "body")
- dp = Struct(self.spec["message.delivery_properties"])
+ dp = DeliveryProperties()
assert m.get("delivery_properties") == self.dp
assert m.get("delivery_properties") != dp
m.set(dp)
Modified: qpid/trunk/qpid/python/tests/spec010.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests/spec010.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests/spec010.py (original)
+++ qpid/trunk/qpid/python/tests/spec010.py Tue Aug 11 15:40:19 2009
@@ -19,66 +19,56 @@
import os, tempfile, shutil, stat
from unittest import TestCase
-from qpid.spec010 import load
from qpid.codec010 import Codec, StringCodec
-from qpid.testlib import testrunner
-from qpid.datatypes import Struct
+from qpid.ops import *
class SpecTest(TestCase):
- def setUp(self):
- self.spec = load(testrunner.get_spec_file("amqp.0-10-qpid-errata.xml"))
-
def testSessionHeader(self):
- hdr = self.spec["session.header"]
- sc = StringCodec(self.spec)
- hdr.encode(sc, Struct(hdr, sync=True))
+ sc = StringCodec()
+ sc.write_compound(Header(sync=True))
assert sc.encoded == "\x01\x01"
- sc = StringCodec(self.spec)
- hdr.encode(sc, Struct(hdr, sync=False))
+ sc = StringCodec()
+ sc.write_compound(Header(sync=False))
assert sc.encoded == "\x01\x00"
- def encdec(self, type, value):
- sc = StringCodec(self.spec)
- type.encode(sc, value)
- decoded = type.decode(sc)
+ def encdec(self, value):
+ sc = StringCodec()
+ sc.write_compound(value)
+ decoded = sc.read_compound(value.__class__)
return decoded
def testMessageProperties(self):
- mp = self.spec["message.message_properties"]
- rt = self.spec["message.reply_to"]
-
- props = Struct(mp, content_length=3735928559L,
- reply_to=Struct(rt, exchange="the exchange name",
- routing_key="the routing key"))
- dec = self.encdec(mp, props)
+ props = MessageProperties(content_length=3735928559L,
+ reply_to=ReplyTo(exchange="the exchange name",
+ routing_key="the routing key"))
+ dec = self.encdec(props)
assert props.content_length == dec.content_length
assert props.reply_to.exchange == dec.reply_to.exchange
assert props.reply_to.routing_key == dec.reply_to.routing_key
def testMessageSubscribe(self):
- ms = self.spec["message.subscribe"]
- cmd = Struct(ms, exclusive=True, destination="this is a test")
- dec = self.encdec(self.spec["message.subscribe"], cmd)
+ cmd = MessageSubscribe(exclusive=True, destination="this is a test")
+ dec = self.encdec(cmd)
assert cmd.exclusive == dec.exclusive
assert cmd.destination == dec.destination
def testXid(self):
- xid = self.spec["dtx.xid"]
- sc = StringCodec(self.spec)
- st = Struct(xid, format=0, global_id="gid", branch_id="bid")
- xid.encode(sc, st)
+ sc = StringCodec()
+ xid = Xid(format=0, global_id="gid", branch_id="bid")
+ sc.write_compound(xid)
assert sc.encoded == '\x00\x00\x00\x10\x06\x04\x07\x00\x00\x00\x00\x00\x03gid\x03bid'
- assert xid.decode(sc).__dict__ == st.__dict__
+ dec = sc.read_compound(Xid)
+ assert xid.__dict__ == dec.__dict__
- def testLoadReadOnly(self):
- spec = "amqp.0-10-qpid-errata.xml"
- f = testrunner.get_spec_file(spec)
- dest = tempfile.mkdtemp()
- shutil.copy(f, dest)
- shutil.copy(os.path.join(os.path.dirname(f), "amqp.0-10.dtd"), dest)
- os.chmod(dest, stat.S_IRUSR | stat.S_IXUSR)
- fname = os.path.join(dest, spec)
- load(fname)
- assert not os.path.exists("%s.pcl" % fname)
+# def testLoadReadOnly(self):
+# spec = "amqp.0-10-qpid-errata.xml"
+# f = testrunner.get_spec_file(spec)
+# dest = tempfile.mkdtemp()
+# shutil.copy(f, dest)
+# shutil.copy(os.path.join(os.path.dirname(f), "amqp.0-10.dtd"), dest)
+# os.chmod(dest, stat.S_IRUSR | stat.S_IXUSR)
+# fname = os.path.join(dest, spec)
+# load(fname)
+# assert not os.path.exists("%s.pcl" % fname)
Modified: qpid/trunk/qpid/python/tests_0-10/message.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-10/message.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-10/message.py (original)
+++ qpid/trunk/qpid/python/tests_0-10/message.py Tue Aug 11 15:40:19 2009
@@ -477,7 +477,7 @@
#send message A
ssn.message_transfer(message=Message(ssn.delivery_properties(routing_key="q"), "A"))
- for unit in ssn.credit_unit.values():
+ for unit in ssn.credit_unit.VALUES:
ssn.message_flow("c", unit, 0xFFFFFFFFL)
q = ssn.incoming("c")
@@ -490,7 +490,7 @@
ssn.channel.session_completed(ssn.receiver._completed)
ssn.message_accept(RangedSet(msgA.id))
- for unit in ssn.credit_unit.values():
+ for unit in ssn.credit_unit.VALUES:
ssn.message_flow("c", unit, 0xFFFFFFFFL)
#send message B
Modified: qpid/trunk/qpid/python/tests_0-10/tx.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-10/tx.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-10/tx.py (original)
+++ qpid/trunk/qpid/python/tests_0-10/tx.py Tue Aug 11 15:40:19 2009
@@ -19,7 +19,7 @@
from qpid.client import Client, Closed
from qpid.queue import Empty
from qpid.datatypes import Message, RangedSet
-from qpid.testlib import testrunner, TestBase010
+from qpid.testlib import TestBase010
class TxTests(TestBase010):
"""
Modified: qpid/trunk/qpid/python/tests_0-8/__init__.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-8/__init__.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-8/__init__.py (original)
+++ qpid/trunk/qpid/python/tests_0-8/__init__.py Tue Aug 11 15:40:19 2009
@@ -18,3 +18,5 @@
# specific language governing permissions and limitations
# under the License.
#
+
+import basic, broker, example, exchange, queue, testlib, tx
Modified: qpid/trunk/qpid/python/tests_0-8/basic.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-8/basic.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-8/basic.py (original)
+++ qpid/trunk/qpid/python/tests_0-8/basic.py Tue Aug 11 15:40:19 2009
@@ -19,7 +19,7 @@
from qpid.client import Client, Closed
from qpid.queue import Empty
from qpid.content import Content
-from qpid.testlib import testrunner, TestBase
+from qpid.testlib import TestBase
class BasicTests(TestBase):
"""Tests for 'methods' on the amqp basic 'class'"""
@@ -219,10 +219,11 @@
channel.basic_ack(delivery_tag=msg4.delivery_tag, multiple=False) #Four
channel.basic_cancel(consumer_tag=subscription.consumer_tag)
- subscription2 = channel.basic_consume(queue="test-requeue")
- queue2 = self.client.queue(subscription2.consumer_tag)
channel.basic_recover(requeue=True)
+
+ subscription2 = channel.basic_consume(queue="test-requeue")
+ queue2 = self.client.queue(subscription2.consumer_tag)
msg3b = queue2.get(timeout=1)
msg5b = queue2.get(timeout=1)
Modified: qpid/trunk/qpid/python/tests_0-8/broker.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-8/broker.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-8/broker.py (original)
+++ qpid/trunk/qpid/python/tests_0-8/broker.py Tue Aug 11 15:40:19 2009
@@ -19,15 +19,15 @@
from qpid.client import Closed
from qpid.queue import Empty
from qpid.content import Content
-from qpid.testlib import testrunner, TestBase
+from qpid.testlib import TestBase
class BrokerTests(TestBase):
"""Tests for basic Broker functionality"""
- def test_amqp_basic_13(self):
+ def test_ack_and_no_ack(self):
"""
First, this test tries to receive a message with a no-ack
- consumer. Second, this test tries to explicitely receive and
+ consumer. Second, this test tries to explicitly receive and
acknowledge a message with an acknowledging consumer.
"""
ch = self.channel
@@ -40,7 +40,7 @@
msg = self.client.queue(ctag).get(timeout = 5)
self.assert_(msg.content.body == body)
- # Acknowleding consumer
+ # Acknowledging consumer
self.queue_declare(ch, queue = "otherqueue")
ctag = ch.basic_consume(queue = "otherqueue", no_ack = False).consumer_tag
body = "test ack"
@@ -102,3 +102,19 @@
except Closed, e:
self.assertConnectionException(504, e.args[0])
+ def test_channel_flow(self):
+ channel = self.channel
+ channel.queue_declare(queue="flow_test_queue", exclusive=True)
+ ctag = channel.basic_consume(queue="flow_test_queue", no_ack=True).consumer_tag
+ incoming = self.client.queue(ctag)
+
+ channel.channel_flow(active=False)
+ channel.basic_publish(routing_key="flow_test_queue", content=Content("abcdefghijklmnopqrstuvwxyz"))
+ try:
+ incoming.get(timeout=1)
+ self.fail("Received message when flow turned off.")
+ except Empty: None
+
+ channel.channel_flow(active=True)
+ msg = incoming.get(timeout=1)
+ self.assertEqual("abcdefghijklmnopqrstuvwxyz", msg.content.body)
Modified: qpid/trunk/qpid/python/tests_0-8/example.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-8/example.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-8/example.py (original)
+++ qpid/trunk/qpid/python/tests_0-8/example.py Tue Aug 11 15:40:19 2009
@@ -18,7 +18,7 @@
#
from qpid.content import Content
-from qpid.testlib import testrunner, TestBase
+from qpid.testlib import TestBase
class ExampleTest (TestBase):
"""
Modified: qpid/trunk/qpid/python/tests_0-8/queue.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-8/queue.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-8/queue.py (original)
+++ qpid/trunk/qpid/python/tests_0-8/queue.py Tue Aug 11 15:40:19 2009
@@ -19,7 +19,7 @@
from qpid.client import Client, Closed
from qpid.queue import Empty
from qpid.content import Content
-from qpid.testlib import testrunner, TestBase
+from qpid.testlib import TestBase
class QueueTests(TestBase):
"""Tests for 'methods' on the amqp queue 'class'"""
Modified: qpid/trunk/qpid/python/tests_0-8/testlib.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-8/testlib.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-8/testlib.py (original)
+++ qpid/trunk/qpid/python/tests_0-8/testlib.py Tue Aug 11 15:40:19 2009
@@ -22,7 +22,7 @@
#
from qpid.content import Content
-from qpid.testlib import testrunner, TestBase
+from qpid.testlib import TestBase
from Queue import Empty
import sys
Modified: qpid/trunk/qpid/python/tests_0-8/tx.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-8/tx.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-8/tx.py (original)
+++ qpid/trunk/qpid/python/tests_0-8/tx.py Tue Aug 11 15:40:19 2009
@@ -19,7 +19,7 @@
from qpid.client import Client, Closed
from qpid.queue import Empty
from qpid.content import Content
-from qpid.testlib import testrunner, TestBase
+from qpid.testlib import TestBase
class TxTests(TestBase):
"""
Modified: qpid/trunk/qpid/python/tests_0-9/__init__.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-9/__init__.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-9/__init__.py (original)
+++ qpid/trunk/qpid/python/tests_0-9/__init__.py Tue Aug 11 15:40:19 2009
@@ -18,3 +18,5 @@
# specific language governing permissions and limitations
# under the License.
#
+
+import query, queue
Modified: qpid/trunk/qpid/python/tests_0-9/query.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-9/query.py?rev=803168&r1=803167&r2=803168&view=diff
==============================================================================
--- qpid/trunk/qpid/python/tests_0-9/query.py (original)
+++ qpid/trunk/qpid/python/tests_0-9/query.py Tue Aug 11 15:40:19 2009
@@ -19,7 +19,7 @@
from qpid.client import Client, Closed
from qpid.queue import Empty
from qpid.content import Content
-from qpid.testlib import testrunner, TestBase
+from qpid.testlib import TestBase
class QueryTests(TestBase):
"""Tests for various query methods introduced in 0-10 and available in 0-9 for preview"""
Added: qpid/trunk/qpid/python/tests_0-9/queue.py
URL: http://svn.apache.org/viewvc/qpid/trunk/qpid/python/tests_0-9/queue.py?rev=803168&view=auto
==============================================================================
--- qpid/trunk/qpid/python/tests_0-9/queue.py (added)
+++ qpid/trunk/qpid/python/tests_0-9/queue.py Tue Aug 11 15:40:19 2009
@@ -0,0 +1,111 @@
+#
+# 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.client import Client, Closed
+from qpid.queue import Empty
+from qpid.content import Content
+from qpid.testlib import TestBase
+
+class QueueTests(TestBase):
+ """Tests for 'methods' on the amqp queue 'class'"""
+
+ def test_unbind_direct(self):
+ self.unbind_test(exchange="amq.direct", routing_key="key")
+
+ def test_unbind_topic(self):
+ self.unbind_test(exchange="amq.topic", routing_key="key")
+
+ def test_unbind_fanout(self):
+ self.unbind_test(exchange="amq.fanout")
+
+ def test_unbind_headers(self):
+ self.unbind_test(exchange="amq.match", args={ "x-match":"all", "a":"b"}, headers={"a":"b"})
+
+ def unbind_test(self, exchange, routing_key="", args=None, headers={}):
+ #bind two queues and consume from them
+ channel = self.channel
+
+ channel.queue_declare(queue="queue-1", exclusive="True")
+ channel.queue_declare(queue="queue-2", exclusive="True")
+
+ channel.basic_consume(queue="queue-1", consumer_tag="queue-1", no_ack=True)
+ channel.basic_consume(queue="queue-2", consumer_tag="queue-2", no_ack=True)
+
+ queue1 = self.client.queue("queue-1")
+ queue2 = self.client.queue("queue-2")
+
+ channel.queue_bind(exchange=exchange, queue="queue-1", routing_key=routing_key, arguments=args)
+ channel.queue_bind(exchange=exchange, queue="queue-2", routing_key=routing_key, arguments=args)
+
+ #send a message that will match both bindings
+ channel.basic_publish(exchange=exchange, routing_key=routing_key,
+ content=Content("one", properties={"headers": headers}))
+
+ #unbind first queue
+ channel.queue_unbind(exchange=exchange, queue="queue-1", routing_key=routing_key, arguments=args)
+
+ #send another message
+ channel.basic_publish(exchange=exchange, routing_key=routing_key,
+ content=Content("two", properties={"headers": headers}))
+
+ #check one queue has both messages and the other has only one
+ self.assertEquals("one", queue1.get(timeout=1).content.body)
+ try:
+ msg = queue1.get(timeout=1)
+ self.fail("Got extra message: %s" % msg.body)
+ except Empty: pass
+
+ self.assertEquals("one", queue2.get(timeout=1).content.body)
+ self.assertEquals("two", queue2.get(timeout=1).content.body)
+ try:
+ msg = queue2.get(timeout=1)
+ self.fail("Got extra message: " + msg)
+ except Empty: pass
+
+ def test_autodelete_shared(self):
+ """
+ Test auto-deletion (of non-exclusive queues)
+ """
+ channel = self.channel
+ other = self.connect()
+ channel2 = other.channel(1)
+ channel2.channel_open()
+
+ channel.queue_declare(queue="auto-delete-me", auto_delete=True)
+
+ #consume from both channels
+ reply = channel.basic_consume(queue="auto-delete-me", no_ack=True)
+ channel2.basic_consume(queue="auto-delete-me", no_ack=True)
+
+ #implicit cancel
+ channel2.channel_close()
+
+ #check it is still there
+ channel.queue_declare(queue="auto-delete-me", passive=True)
+
+ #explicit cancel => queue is now unused again:
+ channel.basic_cancel(consumer_tag=reply.consumer_tag)
+
+ #NOTE: this assumes there is no timeout in use
+
+ #check that it has gone be declaring passively
+ try:
+ channel.queue_declare(queue="auto-delete-me", passive=True)
+ self.fail("Expected queue to have been deleted")
+ except Closed, e:
+ self.assertChannelException(404, e.args[0])
Propchange: qpid/trunk/qpid/python/tests_0-9/queue.py
------------------------------------------------------------------------------
svn:mergeinfo =
---------------------------------------------------------------------
Apache Qpid - AMQP Messaging Implementation
Project: http://qpid.apache.org
Use/Interact: mailto:commits-subscribe@qpid.apache.org