From 75b01cc4f55c38dfe5bb329c23df591e43cf4c66 Mon Sep 17 00:00:00 2001
From: Tom Rondeau <trondeau@vt.edu>
Date: Fri, 14 Dec 2012 12:05:00 -0500
Subject: core: Added detached header test to file metadata QA.

Also adds a flush when updating the headers.
---
 .../src/python/gnuradio/gr/qa_file_metadata.py     | 84 +++++++++++++++++++++-
 1 file changed, 81 insertions(+), 3 deletions(-)

(limited to 'gnuradio-core/src/python')

diff --git a/gnuradio-core/src/python/gnuradio/gr/qa_file_metadata.py b/gnuradio-core/src/python/gnuradio/gr/qa_file_metadata.py
index 8ce1f3d5a5..849f322991 100644
--- a/gnuradio-core/src/python/gnuradio/gr/qa_file_metadata.py
+++ b/gnuradio-core/src/python/gnuradio/gr/qa_file_metadata.py
@@ -23,7 +23,7 @@
 from gnuradio import gr, gr_unittest
 from gnuradio import parse_file_metadata
 import pmt
-import os
+import os, time
 
 class test_file_metadata(gr_unittest.TestCase):
 
@@ -50,6 +50,7 @@ class test_file_metadata(gr_unittest.TestCase):
                                  samp_rate, 1, 
                                  gr.GR_FILE_FLOAT, True,
                                  1000000, extras_str, detached)
+        fsnk.set_unbuffered(True)
 
 	self.tb.connect(src, head, fsnk)
 	self.tb.run()
@@ -110,9 +111,86 @@ class test_file_metadata(gr_unittest.TestCase):
 
 	os.remove(outfile)
 
-    def est_002(self):
-        fsrc = gr.file_meta_source("/tmp/metadat_file.out", False, True, "/tmp/metadat_file.out.hdr")
+    def test_002(self):
+	outfile = "test_out.dat"
+	outfile_hdr = "test_out.dat.hdr"
+
+        detached = True
+        samp_rate = 200000
+        key = pmt.pmt_intern("samp_rate")
+        val = pmt.pmt_from_double(samp_rate)
+        extras = pmt.pmt_make_dict()
+        extras = pmt.pmt_dict_add(extras, key, val)
+        extras_str = pmt.pmt_serialize_str(extras)
+
+        src = gr.sig_source_c(samp_rate, gr.GR_COS_WAVE, 1000, 1, 0)
+        head = gr.head(gr.sizeof_gr_complex, 1000)
+        fsnk = gr.file_meta_sink(gr.sizeof_gr_complex, outfile,
+                                 samp_rate, 1, 
+                                 gr.GR_FILE_FLOAT, True,
+                                 1000000, extras_str, detached)
+        fsnk.set_unbuffered(True)
+
+	self.tb.connect(src, head, fsnk)
+	self.tb.run()
+        fsnk.close()
+
+        # Open detached header for reading
+        handle = open(outfile_hdr, "rb")
+        header_str = handle.read(parse_file_metadata.HEADER_LENGTH)
+        if(len(header_str) == 0):
+            self.assertFalse()
+
+        try:
+            header = pmt.pmt_deserialize_str(header_str)
+        except RuntimeError:
+            self.assertFalse()
+
+        info = parse_file_metadata.parse_header(header, False)
 
+        extra_str = handle.read(info["extra_len"])
+        self.assertGreater(len(extra_str), 0)
+        handle.close()
+
+        try:
+            extra = pmt.pmt_deserialize_str(extra_str)
+        except RuntimeError:
+            self.assertFalse()
+
+        extra_info = parse_file_metadata.parse_extra_dict(extra, info, False)
+
+        self.assertEqual(info['rx_rate'], samp_rate)
+        self.assertEqual(pmt.pmt_to_double(extra_info['samp_rate']), samp_rate)
+
+
+        # Test file metadata source
+        # Create a new sig source to start from the beginning
+        src2 = gr.sig_source_c(samp_rate, gr.GR_COS_WAVE, 1000, 1, 0)
+        fsrc = gr.file_meta_source(outfile, False, detached, outfile_hdr)
+        vsnk = gr.vector_sink_c()
+        tsnk = gr.tag_debug(gr.sizeof_gr_complex, "QA")
+        ssnk = gr.vector_sink_c()
+        head.reset()
+        self.tb.disconnect(src, head, fsnk)
+        self.tb.connect(fsrc, vsnk)
+        self.tb.connect(fsrc, tsnk)
+        self.tb.connect(src2, head, ssnk)
+        self.tb.run()
+
+        # Test to make sure tags with 'samp_rate' and 'rx_rate' keys
+        # were generated and received correctly.
+        tags = tsnk.current_tags()
+        for t in tags:
+            if(pmt.pmt_eq(t.key, pmt.pmt_intern("samp_rate"))):
+                self.assertEqual(pmt.pmt_to_double(t.value), samp_rate)
+            elif(pmt.pmt_eq(t.key, pmt.pmt_intern("rx_rate"))):
+                self.assertEqual(pmt.pmt_to_double(t.value), samp_rate)
+
+        # Test that the data portion was extracted and received correctly.
+        self.assertComplexTuplesAlmostEqual(vsnk.data(), ssnk.data(), 5)
+
+	os.remove(outfile)
+	os.remove(outfile_hdr)
 
 if __name__ == '__main__':
     gr_unittest.run(test_file_metadata, "test_file_metadata.xml")
-- 
cgit v1.2.3