1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
try:
import unittest2 as unittest
except ImportError:
import unittest
import os
from mock import (patch, Mock)
from StringIO import StringIO
import ping
import requests
from leap.base import checks
from leap.base import exceptions
from leap.testing.basetest import BaseLeapTest
_uid = os.getuid()
class LeapNetworkCheckTest(BaseLeapTest):
__name__ = "leap_network_check_tests"
def setUp(self):
pass
def tearDown(self):
pass
def test_checker_should_implement_check_methods(self):
checker = checks.LeapNetworkChecker()
self.assertTrue(hasattr(checker, "check_internet_connection"),
"missing meth")
self.assertTrue(hasattr(checker, "check_tunnel_default_interface"),
"missing meth")
self.assertTrue(hasattr(checker, "is_internet_up"),
"missing meth")
self.assertTrue(hasattr(checker, "ping_gateway"),
"missing meth")
def test_checker_should_actually_call_all_tests(self):
checker = checks.LeapNetworkChecker()
mc = Mock()
checker.run_all(checker=mc)
self.assertTrue(mc.check_internet_connection.called, "not called")
self.assertTrue(mc.check_tunnel_default_interface.called, "not called")
self.assertTrue(mc.is_internet_up.called, "not called")
# ping gateway only called if we pass provider_gw
checker = checks.LeapNetworkChecker(provider_gw="0.0.0.0")
mc = Mock()
checker.run_all(checker=mc)
self.assertTrue(mc.check_internet_connection.called, "not called")
self.assertTrue(mc.check_tunnel_default_interface.called, "not called")
self.assertTrue(mc.ping_gateway.called, "not called")
self.assertTrue(mc.is_internet_up.called, "not called")
def test_get_default_interface_no_interface(self):
checker = checks.LeapNetworkChecker()
with patch('leap.base.checks.open', create=True) as mock_open:
with self.assertRaises(exceptions.NoDefaultInterfaceFoundError):
mock_open.return_value = StringIO(
"Iface\tDestination Gateway\t"
"Flags\tRefCntd\tUse\tMetric\t"
"Mask\tMTU\tWindow\tIRTT")
checker.get_default_interface_gateway()
def test_check_tunnel_default_interface(self):
checker = checks.LeapNetworkChecker()
with patch('leap.base.checks.open', create=True) as mock_open:
with self.assertRaises(exceptions.TunnelNotDefaultRouteError):
mock_open.return_value = StringIO(
"Iface\tDestination Gateway\t"
"Flags\tRefCntd\tUse\tMetric\t"
"Mask\tMTU\tWindow\tIRTT")
checker.check_tunnel_default_interface()
with patch('leap.base.checks.open', create=True) as mock_open:
with self.assertRaises(exceptions.TunnelNotDefaultRouteError):
mock_open.return_value = StringIO(
"Iface\tDestination Gateway\t"
"Flags\tRefCntd\tUse\tMetric\t"
"Mask\tMTU\tWindow\tIRTT\n"
"wlan0\t00000000\t0102A8C0\t"
"0003\t0\t0\t0\t00000000\t0\t0\t0")
checker.check_tunnel_default_interface()
with patch('leap.base.checks.open', create=True) as mock_open:
mock_open.return_value = StringIO(
"Iface\tDestination Gateway\t"
"Flags\tRefCntd\tUse\tMetric\t"
"Mask\tMTU\tWindow\tIRTT\n"
"tun0\t00000000\t01002A0A\t0003\t0\t0\t0\t00000080\t0\t0\t0")
checker.check_tunnel_default_interface()
def test_ping_gateway_fail(self):
checker = checks.LeapNetworkChecker()
with patch.object(ping, "quiet_ping") as mocked_ping:
with self.assertRaises(exceptions.NoConnectionToGateway):
mocked_ping.return_value = [11, "", ""]
checker.ping_gateway("4.2.2.2")
def test_check_internet_connection_failures(self):
checker = checks.LeapNetworkChecker()
with patch.object(requests, "get") as mocked_get:
mocked_get.side_effect = requests.HTTPError
with self.assertRaises(exceptions.NoInternetConnection):
checker.check_internet_connection()
with patch.object(requests, "get") as mocked_get:
mocked_get.side_effect = requests.RequestException
with self.assertRaises(exceptions.NoInternetConnection):
checker.check_internet_connection()
#TODO: Mock possible errors that can be raised by is_internet_up
with patch.object(requests, "get") as mocked_get:
mocked_get.side_effect = requests.ConnectionError
with self.assertRaises(exceptions.NoInternetConnection):
checker.check_internet_connection()
@unittest.skipUnless(_uid == 0, "root only")
def test_ping_gateway(self):
checker = checks.LeapNetworkChecker()
checker.ping_gateway("4.2.2.2")
|