added 'sendall' method to IS + tests
This commit is contained in:
parent
a049df6859
commit
8e6ef0d48e
|
|
@ -127,6 +127,31 @@ class IS(object):
|
||||||
if self.sock is not None:
|
if self.sock is not None:
|
||||||
self.sock.close()
|
self.sock.close()
|
||||||
|
|
||||||
|
def sendall(self, line):
|
||||||
|
"""
|
||||||
|
Send a line, or multiple lines sperapted by '\\r\\n'
|
||||||
|
"""
|
||||||
|
if not self._connected:
|
||||||
|
raise ConnectionError("not connected")
|
||||||
|
|
||||||
|
if isinstance(line, unicode):
|
||||||
|
line = line.encode('utf8')
|
||||||
|
elif not isinstance(line, str):
|
||||||
|
line = str(line)
|
||||||
|
|
||||||
|
if line == "":
|
||||||
|
return
|
||||||
|
|
||||||
|
line = line.rstrip("\r\n") + "\r\n"
|
||||||
|
|
||||||
|
try:
|
||||||
|
self.sock.setblocking(1)
|
||||||
|
self.sock.settimeout(5)
|
||||||
|
self.sock.sendall(line)
|
||||||
|
except socket.error as exp:
|
||||||
|
self.close()
|
||||||
|
raise ConnectionError(str(exp))
|
||||||
|
|
||||||
def consumer(self, callback, blocking=True, immortal=False, raw=False):
|
def consumer(self, callback, blocking=True, immortal=False, raw=False):
|
||||||
"""
|
"""
|
||||||
When a position sentence is received, it will be passed to the callback function
|
When a position sentence is received, it will be passed to the callback function
|
||||||
|
|
|
||||||
|
|
@ -7,7 +7,7 @@ import sys
|
||||||
import os
|
import os
|
||||||
|
|
||||||
|
|
||||||
class TestCase_IS(unittest.TestCase):
|
class TC_IS(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.ais = aprslib.IS("LZ1DEV-99", "testpwd", "127.0.0.1", "11111")
|
self.ais = aprslib.IS("LZ1DEV-99", "testpwd", "127.0.0.1", "11111")
|
||||||
self.m = mox.Mox()
|
self.m = mox.Mox()
|
||||||
|
|
@ -260,8 +260,61 @@ class TestCase_IS(unittest.TestCase):
|
||||||
|
|
||||||
self.m.VerifyAll()
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
def test_sendall(self):
|
||||||
|
self.ais.sock = mox.MockAnything()
|
||||||
|
self.m.StubOutWithMock(self.ais, "close")
|
||||||
|
|
||||||
class TestCase_IS_consumer(unittest.TestCase):
|
# part 1 not connected
|
||||||
|
#
|
||||||
|
# part 2 socket.error
|
||||||
|
self.ais.sock.setblocking(mox.IgnoreArg())
|
||||||
|
self.ais.sock.settimeout(mox.IgnoreArg())
|
||||||
|
self.ais.sock.sendall(mox.IgnoreArg()).AndRaise(socket.error)
|
||||||
|
self.ais.close()
|
||||||
|
# part 3 empty input
|
||||||
|
#
|
||||||
|
|
||||||
|
mox.Replay(self.ais.sock)
|
||||||
|
self.m.ReplayAll()
|
||||||
|
|
||||||
|
# part 1
|
||||||
|
self.ais._connected = False
|
||||||
|
with self.assertRaises(aprslib.ConnectionError):
|
||||||
|
self.ais.sendall("test")
|
||||||
|
# part 2
|
||||||
|
self.ais._connected = True
|
||||||
|
with self.assertRaises(aprslib.ConnectionError):
|
||||||
|
self.ais.sendall("test")
|
||||||
|
|
||||||
|
# part 3
|
||||||
|
self.ais._connected = True
|
||||||
|
self.ais.sendall("")
|
||||||
|
|
||||||
|
# verify so far
|
||||||
|
mox.Verify(self.ais.sock)
|
||||||
|
self.m.VerifyAll()
|
||||||
|
|
||||||
|
# rest
|
||||||
|
self.ais._connected = True
|
||||||
|
for line in [
|
||||||
|
"test", # no \r\n
|
||||||
|
"test\r\n", # with \r\n
|
||||||
|
u"test", # unicode
|
||||||
|
5, # number or anything with __str__
|
||||||
|
]:
|
||||||
|
# setup
|
||||||
|
self.ais.sock = mox.MockAnything()
|
||||||
|
self.ais.sock.setblocking(mox.IgnoreArg())
|
||||||
|
self.ais.sock.settimeout(mox.IgnoreArg())
|
||||||
|
self.ais.sock.sendall("%s\r\n" % str(line).rstrip('\r\n')).AndReturn(None)
|
||||||
|
mox.Replay(self.ais.sock)
|
||||||
|
|
||||||
|
self.ais.sendall(line)
|
||||||
|
|
||||||
|
mox.Verify(self.ais.sock)
|
||||||
|
|
||||||
|
|
||||||
|
class TC_IS_consumer(unittest.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
self.ais = aprslib.IS("LZ1DEV-99")
|
self.ais = aprslib.IS("LZ1DEV-99")
|
||||||
self.ais._connected = True
|
self.ais._connected = True
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue