Reconnect on socket failure

This commit is contained in:
Marcel Nijenhof
2020-11-08 12:32:37 +01:00
parent 5968b6ff5b
commit 57f6619c80
2 changed files with 43 additions and 4 deletions

View File

@@ -239,12 +239,38 @@ Login lmw using the object creation user, password.
Raises a LmwLoginFailure exception on failure
"""
li="LI " + self.user + "," + self.password + "\r"
#
# TODO: Check connect
#
self.send(li)
d = self.recv()
if (d[0] != '!'):
self.closesocket()
raise LmwLoginFailure(self.user, d)
def sendrecv(self, cmd):
"""sendrecv(cmd)
send the command and recieve the answer.
retry on socket failure.
"""
c = 0
ret = ""
while (ret == "") and (c < 3):
try:
self.send(cmd)
ret = self.recv()
except LmwSipConnectError as e:
if (self.user != None):
self.connect()
self.login()
c+=1
ret=""
else:
c=3
raise(e)
return(ret)
def ti(self):
"""ti()
@@ -253,8 +279,7 @@ Request the time from lmw and returns the string.
Raises a LmwCmdWarn of failure
"""
ti="TI " + self.meetnet + "\r"
self.send(ti)
d = self.recv()
d = self.sendrecv(ti)
return (d[2:-1])
def cmd(self, process, location, parameter, time_delta, day,
@@ -286,8 +311,7 @@ Returns:
parameter + "," + time_delta + "," + day + "," + \
time_of_day + data + "\r"
self.send(cmdstr)
d = self.recv()
d = self.sendrecv(cmdstr)
if (d[0] != '!'):
raise LmwCmdWarn(cmdstr, d)
return (d[2:-1])

View File

@@ -49,6 +49,11 @@ class lmwsipTest(unittest.TestCase):
self.login()
self.assertEqual(type(self.sip.cmd("WN", "DUMMY", "D10", "+00:59", "2020-01-01", "00:00")), str)
def test_cmderr(self):
self.login()
with self.assertRaises(lmwsip.LmwCmdWarn):
self.assertEqual(type(self.sip.cmd("NOP", "DUMMY", "D10", "+00:59", "2020-01-01", "00:00")), str)
def test_value(self):
self.login()
self.assertEqual(type(self.sip.value("WN", "DUMMY", "D10")), str)
@@ -81,6 +86,16 @@ class lmwsipTest(unittest.TestCase):
with self.assertRaises(lmwsip.LmwSipConnectError):
self.sip.recv()
def test_closeti(self):
self.login()
self.sip.send("CLOSE")
self.assertEqual(type(self.sip.ti()), str)
def test_closecmd(self):
self.login()
self.sip.send("CLOSE")
self.assertEqual(type(self.sip.cmd("WN", "DUMMY", "D10", "+00:59", "2020-01-01", "00:00")), str)
def test_run(self):
capturedOutput = io.StringIO()
sys.stdout = capturedOutput