Skip to content

Commit

Permalink
Write more server tests
Browse files Browse the repository at this point in the history
  • Loading branch information
brianmay committed Mar 16, 2016
1 parent d522d1e commit dea3f21
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 3 deletions.
3 changes: 3 additions & 0 deletions sshuttle/server.py
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@


def _ipmatch(ipstr):
# FIXME: IPv4 only
if ipstr == b'default':
ipstr = b'0.0.0.0/0'
m = re.match(b'^(\d+(\.\d+(\.\d+(\.\d+)?)?)?)(?:/(\d+))?$', ipstr)
Expand All @@ -38,13 +39,15 @@ def _ipmatch(ipstr):


def _ipstr(ip, width):
# FIXME: IPv4 only
if width >= 32:
return ip
else:
return "%s/%d" % (ip, width)


def _maskbits(netmask):
# FIXME: IPv4 only
if not netmask:
return 32
for i in range(32):
Expand Down
62 changes: 59 additions & 3 deletions sshuttle/tests/server/test_server.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,63 @@
import io
import socket
import sshuttle.server
from mock import patch, Mock, call


def test__ipmatch():
assert sshuttle.server._ipmatch("1.2.3.4") is not None
assert sshuttle.server._ipmatch("::1") is not None
assert sshuttle.server._ipmatch("42 Example Street, Melbourne") is None
assert sshuttle.server._ipmatch(b"1.2.3.4") is not None
assert sshuttle.server._ipmatch(b"::1") is None # ipv6 not supported
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)
]

0 comments on commit dea3f21

Please sign in to comment.