qpid-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From acon...@apache.org
Subject [2/2] qpid-proton git commit: PROTON-805: Add tests and examples for utils.SyncRequestResponse.
Date Mon, 26 Jan 2015 21:22:32 GMT
 PROTON-805: Add tests and examples for utils.SyncRequestResponse.


Project: http://git-wip-us.apache.org/repos/asf/qpid-proton/repo
Commit: http://git-wip-us.apache.org/repos/asf/qpid-proton/commit/270607f7
Tree: http://git-wip-us.apache.org/repos/asf/qpid-proton/tree/270607f7
Diff: http://git-wip-us.apache.org/repos/asf/qpid-proton/diff/270607f7

Branch: refs/heads/master
Commit: 270607f7f078d0efc334ee83bd1e7594c8e8204c
Parents: 3d41839
Author: Alan Conway <aconway@redhat.com>
Authored: Mon Jan 26 16:16:12 2015 -0500
Committer: Alan Conway <aconway@redhat.com>
Committed: Mon Jan 26 16:20:40 2015 -0500

----------------------------------------------------------------------
 tests/python/proton_tests/__init__.py |  1 +
 tests/python/proton_tests/common.py   |  3 ++
 tests/python/proton_tests/utils.py    | 86 ++++++++++++++++++++++++++++++
 3 files changed, 90 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/270607f7/tests/python/proton_tests/__init__.py
----------------------------------------------------------------------
diff --git a/tests/python/proton_tests/__init__.py b/tests/python/proton_tests/__init__.py
index 1cecf38..b0f164a 100644
--- a/tests/python/proton_tests/__init__.py
+++ b/tests/python/proton_tests/__init__.py
@@ -27,3 +27,4 @@ import proton_tests.ssl
 import proton_tests.interop
 import proton_tests.soak
 import proton_tests.url
+import proton_tests.utils

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/270607f7/tests/python/proton_tests/common.py
----------------------------------------------------------------------
diff --git a/tests/python/proton_tests/common.py b/tests/python/proton_tests/common.py
index dcebe1f..e164cc3 100644
--- a/tests/python/proton_tests/common.py
+++ b/tests/python/proton_tests/common.py
@@ -46,6 +46,9 @@ def free_tcp_ports(count=1):
     s.close()
   return ports
 
+def free_tcp_port():
+  return free_tcp_ports(1)[0]
+
 def pump_uni(src, dst, buffer_size=1024):
   p = src.pending()
   c = dst.capacity()

http://git-wip-us.apache.org/repos/asf/qpid-proton/blob/270607f7/tests/python/proton_tests/utils.py
----------------------------------------------------------------------
diff --git a/tests/python/proton_tests/utils.py b/tests/python/proton_tests/utils.py
new file mode 100644
index 0000000..41a7e71
--- /dev/null
+++ b/tests/python/proton_tests/utils.py
@@ -0,0 +1,86 @@
+#
+# 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.
+#
+
+import os
+from threading import Thread
+from unittest import TestCase
+from .common import Test, free_tcp_port
+from copy import copy
+from proton import Message, Url, generate_uuid
+from proton.handlers import MessagingHandler
+from proton.reactors import Container, send_msg, delivery_tags
+from proton.utils import SyncRequestResponse, BlockingConnection
+
+
+class EchoServer(MessagingHandler, Thread):
+    """
+    Simple echo server that echos messages to their reply-to. Runs in a thread.
+    Will only accept a single connection and shut down when that connection closes.
+    """
+
+    def __init__(self, url):
+        MessagingHandler.__init__(self)
+        Thread.__init__(self)
+        self.url = url
+        self.senders = {}
+        self.container = None
+
+    def on_start(self, event):
+        self.acceptor = event.container.listen(self.url)
+        self.container = event.container
+
+    def on_link_opening(self, event):
+        if event.link.is_sender:
+            if event.link.remote_source and event.link.remote_source.dynamic:
+                event.link.source.address = str(generate_uuid())
+                self.senders[event.link.source.address] = event.link
+                event.link.tags = delivery_tags()
+
+    def on_message(self, event):
+        m = event.message
+        sender = self.senders.get(m.reply_to)
+        if sender:
+            reply = Message(address=m.reply_to, body=m.body, correlation_id=m.correlation_id)
+            send_msg(sender, reply)
+
+    def on_connection_closing(self, event):
+        self.acceptor.close()
+
+    def run(self):
+        Container(self).run()
+
+
+class SyncRequestResponseTest(Test):
+    """Test SyncRequestResponse"""
+
+    def test_request_response(self):
+        def test(name, address="x"):
+            for i in xrange(5):
+                body="%s%s" % (name, i)
+                response = client.call(Message(address=address, body=body))
+                self.assertEquals(response.address, client.reply_to)
+                self.assertEquals(response.body, body)
+
+        server = EchoServer(Url(port=free_tcp_port()))
+        server.start()
+        client = SyncRequestResponse(BlockingConnection(server.url))
+        try:
+            test("foo")         # Simple request/resposne
+        finally:
+            client.connection.close()


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org


Mime
View raw message