Found and hopefullyfixed a bug with fenrir watchdog.
This commit is contained in:
@@ -263,9 +263,10 @@ class driver(screenDriver):
|
||||
while True:
|
||||
# Read from file
|
||||
try:
|
||||
d += file.readline(1)
|
||||
if not d:
|
||||
chunk = file.readline(1)
|
||||
if not chunk:
|
||||
break
|
||||
d += chunk
|
||||
except Exception as e:
|
||||
break
|
||||
return d
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
from unittest.mock import Mock
|
||||
|
||||
from fenrirscreenreader.screenDriver.vcsaDriver import driver as VcsaDriver
|
||||
|
||||
|
||||
class BulkReadFailure:
|
||||
def __init__(self, chunks):
|
||||
self.chunks = iter(chunks)
|
||||
self.readline_calls = 0
|
||||
|
||||
def seek(self, offset):
|
||||
assert offset == 0
|
||||
|
||||
def read(self):
|
||||
raise OSError(22, "Invalid argument")
|
||||
|
||||
def readline(self, size):
|
||||
assert size == 1
|
||||
self.readline_calls += 1
|
||||
if self.readline_calls > 3:
|
||||
raise RuntimeError("read continued after EOF")
|
||||
return next(self.chunks)
|
||||
|
||||
|
||||
def test_vcsa_read_fallback_stops_at_eof():
|
||||
vcsa_driver = VcsaDriver.__new__(VcsaDriver)
|
||||
vcsa_driver.env = {
|
||||
"runtime": {
|
||||
"DebugManager": Mock(),
|
||||
}
|
||||
}
|
||||
screen_file = BulkReadFailure([b"a", b"b", b""])
|
||||
|
||||
assert vcsa_driver.read_file(screen_file) == b"ab"
|
||||
assert screen_file.readline_calls == 3
|
||||
Reference in New Issue
Block a user