You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@qpid.apache.org by jd...@apache.org on 2022/02/03 10:05:21 UTC
[qpid-proton] 01/03: PROTON-2471 Run raw connection examples during proton-c examples test
This is an automated email from the ASF dual-hosted git repository.
jdanek pushed a commit to branch jd_2022_02_03_macoslibssl
in repository https://gitbox.apache.org/repos/asf/qpid-proton.git
commit a9d62f18dd2d2545bfaad4a694228ce163d68d72
Author: Jiri Daněk <jd...@redhat.com>
AuthorDate: Mon Nov 29 16:51:00 2021 +0100
PROTON-2471 Run raw connection examples during proton-c examples test
---
c/examples/testme | 61 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 51 insertions(+), 10 deletions(-)
diff --git a/c/examples/testme b/c/examples/testme
index c498293..26dfa57 100755
--- a/c/examples/testme
+++ b/c/examples/testme
@@ -21,29 +21,34 @@
# Run the C examples and verify that they behave as expected.
# Example executables must be in PATH
+import socket
+import subprocess
import unittest
from test_subprocess import Popen, Server, TestProcessError, check_output
-MESSAGES=10
+MESSAGES = 10
-def receive_expect_messages(n=MESSAGES): return ''.join(['{"sequence"=%s}\n'%i for i in range(1, n+1)])
-def receive_expect_total(n=MESSAGES): return "%s messages received\n"%n
-def receive_expect(n=MESSAGES): return receive_expect_messages(n)+receive_expect_total(n)
+
+def receive_expect_messages(n=MESSAGES): return ''.join(['{"sequence"=%s}\n' % i for i in range(1, n + 1)])
+def receive_expect_total(n=MESSAGES): return "%s messages received\n" % n
+def receive_expect(n=MESSAGES): return receive_expect_messages(n) + receive_expect_total(n)
def send_expect(n=MESSAGES): return "%s messages sent and acknowledged\n" % n
def send_abort_expect(n=MESSAGES): return "%s messages started and aborted\n" % n
+
class Broker(Server):
def __init__(self):
super(Broker, self).__init__(["broker", "", "0"], kill_me=True)
+
class ExampleTest(unittest.TestCase):
- def runex(self, name, port, messages=MESSAGES):
+ def runex(self, name, port, messages: int = MESSAGES) -> str:
"""Run an example with standard arguments, return output"""
return check_output([name, "", port, "xtest", str(messages)])
- def startex(self, name, port, messages=MESSAGES):
+ def startex(self, name, port, messages: int = MESSAGES) -> Popen:
"""Start an example sub-process with standard arguments"""
return Popen([name, "", port, "xtest", str(messages)])
@@ -68,7 +73,7 @@ class ExampleTest(unittest.TestCase):
def test_receive_direct(self):
"""Receive from direct server"""
- d = Server(["direct", "", "0"])
+ d = Server(["direct", "", "0"])
self.assertMultiLineEqual(receive_expect(), self.runex("receive", d.port))
self.assertEqual("10 messages sent and acknowledged\n", d.communicate()[0])
@@ -80,8 +85,8 @@ class ExampleTest(unittest.TestCase):
for i in range(MESSAGES):
self.assertEqual("Message aborted\n", b.stdout.readline())
self.assertEqual(send_expect(), self.runex("send", b.port))
- expect = receive_expect_messages(MESSAGES)+receive_expect_messages(MESSAGES)+receive_expect_total(20)
- self.assertMultiLineEqual(expect, self.runex("receive", b.port, "20"))
+ expect = receive_expect_messages(MESSAGES) + receive_expect_messages(MESSAGES) + receive_expect_total(20)
+ self.assertMultiLineEqual(expect, self.runex("receive", b.port, 20))
def test_send_abort_direct(self):
"""Send aborted messages to the direct server"""
@@ -89,7 +94,7 @@ class ExampleTest(unittest.TestCase):
self.assertEqual(send_expect(), self.runex("send", d.port))
self.assertEqual(send_abort_expect(), self.runex("send-abort", d.port))
self.assertEqual(send_expect(), self.runex("send", d.port))
- expect = receive_expect_messages() + "Message aborted\n"*MESSAGES + receive_expect_messages()+receive_expect_total(20)
+ expect = receive_expect_messages() + "Message aborted\n" * MESSAGES + receive_expect_messages() + receive_expect_total(20)
self.maxDiff = None
self.assertMultiLineEqual(expect, d.communicate()[0])
@@ -107,5 +112,41 @@ class ExampleTest(unittest.TestCase):
else:
raise
+ def test_raw_connect(self):
+ message = b"At thee! Have at thee!\n"
+
+ with Server(["./raw_echo", "", "0"], kill_me=True) as server:
+ client = subprocess.Popen(args=["./raw_connect", "", server.port],
+ stdin=subprocess.PIPE, stdout=subprocess.PIPE)
+ client.stdin.write(message)
+ client.stdin.flush()
+ stdout, _ = client.communicate()
+
+ expected_brief = b'**raw connection connected\n' + message + b'**raw connection disconnected\n'
+ expected_polite = b'**raw connection connected\n' + message + b'** Goodbye ****raw connection disconnected\n'
+
+ expected = expected_polite if b'Goodbye' in stdout else expected_brief
+
+ self.assertEqual(expected, stdout)
+ self.assertEqual(client.returncode, 0)
+
+ def test_raw_echo(self):
+ """raw_echo example implements a TCP echo server"""
+ message = b"Hello world\n"
+
+ with Server(["./raw_echo", "", "0"], kill_me=True) as server:
+ s = socket.socket()
+ s.connect(("localhost", int(server.port)))
+ s.sendall(message)
+
+ data = b""
+ while len(data) != len(message):
+ buf = s.recv(1024)
+ data += buf
+
+ self.assertEqual(message, data)
+ s.close()
+
+
if __name__ == "__main__":
unittest.main()
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@qpid.apache.org
For additional commands, e-mail: commits-help@qpid.apache.org