diff options
author | Chris Johns <chrisj@rtems.org> | 2020-09-07 10:05:19 +1000 |
---|---|---|
committer | Chris Johns <chrisj@rtems.org> | 2020-09-08 16:15:43 +1000 |
commit | cd8fa2fe74d6785271409aacd1d3d68d863e47f7 (patch) | |
tree | d6949bc16e80c0a0d8cbdb9d0276ed654106be50 /tester/rt/tftp.py | |
parent | tester: Fix the install with the new TFTP server (diff) | |
download | rtems-tools-cd8fa2fe74d6785271409aacd1d3d68d863e47f7.tar.bz2 |
tester: Add support for test-too-long
- A test that loops generating output did not timeout. Monitor the
the session time and set a maximum test period.
Diffstat (limited to 'tester/rt/tftp.py')
-rw-r--r-- | tester/rt/tftp.py | 33 |
1 files changed, 27 insertions, 6 deletions
diff --git a/tester/rt/tftp.py b/tester/rt/tftp.py index 7af3a62..7829e8f 100644 --- a/tester/rt/tftp.py +++ b/tester/rt/tftp.py @@ -66,6 +66,7 @@ class tftp(object): self.port = 0 self.exe = None self.timeout = None + self.test_too_long = None self.timer = None self.running = False self.finished = False @@ -109,6 +110,15 @@ class tftp(object): if self.timeout is not None: self.timeout() + def _test_too_long(self): + self._stop() + while self.running or not self.finished: + self._unlock('_test_too_long') + time.sleep(0.1) + self._lock('_test_too_long') + if self.test_too_long is not None: + self.test_too_long() + def _exe_handle(self, req_file, raddress, rport): self._lock('_exe_handle') exe = self.exe @@ -166,29 +176,40 @@ class tftp(object): self.exe = executable if self.console: self.console('tftp: exe: %s' % (executable)) - self.timeout = timeout[1] + self.timeout = timeout[2] + self.test_too_long = timeout[3] self.listener = threading.Thread(target = self._runner, name = 'tftp-listener') self.listener.start() - step = 0.5 + step = 0.25 period = timeout[0] + seconds = timeout[1] output_len = self.output_length() - while not self.finished and period > 0: + while not self.finished and period > 0 and seconds > 0: + if not self.running and self.caught: + break current_length = self.output_length() if output_length != current_length: period = timeout[0] output_length = current_length + if seconds < step: + seconds = 0 + else: + seconds -= step if period < step: + step = period period = 0 else: period -= step self._unlock('_open') time.sleep(step) self._lock('_open') - if not self.finished and period == 0: - self._timeout() + if not self.finished: + if period == 0: + self._timeout() + elif seconds == 0: + self._test_too_long() caught = self.caught - self.caught = None self._init() self._unlock('_open') if caught is not None: |