tarantool / test-run

Tarantool functional testing framework
14 stars 15 forks source link

Fix decoding error when reading server log file #422

Closed ylobankov closed 7 months ago

ylobankov commented 7 months ago

When a diff test starts a Tarantool server, test-run reads the server log file and tries to find the message indicating the server is ready. Sometimes the server log file may contain bytes that cannot be decoded by utf-8 codec and test-run fails with an error like this:

[044] TarantoolInpector.handle() received the following error:
[044] Traceback (most recent call last):
[044]   File "/tarantool/test-run/lib/inspector.py", line 98, in handle
[044]     result = self.parser.parse_preprocessor(line)
[044]   File "/tarantool/test-run/lib/preprocessor.py", line 123, in parse_preprocessor
[044]     return self.server(stype, sname, options)
[044]   File "/tarantool/test-run/lib/preprocessor.py", line 351, in server
[044]     return getattr(self, attr)(ctype, sname, opts)
[044]   File "/tarantool/test-run/lib/preprocessor.py", line 209, in server_start
[044]     self.servers[sname].start(silent=True, rais=True, wait=wait,
[044]   File "/tarantool/test-run/lib/tarantool_server.py", line 910, in start
[044]     self.wait_until_started(wait_load, deadline)
[044]   File "/tarantool/test-run/lib/tarantool_server.py", line 1147, in wait_until_started
[044]     self.wait_load(deadline)
[044]   File "/tarantool/test-run/lib/tarantool_server.py", line 1131, in wait_load
[044]     if not self.logfile_pos.seek_wait(msg, p, self.name, deadline):
[044]   File "/tarantool/test-run/lib/tarantool_server.py", line 485, in seek_wait
[044]     log_str = f.readline()
[044]   File "/Library/Developer/CommandLineTools/Library/Frameworks/Python3.framework/Versions/3.9/lib/python3.9/codecs.py", line 322, in decode
[044]     (result, consumed) = self._buffer_decode(data, self.errors, final)
[044] UnicodeDecodeError: 'utf-8' codec can't decode byte 0xf0 in position 660: invalid continuation byte

At least, I have seen such errors when Tarantool with JIT enabled was tested on macOS ARM64 machines. So this patch fixes the issue.

coveralls commented 7 months ago

Coverage Status

coverage: 62.54% (+0.06%) from 62.479% when pulling 92921d4f58d1500ef649c5a67df77081f8e629b2 on ylobankov/read-logfile-safely into 52ca8cfcee58e0c623dcf2b22eece64dca7d0b6a on master.