import unittest from sohstationviewer.model.reftek.reftek_data.header import ( parse_rt130_time, get_rt130_packet_header, NotRT130FileError, ) class TestParseRT130Time(unittest.TestCase): def test_time_bytes_parsed_correctly(self): time_bytes = b'\x36\x01\x15\x13\x51\x35' year = 15 result = parse_rt130_time(year, time_bytes) self.assertEqual(result.julday, 360) self.assertEqual(result.day, 26) self.assertEqual(result.month, 12) self.assertEqual(result.hour, 11) self.assertEqual(result.minute, 51) self.assertEqual(result.second, 35) self.assertEqual(result.microsecond, 135000) self.assertEqual(result.ns, 1451130695135000000) def test_year_1900s(self): time_bytes = b'\x36\x01\x15\x13\x51\x35' year = 71 result = parse_rt130_time(year, time_bytes) self.assertEqual(result.year, 1971) def test_year_2000s(self): time_bytes = b'\x36\x01\x15\x13\x51\x35' year = 12 result = parse_rt130_time(year, time_bytes) self.assertEqual(result.year, 2012) def test_year_threshold(self): with self.subTest('test_year_is_49'): time_bytes = b'\x36\x01\x15\x13\x51\x35' year = 49 result = parse_rt130_time(year, time_bytes) self.assertEqual(result.year, 2049) with self.subTest('test_year_is_50'): time_bytes = b'\x36\x01\x15\x13\x51\x35' year = 50 result = parse_rt130_time(year, time_bytes) self.assertEqual(result.year, 1950) class TestGetRT130PacketHeader(unittest.TestCase): def test_header_extracted_correctly(self): header = b'DT\x12\x15\x98\xe1\x36\x01\x15\x13\x51\x35\x05\x12\x01\x11' packet = header + b' ' * 1008 result = get_rt130_packet_header(packet) self.assertEqual(result.packet_type, 'DT') self.assertEqual(result.experiment_number, 12) self.assertEqual(result.unit_id, '98E1') self.assertEqual(result.time.ns, 1451130695135000000) self.assertEqual(result.byte_count, 512) self.assertEqual(result.packet_sequence, 111) def test_packet_type_cannot_be_parsed(self): packet_type = b'\x01\x02' header = packet_type + b'\x11' * 14 packet = header + b' ' * 1008 with self.assertRaises(NotRT130FileError): get_rt130_packet_header(packet) def test_packet_type_is_not_valid(self): packet_type = b'AB' header = packet_type + b'\x11' * 14 packet = header + b' ' * 1008 with self.assertRaises(NotRT130FileError): get_rt130_packet_header(packet)