|
8 | 8 | import unittest
|
9 | 9 | from unittest import mock
|
10 | 10 | from unittest.mock import Mock
|
| 11 | +import gzip |
11 | 12 | import sys
|
| 13 | +import tempfile |
12 | 14 | import can
|
13 | 15 | import can.logger
|
14 | 16 |
|
@@ -105,5 +107,38 @@ def test_log_virtual_sizedlogger(self):
|
105 | 107 | self.mock_logger_sized.assert_called_once()
|
106 | 108 |
|
107 | 109 |
|
| 110 | +class TestLoggerCompressedFile(unittest.TestCase): |
| 111 | + def setUp(self) -> None: |
| 112 | + # Patch VirtualBus object |
| 113 | + self.patcher_virtual_bus = mock.patch( |
| 114 | + "can.interfaces.virtual.VirtualBus", spec=True |
| 115 | + ) |
| 116 | + self.MockVirtualBus = self.patcher_virtual_bus.start() |
| 117 | + self.mock_virtual_bus = self.MockVirtualBus.return_value |
| 118 | + |
| 119 | + self.testmsg = can.Message( |
| 120 | + arbitration_id=0xC0FFEE, data=[0, 25, 0, 1, 3, 1, 4, 1], is_extended_id=True |
| 121 | + ) |
| 122 | + |
| 123 | + self.baseargs = [sys.argv[0], "-i", "virtual"] |
| 124 | + |
| 125 | + def test_compressed_logfile(self): |
| 126 | + """ |
| 127 | + Basic test to verify Logger is able to write gzip files. |
| 128 | + """ |
| 129 | + self.mock_virtual_bus.recv = Mock(side_effect=[self.testmsg, KeyboardInterrupt]) |
| 130 | + |
| 131 | + with tempfile.NamedTemporaryFile(suffix=".log.gz", delete=True) as compressed: |
| 132 | + sys.argv = self.baseargs + ["--file_name", compressed.name] |
| 133 | + can.logger.main() |
| 134 | + with gzip.open(compressed.name, "rt") as decompressed: |
| 135 | + last_line = decompressed.readlines()[-1] |
| 136 | + |
| 137 | + self.assertEqual(last_line, "(0.000000) vcan0 00C0FFEE#0019000103010401\n") |
| 138 | + |
| 139 | + def tearDown(self) -> None: |
| 140 | + self.patcher_virtual_bus.stop() |
| 141 | + |
| 142 | + |
108 | 143 | if __name__ == "__main__":
|
109 | 144 | unittest.main()
|
0 commit comments