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