diff options
author | Brian Orr <brian.orr@gmail.com> | 2017-08-09 17:35:21 -0700 |
---|---|---|
committer | Brian Orr <brian.orr@gmail.com> | 2017-08-09 17:35:21 -0700 |
commit | ff794c230e8f5215f5347b2d6903779fe8a2a9b3 (patch) | |
tree | 25dbc389565c97f89a638813293916382e002b28 /gr-blocks/python | |
parent | 811bee8c54bdca5c53c2ccbc6ef6d1bbca55eaae (diff) |
Fix invalid Asio buffer usage in tcp_connection
Asio requires that the underlying buffer passed to `async_write()`
remain valid valid until the handler was called. The previous version
was allocating a vector on the stack which gets destroyed once the
`send()` method returns.
Added a unit test for TCP server.
Diffstat (limited to 'gr-blocks/python')
-rwxr-xr-x | gr-blocks/python/blocks/qa_socket_pdu.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/gr-blocks/python/blocks/qa_socket_pdu.py b/gr-blocks/python/blocks/qa_socket_pdu.py index db9f53c71e..635e69ff80 100755 --- a/gr-blocks/python/blocks/qa_socket_pdu.py +++ b/gr-blocks/python/blocks/qa_socket_pdu.py @@ -100,6 +100,35 @@ class qa_socket_pdu (gr_unittest.TestCase): #self.tb.connect(pdu_to_ts, head, sink) self.tb.run() + def test_004 (self): + # Test that the TCP server can stream PDUs <= the MTU size. + port = str(random.Random().randint(0, 30000) + 10000) + mtu = 10000 + srcdata = tuple([x % 256 for x in xrange(mtu)]) + data = pmt.init_u8vector(srcdata.__len__(), srcdata) + pdu_msg = pmt.cons(pmt.PMT_NIL, data) + + self.pdu_source = blocks.message_strobe(pdu_msg, 500) + self.pdu_send = blocks.socket_pdu("TCP_SERVER", "localhost", port, mtu) + self.pdu_recv = blocks.socket_pdu("TCP_CLIENT", "localhost", port, mtu) + self.pdu_sink = blocks.message_debug() + + self.tb.msg_connect(self.pdu_source, "strobe", self.pdu_send, "pdus") + self.tb.msg_connect(self.pdu_recv, "pdus", self.pdu_sink, "store") + + self.tb.start() + while self.pdu_sink.num_messages() < 1: + time.sleep(0.1) + self.tb.stop() + self.tb.wait() + + received = self.pdu_sink.get_message(0) + received_data = pmt.cdr(received) + msg_data = [] + for i in xrange(mtu): + msg_data.append(pmt.u8vector_ref(received_data, i)) + self.assertEqual(srcdata, tuple(msg_data)) + if __name__ == '__main__': gr_unittest.run(qa_socket_pdu, "qa_socket_pdu.xml") |