summaryrefslogtreecommitdiff
path: root/gr-zeromq/python/zeromq/qa_zeromq_sub.py
diff options
context:
space:
mode:
authorAndriy Gelman <andriy.gelman@gmail.com>2020-01-12 01:54:44 -0500
committermormj <34754695+mormj@users.noreply.github.com>2020-03-02 18:15:24 -0500
commit1b362a2336f6f9b0db57021e280ff65e32409905 (patch)
treec8fcaef950c4661a652b90862e34a9629bdc42ae /gr-zeromq/python/zeromq/qa_zeromq_sub.py
parent5f18a419e2cec9f46d67147cae957d304d7a0195 (diff)
gr-zeromq: Add optional key filtering
Fixes #2236 Allows to filter a multi-part message by key/topic on a sub source and insert key/topic on a pub sink. Signed-off-by: Andriy Gelman <andriy.gelman@gmail.com>
Diffstat (limited to 'gr-zeromq/python/zeromq/qa_zeromq_sub.py')
-rwxr-xr-xgr-zeromq/python/zeromq/qa_zeromq_sub.py45
1 files changed, 44 insertions, 1 deletions
diff --git a/gr-zeromq/python/zeromq/qa_zeromq_sub.py b/gr-zeromq/python/zeromq/qa_zeromq_sub.py
index 63d8a978ef..9e82420c24 100755
--- a/gr-zeromq/python/zeromq/qa_zeromq_sub.py
+++ b/gr-zeromq/python/zeromq/qa_zeromq_sub.py
@@ -48,7 +48,6 @@ class qa_zeromq_sub (gr_unittest.TestCase):
def test_002 (self):
vlen = 10
-
# Construct multipart source data to publish
raw_data = [numpy.array(range(vlen), 'float32')*100, numpy.array(range(vlen, 2*vlen), 'float32')*100]
src_data = [a.tostring() for a in raw_data]
@@ -67,6 +66,50 @@ class qa_zeromq_sub (gr_unittest.TestCase):
expected_data = numpy.concatenate(raw_data)
self.assertFloatTuplesAlmostEqual(sink.data(), expected_data)
+ def test_003 (self):
+ # Check that message is received when correct key is used
+ # Construct multipart source data to publish
+ vlen = 10
+ raw_data = [numpy.array(range(vlen), 'float32')*100, numpy.array(range(vlen, 2*vlen), 'float32')*100]
+ src_data = [a.tostring() for a in raw_data]
+
+ src_data = [b"filter_key"] + src_data
+
+ zeromq_sub_source = zeromq.sub_source(gr.sizeof_float, vlen, self._address, key="filter_key")
+ sink = blocks.vector_sink_f(vlen)
+ self.tb.connect(zeromq_sub_source, sink)
+
+ self.tb.start()
+ time.sleep(0.05)
+ self.pub_socket.send_multipart(src_data)
+ time.sleep(0.5)
+ self.tb.stop()
+ self.tb.wait()
+
+ # Source block will concatenate everything together
+ expected_data = numpy.concatenate(raw_data)
+ self.assertFloatTuplesAlmostEqual(sink.data(), expected_data)
+
+ def test_004 (self):
+ # Test that no message is received when wrong key is used
+ vlen = 10
+ raw_data = [numpy.array(range(vlen), 'float32')*100, numpy.array(range(vlen, 2*vlen), 'float32')*100]
+ src_data = [a.tostring() for a in raw_data]
+
+ src_data = [b"filter_key"] + src_data
+
+ zeromq_sub_source = zeromq.sub_source(gr.sizeof_float, vlen, self._address, key="wrong_filter_key")
+ sink = blocks.vector_sink_f(vlen)
+ self.tb.connect(zeromq_sub_source, sink)
+
+ self.tb.start()
+ time.sleep(0.05)
+ self.pub_socket.send_multipart(src_data)
+ time.sleep(0.5)
+ self.tb.stop()
+ self.tb.wait()
+
+ assert( len(sink.data()) == 0 )
if __name__ == '__main__':
gr_unittest.run(qa_zeromq_sub)