def test_checksum_not_valid_if_incorrect(self): message_bytes = self.bytes_builder.to_bytes() checksum_offset = len(message_bytes) - 2 current_checksum = message_bytes[checksum_offset] message_bytes[checksum_offset] = (current_checksum + 1) % 256 msg = mtrreader.MtrDataMessage(message_bytes) self.assertFalse(msg.is_checksum_valid())
def test_package_number(self): self.default_bytes_builder.package_number = 4660 new_bytes = self.default_bytes_builder.to_bytes() expected_line = self.default_line[0:586] + '0004660' line = mtrlog.MtrLogFormatter().format( mtrreader.MtrDataMessage(new_bytes), self.datetime_read) self.assertEqual(line, expected_line)
def test_splits_minimal(self): self.default_bytes_builder.splits = [(0, 0), (249, 60)] new_bytes = self.default_bytes_builder.to_bytes() expected_line = (self.default_line[0:86] + '000,00000,249,00060,' + self.default_line[106:]) line = mtrlog.MtrLogFormatter().format( mtrreader.MtrDataMessage(new_bytes), self.datetime_read) self.assertEqual(line, expected_line)
def test_mtr_id(self): self.default_bytes_builder.mtr_id = 258 new_bytes = self.default_bytes_builder.to_bytes() expected_line = (self.default_line[0:8] + '"258",' + self.default_line[12:]) line = mtrlog.MtrLogFormatter().format( mtrreader.MtrDataMessage(new_bytes), self.datetime_read) self.assertEqual(line, expected_line)
def test_card_id(self): self.default_bytes_builder.card_id = 66308 new_bytes = self.default_bytes_builder.to_bytes() expected_line = (self.default_line[0:12] + '"066308",' + self.default_line[21:69] + '066308,' + self.default_line[76:]) line = mtrlog.MtrLogFormatter().format( mtrreader.MtrDataMessage(new_bytes), self.datetime_read) self.assertEqual(line, expected_line)
def test_splits(self): input_splits = [(0, 0), (31, 60), (32, 120), (33, 180), (249, 240)] self.bytes_builder.splits = input_splits msg = mtrreader.MtrDataMessage(self.bytes_builder.to_bytes()) output_splits = msg.splits() expected_splits = input_splits + 45 * [(0, 0)] self.assertEqual(output_splits, expected_splits)
def test_multiple(self): expected_lines = [] self.default_bytes_builder.package_number = 101 bytes_msg_1 = self.default_bytes_builder.to_bytes() expected_lines.append(self.default_line[0:586] + '0000101') self.default_bytes_builder.package_number = 102 bytes_msg_2 = self.default_bytes_builder.to_bytes() expected_lines.append(self.default_line[0:586] + '0000102') messages = [ mtrreader.MtrDataMessage(bytes_msg_1), mtrreader.MtrDataMessage(bytes_msg_2) ] lines = mtrlog.MtrLogFormatter().format_all(messages, self.datetime_read) self.assertEqual(lines, expected_lines)
def test_datetime_read(self): now = datetime.now() self.bytes_builder.datetime_read = now msg = mtrreader.MtrDataMessage(self.bytes_builder.to_bytes()) self.assertEqual(msg.timestamp_year(), now.year % 100) self.assertEqual(msg.timestamp_month(), now.month) self.assertEqual(msg.timestamp_day(), now.day) self.assertEqual(msg.timestamp_hours(), now.hour) self.assertEqual(msg.timestamp_minutes(), now.minute) self.assertEqual(msg.timestamp_seconds(), now.second) self.assertEqual(msg.timestamp_milliseconds(), 0)
def test_datetime_read(self): # subtract more than a year to get different values for all fields self.default_bytes_builder.datetime_read -= timedelta(days=366 + 32, hours=1, minutes=1, seconds=1) new_bytes = self.default_bytes_builder.to_bytes() new_datetime_read = (self.default_bytes_builder.datetime_read.strftime( '%d.%m.%y %H:%M:%S.000')) expected_line = (self.default_line[0:45] + ('"%s",' % new_datetime_read) + self.default_line[69:]) line = mtrlog.MtrLogFormatter().format( mtrreader.MtrDataMessage(new_bytes), self.datetime_read) self.assertEqual(line, expected_line)
def test_splits_full(self): splits = [] expected_split_string = '' for i in range(0, 50): control_code = i time_at_control = i * 60 splits.append((control_code, time_at_control)) expected_split_string += ('%03d,%05d,' % (control_code, time_at_control)) self.default_bytes_builder.splits = splits new_bytes = self.default_bytes_builder.to_bytes() expected_line = (self.default_line[0:86] + expected_split_string + self.default_line[586:]) line = mtrlog.MtrLogFormatter().format( mtrreader.MtrDataMessage(new_bytes), self.datetime_read) self.assertEqual(line, expected_line)
def setUp(self): self.datetime_read = datetime.now() self.default_bytes_builder = MtrDataBytesBuilder(mtr_id=1, card_id=1) self.default_line = mtrlog.MtrLogFormatter().format( mtrreader.MtrDataMessage(self.default_bytes_builder.to_bytes()), self.datetime_read)
def test_checksum_valid(self): msg = mtrreader.MtrDataMessage(self.bytes_builder.to_bytes()) self.assertTrue(msg.is_checksum_valid())
def test_ascii_string(self): self.bytes_builder.ascii_string = "This is a test" msg = mtrreader.MtrDataMessage(self.bytes_builder.to_bytes()) self.assertEqual(msg.ascii_string(), "This is a test".ljust(56))
def test_card_id(self): self.bytes_builder.card_id = 131586 msg = mtrreader.MtrDataMessage(self.bytes_builder.to_bytes()) self.assertEqual(msg.card_id(), 131586)
def test_packet_num(self): self.bytes_builder.package_number = 39 msg = mtrreader.MtrDataMessage(self.bytes_builder.to_bytes()) self.assertEqual(msg.packet_num(), 39)
def test_mtr_id(self): self.bytes_builder.mtr_id = 33145 msg = mtrreader.MtrDataMessage(self.bytes_builder.to_bytes()) self.assertEqual(msg.mtr_id(), 33145)