diff options
author | Johnathan Corgan | 2010-05-24 21:26:34 -0700 |
---|---|---|
committer | Johnathan Corgan | 2010-05-24 21:26:34 -0700 |
commit | 7c50ceb026eaa26fccd438cbb8f915a29a06eaa5 (patch) | |
tree | 2d7e6b5a752209e3f870960fde5a8ba20aeb0833 /gnuradio-core/src/python | |
parent | 16c0a87dc5c53ca28071b76f50b31317d4c519f1 (diff) | |
parent | 6c0f2f5a5e4eddefc52c272c4b92065a225be3c5 (diff) | |
download | gnuradio-7c50ceb026eaa26fccd438cbb8f915a29a06eaa5.tar.gz gnuradio-7c50ceb026eaa26fccd438cbb8f915a29a06eaa5.tar.bz2 gnuradio-7c50ceb026eaa26fccd438cbb8f915a29a06eaa5.zip |
Merge branch 'master' into next
* master:
gnuradio-core: update copyrights
gnuradio-core: allow swig to handle exceptions in UDP source/sink
grc: update UDP source and sink block wrappers
Simplify USE_SELECT usage
Return immediately when using d_residual.
Defend against a peer that sends an invalid message length.
Move initialization of select timeout
Correct update of d_temp_offset (parallel construction)
Identify memory leaks that occur on error conditions
Use -1 as file descriptor "not open" value instead of 0
Add additional conditionalization of networking includes
Flush pending errors in gr_udp_sink on disconnect()
Rework UDP source and sink, with incompatible API changes
Updates to udp source/sink (select(), wait, cleanup)
Discard data in gr_udp_sink until receiver is started.
Use getaddrinfo in gr_udp_{source,sink}
Changes to gr_udp_{source,sink} for MinGW
Ignore ENOPROTOOPT return from setsockopt(SO_LINGER)
Diffstat (limited to 'gnuradio-core/src/python')
-rwxr-xr-x[-rw-r--r--] | gnuradio-core/src/python/gnuradio/gr/Makefile.am | 3 | ||||
-rwxr-xr-x | gnuradio-core/src/python/gnuradio/gr/qa_udp_sink_source.py | 99 |
2 files changed, 101 insertions, 1 deletions
diff --git a/gnuradio-core/src/python/gnuradio/gr/Makefile.am b/gnuradio-core/src/python/gnuradio/gr/Makefile.am index 3aff89ee7..341f58812 100644..100755 --- a/gnuradio-core/src/python/gnuradio/gr/Makefile.am +++ b/gnuradio-core/src/python/gnuradio/gr/Makefile.am @@ -1,5 +1,5 @@ # -# Copyright 2004,2005,2006,2008 Free Software Foundation, Inc. +# Copyright 2004,2005,2006,2008,2010 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -97,4 +97,5 @@ noinst_PYTHON = \ qa_unpack_k_bits.py \ qa_repeat.py \ qa_scrambler.py \ + qa_udp_sink_source.py \ qa_vector_sink_source.py diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_udp_sink_source.py b/gnuradio-core/src/python/gnuradio/gr/qa_udp_sink_source.py new file mode 100755 index 000000000..b00b26bbe --- /dev/null +++ b/gnuradio-core/src/python/gnuradio/gr/qa_udp_sink_source.py @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# +# Copyright 2008,2010 Free Software Foundation, Inc. +# +# This file is part of GNU Radio +# +# GNU Radio is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3, or (at your option) +# any later version. +# +# GNU Radio is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with GNU Radio; see the file COPYING. If not, write to +# the Free Software Foundation, Inc., 51 Franklin Street, +# Boston, MA 02110-1301, USA. +# + +from gnuradio import gr, gr_unittest +from threading import Timer + +class test_sink_source(gr_unittest.TestCase): + + def setUp(self): + self.tb_snd = gr.top_block() + self.tb_rcv = gr.top_block() + + def tearDown(self): + self.tb_rcv = None + self.tb_snd = None + + def test_001(self): + port = 65500 + + n_data = 16 + src_data = [float(x) for x in range(n_data)] + expected_result = tuple(src_data) + src = gr.vector_source_f(src_data) + udp_snd = gr.udp_sink( gr.sizeof_float, 'localhost', port ) + self.tb_snd.connect( src, udp_snd ) + + udp_rcv = gr.udp_source( gr.sizeof_float, 'localhost', port ) + dst = gr.vector_sink_f() + self.tb_rcv.connect( udp_rcv, dst ) + + self.tb_rcv.start() + self.tb_snd.run() + udp_snd.disconnect() + self.timeout = False + q = Timer(3.0,self.stop_rcv) + q.start() + self.tb_rcv.wait() + q.cancel() + + result_data = dst.data() + self.assertEqual(expected_result, result_data) + self.assert_(not self.timeout) + + def test_002(self): + udp_rcv = gr.udp_source( gr.sizeof_float, '0.0.0.0', 0, eof=False ) + rcv_port = udp_rcv.get_port() + + udp_snd = gr.udp_sink( gr.sizeof_float, '127.0.0.1', 65500 ) + udp_snd.connect( 'localhost', rcv_port ) + + n_data = 16 + src_data = [float(x) for x in range(n_data)] + expected_result = tuple(src_data) + src = gr.vector_source_f(src_data) + dst = gr.vector_sink_f() + + self.tb_snd.connect( src, udp_snd ) + self.tb_rcv.connect( udp_rcv, dst ) + + self.tb_rcv.start() + self.tb_snd.run() + udp_snd.disconnect() + self.timeout = False + q = Timer(3.0,self.stop_rcv) + q.start() + self.tb_rcv.wait() + q.cancel() + + result_data = dst.data() + self.assertEqual(expected_result, result_data) + self.assert_(self.timeout) # source ignores EOF? + + def stop_rcv(self): + self.timeout = True + self.tb_rcv.stop() + #print "tb_rcv stopped by Timer" + +if __name__ == '__main__': + gr_unittest.main () + |