tester: Change to a simpler TFTP server

- Add a simpler TFTP to allow parallel test hardware

- Remove the imported tftpy server

Closes #4063
This commit is contained in:
Chris Johns
2020-08-26 13:38:54 +10:00
parent 37ad446d9d
commit eb3608133b
13 changed files with 766 additions and 2193 deletions

View File

@@ -43,7 +43,7 @@ import sys
from rtemstoolkit import error
from rtemstoolkit import reraise
import tftpy
import tftpserver
class tftp(object):
'''RTEMS Testing TFTP base.'''
@@ -88,7 +88,8 @@ class tftp(object):
def _stop(self):
try:
if self.server:
self.server.stop(now = True)
self.server.stop()
self.finished = True
except:
pass
@@ -101,6 +102,10 @@ class tftp(object):
def _timeout(self):
self._stop()
while self.running or not self.finished:
self._unlock('_timeout')
time.sleep(0.1)
self._lock('_timeout')
if self.timeout is not None:
self.timeout()
@@ -119,22 +124,21 @@ class tftp(object):
return None
def _listener(self):
tftpy_log = logging.getLogger('tftpy')
tftpy_log.setLevel(100)
self._lock('_listener')
exe = self.exe
self.exe = None
self._unlock('_listener')
self.server = tftpserver.tftp_server(host = 'all',
port = self.port,
timeout = 1,
forced_file = exe,
sessions = 1)
try:
self.server = tftpy.TftpServer(tftproot = '.',
dyn_file_func = self._exe_handle)
except tftpy.TftpException as te:
raise error.general('tftp: %s' % (str(te)))
if self.server is not None:
try:
self.server.listen('0.0.0.0', self.port, 0.5)
except tftpy.TftpException as te:
raise error.general('tftp: %s' % (str(te)))
except IOError as ie:
if ie.errno == errno.EACCES:
raise error.general('tftp: permissions error: check tftp server port')
raise error.general('tftp: io error: %s' % (str(ie)))
self.server.start()
self.server.run()
except:
self.server.stop()
raise
def _runner(self):
self._lock('_runner')
@@ -146,9 +150,7 @@ class tftp(object):
except:
caught = sys.exc_info()
self._lock('_runner')
self._init()
self.running = False
self.finished = True
self.caught = caught
self._unlock('_runner')
@@ -187,6 +189,7 @@ class tftp(object):
self._timeout()
caught = self.caught
self.caught = None
self._init()
self._unlock('_open')
if caught is not None:
reraise.reraise(*caught)