test/py: fix timeout to be absolute
Currently, Spawn.expect() imposes its timeout solely upon receipt of new data, not on its overall operation. In theory, this could cause the timeout not to fire if U-Boot continually generated output that did not match the expected patterns. Fix the code to additionally impose a timeout on overall operation, which is the intended mode of operation. Signed-off-by: Stephen Warren <swarren@nvidia.com> Reviewed-by: Lukasz Majewski <l.majewski@samsung.com> Acked-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
b75fdc11eb
commit
d314e247e1
|
@ -122,6 +122,7 @@ class Spawn(object):
|
||||||
if type(patterns[pi]) == type(''):
|
if type(patterns[pi]) == type(''):
|
||||||
patterns[pi] = re.compile(patterns[pi])
|
patterns[pi] = re.compile(patterns[pi])
|
||||||
|
|
||||||
|
tstart_s = time.time()
|
||||||
try:
|
try:
|
||||||
while True:
|
while True:
|
||||||
earliest_m = None
|
earliest_m = None
|
||||||
|
@ -142,7 +143,11 @@ class Spawn(object):
|
||||||
self.after = self.buf[pos:posafter]
|
self.after = self.buf[pos:posafter]
|
||||||
self.buf = self.buf[posafter:]
|
self.buf = self.buf[posafter:]
|
||||||
return earliest_pi
|
return earliest_pi
|
||||||
events = self.poll.poll(self.timeout)
|
tnow_s = time.time()
|
||||||
|
tdelta_ms = (tnow_s - tstart_s) * 1000
|
||||||
|
if tdelta_ms > self.timeout:
|
||||||
|
raise Timeout()
|
||||||
|
events = self.poll.poll(self.timeout - tdelta_ms)
|
||||||
if not events:
|
if not events:
|
||||||
raise Timeout()
|
raise Timeout()
|
||||||
c = os.read(self.fd, 1024)
|
c = os.read(self.fd, 1024)
|
||||||
|
|
Loading…
Reference in New Issue