|
27 | 27 | TEST_MESSAGES_BASE,
|
28 | 28 | TEST_MESSAGES_REMOTE_FRAMES,
|
29 | 29 | TEST_MESSAGES_ERROR_FRAMES,
|
| 30 | + TEST_MESSAGES_CAN_FD, |
30 | 31 | TEST_COMMENTS,
|
31 | 32 | sort_messages,
|
32 | 33 | )
|
@@ -89,13 +90,13 @@ def _setup_instance_helper(
|
89 | 90 | ignored, if *preserves_channel* is True
|
90 | 91 | """
|
91 | 92 | # get all test messages
|
92 |
| - self.original_messages = TEST_MESSAGES_BASE |
| 93 | + self.original_messages = list(TEST_MESSAGES_BASE) |
93 | 94 | if check_remote_frames:
|
94 | 95 | self.original_messages += TEST_MESSAGES_REMOTE_FRAMES
|
95 | 96 | if check_error_frames:
|
96 | 97 | self.original_messages += TEST_MESSAGES_ERROR_FRAMES
|
97 | 98 | if check_fd:
|
98 |
| - self.original_messages += [] # TODO: add TEST_MESSAGES_CAN_FD |
| 99 | + self.original_messages += TEST_MESSAGES_CAN_FD |
99 | 100 |
|
100 | 101 | # sort them so that for example ASCWriter does not "fix" any messages with timestamp 0.0
|
101 | 102 | self.original_messages = sort_messages(self.original_messages)
|
@@ -345,41 +346,101 @@ def _setup_instance(self):
|
345 | 346 |
|
346 | 347 |
|
347 | 348 | class TestBlfFileFormat(ReaderWriterTest):
|
348 |
| - """Tests can.BLFWriter and can.BLFReader""" |
| 349 | + """Tests can.BLFWriter and can.BLFReader. |
| 350 | + |
| 351 | + Uses log files created by Toby Lorenz: |
| 352 | + https://bitbucket.org/tobylorenz/vector_blf/src/master/src/Vector/BLF/tests/unittests/events_from_binlog/ |
| 353 | + """ |
349 | 354 |
|
350 | 355 | def _setup_instance(self):
|
351 | 356 | super()._setup_instance_helper(
|
352 | 357 | can.BLFWriter,
|
353 | 358 | can.BLFReader,
|
354 | 359 | binary_file=True,
|
355 |
| - check_fd=False, |
| 360 | + check_fd=True, |
356 | 361 | check_comments=False,
|
| 362 | + test_append=True, |
357 | 363 | allowed_timestamp_delta=1.0e-6,
|
358 | 364 | preserves_channel=False,
|
359 | 365 | adds_default_channel=0,
|
360 | 366 | )
|
361 | 367 |
|
362 |
| - def test_read_known_file(self): |
363 |
| - logfile = os.path.join(os.path.dirname(__file__), "data", "logfile.blf") |
| 368 | + def _read_log_file(self, filename): |
| 369 | + logfile = os.path.join(os.path.dirname(__file__), "data", filename) |
364 | 370 | with can.BLFReader(logfile) as reader:
|
365 |
| - messages = list(reader) |
366 |
| - |
367 |
| - expected = [ |
368 |
| - can.Message( |
369 |
| - timestamp=1.0, |
370 |
| - is_extended_id=False, |
371 |
| - arbitration_id=0x64, |
372 |
| - data=[0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8], |
373 |
| - ), |
374 |
| - can.Message( |
375 |
| - timestamp=73.0, |
376 |
| - is_extended_id=True, |
377 |
| - arbitration_id=0x1FFFFFFF, |
378 |
| - is_error_frame=True, |
379 |
| - ), |
380 |
| - ] |
381 |
| - |
382 |
| - self.assertMessagesEqual(messages, expected) |
| 371 | + return list(reader) |
| 372 | + |
| 373 | + def test_can_message(self): |
| 374 | + expected = can.Message( |
| 375 | + timestamp=2459565876.494607, |
| 376 | + arbitration_id=0x4444444, |
| 377 | + is_extended_id=False, |
| 378 | + channel=0x1110, |
| 379 | + dlc=0x33, |
| 380 | + data=[0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC], |
| 381 | + ) |
| 382 | + actual = self._read_log_file("test_CanMessage.blf") |
| 383 | + self.assertMessagesEqual(actual, [expected] * 2) |
| 384 | + self.assertEqual(actual[0].channel, expected.channel) |
| 385 | + |
| 386 | + def test_can_message_2(self): |
| 387 | + expected = can.Message( |
| 388 | + timestamp=2459565876.494607, |
| 389 | + arbitration_id=0x4444444, |
| 390 | + is_extended_id=False, |
| 391 | + channel=0x1110, |
| 392 | + dlc=0x33, |
| 393 | + data=[0x55, 0x66, 0x77, 0x88, 0x99, 0xAA, 0xBB, 0xCC], |
| 394 | + ) |
| 395 | + actual = self._read_log_file("test_CanMessage2.blf") |
| 396 | + self.assertMessagesEqual(actual, [expected] * 2) |
| 397 | + self.assertEqual(actual[0].channel, expected.channel) |
| 398 | + |
| 399 | + def test_can_fd_message(self): |
| 400 | + expected = can.Message( |
| 401 | + timestamp=2459565876.494607, |
| 402 | + arbitration_id=0x4444444, |
| 403 | + is_extended_id=False, |
| 404 | + channel=0x1110, |
| 405 | + dlc=64, |
| 406 | + is_fd=True, |
| 407 | + bitrate_switch=True, |
| 408 | + error_state_indicator=True, |
| 409 | + data=range(64), |
| 410 | + ) |
| 411 | + actual = self._read_log_file("test_CanFdMessage.blf") |
| 412 | + self.assertMessagesEqual(actual, [expected] * 2) |
| 413 | + self.assertEqual(actual[0].channel, expected.channel) |
| 414 | + |
| 415 | + def test_can_fd_message_64(self): |
| 416 | + expected = can.Message( |
| 417 | + timestamp=2459565876.494607, |
| 418 | + arbitration_id=0x15555555, |
| 419 | + is_extended_id=False, |
| 420 | + is_remote_frame=True, |
| 421 | + channel=0x10, |
| 422 | + dlc=64, |
| 423 | + is_fd=True, |
| 424 | + bitrate_switch=True, |
| 425 | + error_state_indicator=True, |
| 426 | + ) |
| 427 | + actual = self._read_log_file("test_CanFdMessage64.blf") |
| 428 | + self.assertMessagesEqual(actual, [expected] * 2) |
| 429 | + self.assertEqual(actual[0].channel, expected.channel) |
| 430 | + |
| 431 | + def test_can_error_frame_ext(self): |
| 432 | + expected = can.Message( |
| 433 | + timestamp=2459565876.494607, |
| 434 | + is_error_frame=True, |
| 435 | + arbitration_id=0x19999999, |
| 436 | + is_extended_id=True, |
| 437 | + channel=0x1110, |
| 438 | + dlc=0x66, |
| 439 | + data=[0xCC, 0xDD, 0xEE, 0xFF, 0x11, 0x22, 0x33, 0x44], |
| 440 | + ) |
| 441 | + actual = self._read_log_file("test_CanErrorFrameExt.blf") |
| 442 | + self.assertMessagesEqual(actual, [expected] * 2) |
| 443 | + self.assertEqual(actual[0].channel, expected.channel) |
383 | 444 |
|
384 | 445 |
|
385 | 446 | class TestCanutilsFileFormat(ReaderWriterTest):
|
|
0 commit comments