Write more server tests

This commit is contained in:
Brian May 2016-03-16 18:24:43 +11:00
parent d522d1e1bd
commit dea3f21943
2 changed files with 62 additions and 3 deletions

View File

@ -17,6 +17,7 @@ from sshuttle.helpers import log, debug1, debug2, debug3, Fatal, \
def _ipmatch(ipstr): def _ipmatch(ipstr):
# FIXME: IPv4 only
if ipstr == b'default': if ipstr == b'default':
ipstr = b'0.0.0.0/0' ipstr = b'0.0.0.0/0'
m = re.match(b'^(\d+(\.\d+(\.\d+(\.\d+)?)?)?)(?:/(\d+))?$', ipstr) m = re.match(b'^(\d+(\.\d+(\.\d+(\.\d+)?)?)?)(?:/(\d+))?$', ipstr)
@ -38,6 +39,7 @@ def _ipmatch(ipstr):
def _ipstr(ip, width): def _ipstr(ip, width):
# FIXME: IPv4 only
if width >= 32: if width >= 32:
return ip return ip
else: else:
@ -45,6 +47,7 @@ def _ipstr(ip, width):
def _maskbits(netmask): def _maskbits(netmask):
# FIXME: IPv4 only
if not netmask: if not netmask:
return 32 return 32
for i in range(32): for i in range(32):

View File

@ -1,7 +1,63 @@
import io
import socket
import sshuttle.server import sshuttle.server
from mock import patch, Mock, call
def test__ipmatch(): def test__ipmatch():
assert sshuttle.server._ipmatch("1.2.3.4") is not None assert sshuttle.server._ipmatch(b"1.2.3.4") is not None
assert sshuttle.server._ipmatch("::1") is not None assert sshuttle.server._ipmatch(b"::1") is None # ipv6 not supported
assert sshuttle.server._ipmatch("42 Example Street, Melbourne") is None assert sshuttle.server._ipmatch(b"42 Example Street, Melbourne") is None
def test__ipstr():
assert sshuttle.server._ipstr("1.2.3.4", 24) == "1.2.3.4/24"
assert sshuttle.server._ipstr("1.2.3.4", 32) == "1.2.3.4"
def test__maskbits():
netmask = sshuttle.server._ipmatch(b"255.255.255.0")
sshuttle.server._maskbits(netmask)
@patch('sshuttle.server.ssubprocess.Popen')
def test__listroutes(mock_popen):
mock_pobj = Mock()
mock_pobj.stdout = io.BytesIO(b"""
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
""")
mock_pobj.wait.return_value = 0
mock_popen.return_value = mock_pobj
routes = sshuttle.server._list_routes()
assert mock_popen.mock_calls == [
call(['netstat', '-rn'], stdout=-1),
call().wait()
]
assert routes == [
(socket.AF_INET, '0.0.0.0', 0),
(socket.AF_INET, '192.168.1.0', 24)
]
@patch('sshuttle.server.ssubprocess.Popen')
def test_listroutes(mock_popen):
mock_pobj = Mock()
mock_pobj.stdout = io.BytesIO(b"""
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
""")
mock_pobj.wait.return_value = 0
mock_popen.return_value = mock_pobj
routes = sshuttle.server.list_routes()
assert list(routes) == [
(socket.AF_INET, '192.168.1.0', 24)
]