From 3f86cf242ff9e8b1f8ca8c19cf984b6e630d60a6 Mon Sep 17 00:00:00 2001 From: kienle <kienle@passcal.nmt.edu> Date: Thu, 22 Sep 2022 14:57:04 -0600 Subject: [PATCH] Add tests for readWaveformReftek --- tests/test_model/test_handling_data.py | 107 ++++++++++++++++++++++++- 1 file changed, 105 insertions(+), 2 deletions(-) diff --git a/tests/test_model/test_handling_data.py b/tests/test_model/test_handling_data.py index 653c1c734..a91e2f28d 100644 --- a/tests/test_model/test_handling_data.py +++ b/tests/test_model/test_handling_data.py @@ -195,7 +195,7 @@ class TestReadWaveformMSeed(TestCase): self.channel_id = self.mseed_waveform_trace.stats['channel'] # This list is only ever written to, so we can keep it empty self.traces_info = [] - self.data_time = [12512512, 12215125121] + self.data_time = [0, 0] self.temp_dir = tempfile.TemporaryDirectory() patcher = patch( @@ -271,5 +271,108 @@ class TestReadWaveformMSeed(TestCase): self.assertEqual(self.data_time, expected_updated_data_time) - # Test that dataTime is updated correctly +class TestReadWaveformReftek(TestCase): + @classmethod + def setUpClass(cls) -> None: + rt130_dir = TEST_DATA_DIR.joinpath( + 'RT130-sample/2017149.92EB/2017150/92EB') + cls.rt130_waveform_file = rt130_dir.joinpath('1/000000015_0036EE80') + cls.rt130_waveform = Reftek130.from_file(cls.rt130_waveform_file) + cls.rt130_waveform_stream = Reftek130.to_stream(cls.rt130_waveform) + cls.rt130_waveform_trace = cls.rt130_waveform_stream[0] + + def setUp(self) -> None: + # The first element of the key, the unit ID, should be a character + # string. However, the unit ID is stored as a byte string in the data + # stream. While having the unit ID as a byte string should not cause + # any problem with the test, we convert it to a character string anyway + # to be consistent with how readWaveformReftek is called. + self.key = ( + self.rt130_waveform_trace.stats['unit_id'].decode('utf-8'), + self.rt130_waveform_trace.stats['experiment_number'] + ) + self.read_data = {} + self.data_time = [0, 0] + self.temp_dir = tempfile.TemporaryDirectory() + + patcher = patch( + 'sohstationviewer.model.handling_data.readWaveformTrace') + self.addCleanup(patcher.stop) + self.mock_readWaveformTrace = patcher.start() + self.mock_readWaveformTrace.return_value = { + 'startTmEpoch': 0, + 'endTmEpoch': 0, + } + + def tearDown(self) -> None: + self.temp_dir.cleanup() + + def test_all_traces_are_processed(self): + readWaveformReftek(self.rt130_waveform, self.key, self.read_data, + self.data_time, self.temp_dir.name) + num_traces_read = 0 + for channel_data in self.read_data.values(): + num_traces_read += len(channel_data['tracesInfo']) + self.assertTrue(num_traces_read, len(self.rt130_waveform_stream)) + + def test_read_data_updated_with_all_channels(self): + readWaveformReftek(self.rt130_waveform, self.key, self.read_data, + self.data_time, self.temp_dir.name) + self.assertTupleEqual(tuple(self.read_data.keys()), + ('DS1-1', 'DS1-2', 'DS1-3')) + + def test_read_data_existing_channel_appended_to(self): + self.read_data = { + 'DS1-1': + {'tracesInfo': + [{'startTmEpoch': 0, 'endTmEpoch': 0}], + 'samplerate': 40.0} + } + readWaveformReftek(self.rt130_waveform, self.key, self.read_data, + self.data_time, self.temp_dir.name) + self.assertEqual(len(self.read_data['DS1-1']['tracesInfo']), 2) + + def test_readWaveformTrace_called(self): + readWaveformReftek(self.rt130_waveform, self.key, self.read_data, + self.data_time, self.temp_dir.name) + self.assertTrue(self.mock_readWaveformTrace.called) + + def test_start_data_time_earlier_than_earliest_start_time(self): + self.mock_readWaveformTrace.return_value = { + 'startTmEpoch': 51251, + 'endTmEpoch': 2623623, + } + start_time = 0 + self.data_time = [start_time, 1625532949] + + readWaveformReftek(self.rt130_waveform, self.key, self.read_data, + self.data_time, self.temp_dir.name) + self.assertEqual(self.data_time[0], start_time) + + def test_end_data_time_later_than_latest_start_time(self): + # End time set to be the last second of 9999 so as to be later than the + # end time of any test data. + self.mock_readWaveformTrace.return_value = { + 'startTmEpoch': 51251, + 'endTmEpoch': 2623623, + } + end_time = 253402326000 + self.data_time = [1625443222, end_time] + + readWaveformReftek(self.rt130_waveform, self.key, self.read_data, + self.data_time, self.temp_dir.name) + self.assertEqual(self.data_time[1], end_time) + def test_data_time_is_between_earliest_start_and_latest_end_time(self): + self.mock_readWaveformTrace.return_value = { + 'startTmEpoch': 51251, + 'endTmEpoch': 2623623, + } + start_time = 512579 + end_time = 2623616 + self.data_time = [start_time, end_time] + + expected_updated_data_time = [51251, 2623623] + readWaveformReftek(self.rt130_waveform, self.key, self.read_data, + self.data_time, self.temp_dir.name) + self.assertEqual(self.data_time, expected_updated_data_time) -- GitLab