summaryrefslogtreecommitdiff
path: root/src/leap/eip/test_vpnmanager.py
blob: 76ff0a68764e2ac2045d909b4a64c85fa0311770 (plain)
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
import logging
import platform

logging.basicConfig()
logger = logging.getLogger(name=__name__)

try:
    import unittest2 as unittest
except ImportError:
    import unittest

from mock import Mock, patch  # MagicMock

from leap.eip import vpnmanager  # import OpenVPNManager

_system = platform.system()


class NotImplementedError(Exception):
    pass


@patch('vpnmanager.OpenVPNManager.connect')
class MockedOpenVPNManager(vpnmanager.OpenVPNManager):
    def __init__(self, *args, **kwargs):
        self.mock_UDSTelnet = Mock()
        super(MockedOpenVPNManager, self).__init__(
            *args, **kwargs)
        self.tn = self.mock_UDSTelnet(self.host, self.port)


class OpenVPNManagerTest(unittest.TestCase):

    __name__ = "openvpn_manager_tests"

    def setUp(self):
        self.manager = MockedOpenVPNManager()

    def tearDown(self):
        del self.manager

    #
    # helpers
    #

    # XXX hey, refactor this to basetestclass

    def _missing_test_for_plat(self, do_raise=False):
        if do_raise:
            raise NotImplementedError(
                "This test is not implemented "
                "for the running platform: %s" %
                _system)

    #
    # tests
    #

    @unittest.skipIf(_system == "Windows", "lin/mac only")
    def test_lin_mac_default_init(self):
        """
        check default host for management iface
        """
        self.assertEqual(self.manager.host, '/tmp/.eip.sock')
        self.assertEqual(self.manager.port, 'unix')

    @unittest.skipUnless(_system == "Windows", "win only")
    def test_win_default_init(self):
        """
        check default host for management iface
        """
        # XXX should we make the platform specific switch
        # here or in the vpn command string building?
        self.assertEqual(self.manager.host, 'localhost')
        self.assertEqual(self.manager.port, 7777)

    def test_port_types_init(self):
        self.manager = MockedOpenVPNManager(port="42")
        self.assertEqual(self.manager.port, 42)
        self.manager = MockedOpenVPNManager()
        self.assertEqual(self.manager.port, "unix")
        self.manager = MockedOpenVPNManager(port="bad")
        self.assertEqual(self.manager.port, None)

    def test_connect_raises_missing_socket(self):
        self.manager = vpnmanager.OpenVPNManager()
        with self.assertRaises(vpnmanager.MissingSocketError):
            self.manager.connect()

    def test_uds_telnet_called_on_connect(self):
        # XXX patch UDSTelnet!
        manager = self.manager
        self.mock_UDSTelnet = Mock()
        self.manager.tn = self.mock_UDSTelnet(manager.host, manager.port)
        self.manager.connect()
        self.manager.tn.assert_called_with(
            self.manager.port,
            port=self.manager.port)

    def test_connect(self):
        pass
        # XXX calls close
        # calls UDSTelnet

    # XXX
    # tests to write:
    # UDSTelnet (for real?)
    # - raise MissingSocket
    # - raise ConnectionRefusedError
    # - test send command
    #   - tries connect
    #   - ... tries?
    #   - ... calls _seek_to_eof
    #   - ... read_until --> return value
    #   - ...


if __name__ == "__main__":
    unittest.main()