From 5e074912b03934b9ba27473115e12f77072cbc09 Mon Sep 17 00:00:00 2001
From: ldam <ldam@passcal.nmt.edu>
Date: Tue, 29 Aug 2023 09:12:19 -0600
Subject: [PATCH] unittest for reftek

---
 tests/model/reftek_data/__init__.py    |   0
 tests/model/reftek_data/test_reftek.py | 150 +++++++++++++++++++++++++
 2 files changed, 150 insertions(+)
 create mode 100644 tests/model/reftek_data/__init__.py
 create mode 100644 tests/model/reftek_data/test_reftek.py

diff --git a/tests/model/reftek_data/__init__.py b/tests/model/reftek_data/__init__.py
new file mode 100644
index 000000000..e69de29bb
diff --git a/tests/model/reftek_data/test_reftek.py b/tests/model/reftek_data/test_reftek.py
new file mode 100644
index 000000000..8bb2a7174
--- /dev/null
+++ b/tests/model/reftek_data/test_reftek.py
@@ -0,0 +1,150 @@
+from unittest import TestCase
+from pathlib import Path
+
+from sohstationviewer.model.reftek_data.reftek import RT130
+from sohstationviewer.model.general_data.general_data import \
+    ProcessingDataError
+
+
+TEST_DATA_DIR = Path(__file__).resolve().parent.parent.parent.joinpath(
+    'test_data')
+reftek_data = TEST_DATA_DIR.joinpath("RT130-sample")
+reftek_gap_data = TEST_DATA_DIR.joinpath("RT130-gap")
+
+
+class TestReftek(TestCase):
+    def test_path_not_exist(self):
+        # raise exception when path not exist
+        args = {
+            'data_type': 'RT130',
+            'folder': '_',
+            'rt130_waveform_data_req': False,
+            'on_unittest': True
+        }
+        with self.assertRaises(ProcessingDataError) as context:
+            RT130(**args)
+            self.assertEqual(
+                str(context.exception),
+                "Path '_' not exist"
+            )
+
+    def test_read_soh(self):
+        args = {
+            'data_type': 'RT130',
+            'folder': reftek_data,
+            'req_soh_chans': [],
+            'rt130_waveform_data_req': False,
+            'on_unittest': True
+        }
+        expected_soh = [
+            'SOH/Data Def', 'Battery Volt', 'DAS Temp', 'Backup Volt',
+            'Disk Usage1', 'Disk Usage2', 'Dump Called/Comp', 'GPS On/Off/Err',
+            'GPS Lk/Unlk', 'Clk Phase Err']
+        obj = RT130(**args)
+        self.assertEqual(obj.found_data_streams, [9])
+        self.assertEqual(obj.keys, [('92EB', '25')])
+        self.assertEqual(
+            list(obj.stream_header_by_key_chan[('92EB', '25')].keys()),
+            [])
+        self.assertEqual(list(obj.log_data.keys()), ['TEXT', ('92EB', '25')])
+        self.assertEqual(len(obj.log_data['TEXT']), 0)
+        self.assertEqual(list(obj.log_data[('92EB', '25')].keys()), ['SOH'])
+        self.assertEqual(len(obj.log_data[('92EB', '25')]['SOH']), 1)
+        self.assertEqual(
+            obj.log_data[('92EB', '25')]['SOH'][0][:100],
+            '\nState of Health  17:150:00:00:00:000   ST: 92EB'
+            '\n150:00:00:00 REF TEK 130'
+            '\r\n150:00:00:00 CPU SOFTWARE')
+        self.assertEqual(list(obj.soh_data.keys()), [('92EB', '25')])
+        self.assertEqual(list(obj.soh_data[('92EB', '25')].keys()),
+                         expected_soh)
+
+    def test_read_waveform(self):
+        args = {
+            'data_type': 'RT130',
+            'folder': reftek_data,
+            'req_soh_chans': [],
+            'req_wf_chans': [1],
+            'rt130_waveform_data_req': True,
+            'on_unittest': True
+        }
+        expected_waveform = ['DS1-1', 'DS1-2', 'DS1-3']
+        obj = RT130(**args)
+        self.assertEqual(obj.found_data_streams, [9, 1, 1])
+        self.assertEqual(obj.keys, [('92EB', '25')])
+        self.assertEqual(
+            list(obj.stream_header_by_key_chan[('92EB', '25')].keys()),
+            expected_waveform)
+
+        self.assertEqual(list(obj.waveform_data[('92EB', '25')].keys()),
+                         expected_waveform)
+        self.assertEqual(list(obj.log_data.keys()), ['TEXT', ('92EB', '25')])
+        self.assertIn('Event DS1',
+                      list(obj.soh_data[('92EB', '25')].keys()))
+
+    def test_read_mass_pos(self):
+        args = {
+            'data_type': 'RT130',
+            'folder': reftek_data,
+            'req_soh_chans': ['_'],
+            'include_mp123zne': True,
+            'rt130_waveform_data_req': False,
+            'on_unittest': True
+        }
+        expected_mass_pos = ['MassPos1', 'MassPos2', 'MassPos3']
+        obj = RT130(**args)
+        self.assertEqual(obj.found_data_streams, [9])
+        self.assertEqual(obj.keys, [('92EB', '25')])
+        self.assertEqual(
+            list(obj.stream_header_by_key_chan[('92EB', '25')].keys()),
+            expected_mass_pos)
+        self.assertEqual(list(obj.mass_pos_data[('92EB', '25')].keys()),
+                         expected_mass_pos)
+        self.assertEqual(list(obj.log_data.keys()), ['TEXT', ('92EB', '25')])
+
+    def test_gap(self):
+        expected_waveform = ['DS2-1', 'DS2-2', 'DS2-3']
+        with self.subTest("no gap_minimum set"):
+            args = {
+                'data_type': 'RT130',
+                'folder': reftek_gap_data,
+                'req_soh_chans': [],
+                'req_wf_chans': ['*'],
+                'rt130_waveform_data_req': True,
+                'on_unittest': True
+            }
+            obj = RT130(**args)
+            self.assertEqual(obj.found_data_streams, [2, 2])
+            self.assertEqual(obj.keys, [('98AD', '0')])
+            self.assertEqual(
+                list(obj.stream_header_by_key_chan[('98AD', '0')].keys()),
+                expected_waveform)
+
+            self.assertEqual(list(obj.waveform_data[('98AD', '0')].keys()),
+                             expected_waveform)
+            self.assertEqual(list(obj.log_data.keys()),
+                             ['TEXT', ('98AD', '0')])
+            self.assertEqual(obj.gaps[('98AD', '0')], [])
+
+        with self.subTest("has gap_minimum set"):
+            args = {
+                'data_type': 'RT130',
+                'folder': reftek_gap_data,
+                'req_soh_chans': [],
+                'req_wf_chans': ['*'],
+                'rt130_waveform_data_req': True,
+                'gap_minimum': 60,
+                'on_unittest': True
+            }
+            obj = RT130(**args)
+            self.assertEqual(obj.found_data_streams, [2, 2])
+            self.assertEqual(obj.keys, [('98AD', '0')])
+            self.assertEqual(
+                list(obj.stream_header_by_key_chan[('98AD', '0')].keys()),
+                expected_waveform)
+            self.assertEqual(list(obj.waveform_data[('98AD', '0')].keys()),
+                             expected_waveform)
+            self.assertEqual(list(obj.log_data.keys()),
+                             ['TEXT', ('98AD', '0')])
+            self.assertEqual(obj.gaps[('98AD', '0')],
+                             [[1648493999.64, 1648508400.64]])
-- 
GitLab