summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Johns <chrisj@rtems.org>2017-10-05 14:21:33 +1100
committerChris Johns <chrisj@rtems.org>2017-10-05 14:21:33 +1100
commit2ae9b6d52b4623a7bffec5290882496e7602c0be (patch)
tree8653cafc4169f1604cd111cdf7c8d3dd4222857d
parenttester: Add a target reset regular expression to detect a reset. (diff)
downloadrtems-tools-2ae9b6d52b4623a7bffec5290882496e7602c0be.tar.bz2
tester: Telnet console reopens the connection if it fails or closes.
Some hardware can drop a USB serial enumeration when power is remove or applied. This changes make the telnet console more fault tolerant.
-rw-r--r--tester/rt/telnet.py26
1 files changed, 20 insertions, 6 deletions
diff --git a/tester/rt/telnet.py b/tester/rt/telnet.py
index a7f16cd..74c9e49 100644
--- a/tester/rt/telnet.py
+++ b/tester/rt/telnet.py
@@ -32,6 +32,7 @@
# RTEMS Testing Consoles
#
+import errno
import os
import sys
import telnetlib
@@ -44,6 +45,7 @@ class tty:
def __init__(self, dev):
self.dev = dev
+ self.timeout = 5
self.conn = None
ds = dev.split(':')
self.host = ds[0]
@@ -54,12 +56,8 @@ class tty:
self.port = int(ds[1])
except:
raise error.general('invalid port: %s' % (dev))
- try:
- self.conn = telnetlib.Telnet(self.host, self.port, 5)
- except IOError as ioe:
- raise error.general('opening telnet dev: %s: %s' % (dev, ioe))
- except:
- raise error.general('opening telnet dev: %s: unknown' % (dev))
+ self.conn = telnetlib.Telnet()
+ self._reopen()
def __del__(self):
if self.conn:
@@ -72,6 +70,14 @@ class tty:
s = 'host: %s port: %d' % ((self.host, self.port))
return s
+ def _reopen(self):
+ try:
+ self.conn.open(self.host, self.port, self.timeout)
+ except IOError as ioe:
+ raise error.general('opening telnet dev: %s: %s' % (dev, ioe))
+ except:
+ raise error.general('opening telnet dev: %s: unknown' % (dev))
+
def off(self):
self.is_on = False
@@ -82,10 +88,18 @@ class tty:
pass
def read(self):
+ reopen = False
try:
data = self.conn.read_very_eager()
+ except IOError as ioe:
+ if ioe.errno == errno.ECONNREFUSED:
+ reopen = True
+ data = ''
except EOFError:
+ reopen = True
data = ''
+ if reopen:
+ self._reopen()
return data
if __name__ == "__main__":