From 7a8f4db1a4743582c34a52ab448eece0e7689bc8 Mon Sep 17 00:00:00 2001 From: kali Date: Tue, 28 Aug 2012 23:36:39 +0900 Subject: test for eip_config_checker called from eip_connection run_checks method also: - changed name EIPChecker -> EipConfigChecker - Added class documentation --- src/leap/eip/checks.py | 34 ++++++++++++++++++++++++-------- src/leap/eip/eipconnection.py | 11 ++++++----- src/leap/eip/tests/test_checks.py | 14 ++++++------- src/leap/eip/tests/test_eipconnection.py | 30 +++++++++++++++------------- 4 files changed, 55 insertions(+), 34 deletions(-) (limited to 'src') diff --git a/src/leap/eip/checks.py b/src/leap/eip/checks.py index 794e69e1..27320b1f 100644 --- a/src/leap/eip/checks.py +++ b/src/leap/eip/checks.py @@ -15,21 +15,40 @@ from leap.eip import constants as eipconstants from leap.eip import exceptions as eipexceptions from leap.util.fileutil import mkdir_p +""" +EIPConfigChecker +---------- +this is the first of 3 consecutive checks that we're implementing. -class EIPChecker(object): +It is used from the eip conductor (a instance of EIPConnection that is +managed from the QtApp), running run_all method before trying to call +`connect` or any other of the state switching methods. + +It checks that the needed files are provided or can be discovered over the +net. Much of these tests are not specific to EIP module, and can be splitted +into base.tests to be invoked by the base leap init routines. +However, I'm testing them alltogether for the sake of having the whole unit +reachable and testable as a whole. + +Other related checkers - not implemented yet -: +* LeapNetworkChecker +* ProviderCertChecker +""" + + +class EIPConfigChecker(object): """ Several tests needed to ensure a EIPConnection - can be sucessful + can be sucessfully established. use run_all to run all checks. """ def __init__(self, fetcher=requests): - """ - we do not want to accept too many - argument on init. we want tests - to be explicitely run. - """ + # we do not want to accept too many + # argument on init. + # we want tests + # to be explicitely run. self.config = None self.fetcher = fetcher @@ -100,7 +119,6 @@ class EIPChecker(object): def fetch_definition(self, skip_download=False, config=None, uri=None): - # check_and_get_definition_file """ fetches a definition file from server """ diff --git a/src/leap/eip/eipconnection.py b/src/leap/eip/eipconnection.py index aea560c9..386b71be 100644 --- a/src/leap/eip/eipconnection.py +++ b/src/leap/eip/eipconnection.py @@ -8,7 +8,7 @@ logging.basicConfig() logger = logging.getLogger(name=__name__) logger.setLevel(logging.DEBUG) -from leap.eip.checks import EIPChecker +from leap.eip.checks import EIPConfigChecker from leap.eip import exceptions as eip_exceptions from leap.eip.openvpnconnection import OpenVPNConnection @@ -18,18 +18,19 @@ class EIPConnection(OpenVPNConnection): Manages the execution of the OpenVPN process, auto starts, monitors the network connection, handles configuration, fixes leaky hosts, handles errors, etc. - Preferences will be stored via the Storage API. (TBD) Status updates (connected, bandwidth, etc) are signaled to the GUI. """ - def __init__(self, checker=EIPChecker, *args, **kwargs): + def __init__(self, config_checker=EIPConfigChecker, *args, **kwargs): self.settingsfile = kwargs.get('settingsfile', None) self.logfile = kwargs.get('logfile', None) + + # not used atm. but should. self.error_queue = [] status_signals = kwargs.pop('status_signals', None) self.status = EIPConnectionStatus(callbacks=status_signals) - self.checker = checker() + self.config_checker = config_checker() super(EIPConnection, self).__init__(*args, **kwargs) @@ -37,7 +38,7 @@ class EIPConnection(OpenVPNConnection): """ run all eip checks previous to attempting a connection """ - self.checker.run_all(skip_download=skip_download) + self.config_checker.run_all(skip_download=skip_download) def connect(self): """ diff --git a/src/leap/eip/tests/test_checks.py b/src/leap/eip/tests/test_checks.py index 83561833..1c79ce0c 100644 --- a/src/leap/eip/tests/test_checks.py +++ b/src/leap/eip/tests/test_checks.py @@ -32,7 +32,7 @@ class EIPCheckTest(BaseLeapTest): # test methods are there, and can be called from run_all def test_checker_should_implement_check_methods(self): - checker = eipchecks.EIPChecker() + checker = eipchecks.EIPConfigChecker() self.assertTrue(hasattr(checker, "check_default_eipconfig"), "missing meth") @@ -45,7 +45,7 @@ class EIPCheckTest(BaseLeapTest): self.assertTrue(hasattr(checker, "ping_gateway"), "missing meth") def test_checker_should_actually_call_all_tests(self): - checker = eipchecks.EIPChecker() + checker = eipchecks.EIPConfigChecker() mc = Mock() checker.run_all(checker=mc) @@ -64,7 +64,7 @@ class EIPCheckTest(BaseLeapTest): # test individual check methods def test_check_default_eipconfig(self): - checker = eipchecks.EIPChecker() + checker = eipchecks.EIPConfigChecker() # no eip config (empty home) eipconfig = baseconfig.get_config_file(eipconstants.EIP_CONFIG) self.assertFalse(os.path.isfile(eipconfig)) @@ -79,7 +79,7 @@ class EIPCheckTest(BaseLeapTest): # run validation methods. def test_check_is_there_default_provider(self): - checker = eipchecks.EIPChecker() + checker = eipchecks.EIPConfigChecker() # we do dump a sample eip config, but lacking a # default provider entry. # This error will be possible catched in a different @@ -104,7 +104,7 @@ class EIPCheckTest(BaseLeapTest): with patch.object(requests, "get") as mocked_get: mocked_get.return_value.status_code = 200 mocked_get.return_value.json = DEFAULT_PROVIDER_DEFINITION - checker = eipchecks.EIPChecker(fetcher=requests) + checker = eipchecks.EIPConfigChecker(fetcher=requests) sampleconfig = eipconstants.EIP_SAMPLE_JSON checker.fetch_definition(config=sampleconfig) @@ -122,12 +122,12 @@ class EIPCheckTest(BaseLeapTest): with patch.object(requests, "get") as mocked_get: mocked_get.return_value.status_code = 200 mocked_get.return_value.json = eipconstants.EIP_SAMPLE_SERVICE - checker = eipchecks.EIPChecker(fetcher=requests) + checker = eipchecks.EIPConfigChecker(fetcher=requests) sampleconfig = eipconstants.EIP_SAMPLE_JSON checker.fetch_definition(config=sampleconfig) def test_check_complete_eip_config(self): - checker = eipchecks.EIPChecker() + checker = eipchecks.EIPConfigChecker() with self.assertRaises(eipexceptions.EIPConfigurationError): sampleconfig = copy.copy(eipconstants.EIP_SAMPLE_JSON) sampleconfig['provider'] = None diff --git a/src/leap/eip/tests/test_eipconnection.py b/src/leap/eip/tests/test_eipconnection.py index 7d8acad6..26f6529e 100644 --- a/src/leap/eip/tests/test_eipconnection.py +++ b/src/leap/eip/tests/test_eipconnection.py @@ -50,8 +50,12 @@ class EIPConductorTest(BaseLeapTest): # for instance: # We have to TOUCH a keys file because # we're triggerig the key checks FROM - # the constructo. me not like that, + # the constructor. me not like that, # key checker should better be called explicitelly. + + # XXX change to keys_checker invocation + # (see config_checker) + filepath = os.path.expanduser( '~/.config/leap/providers/%s/openvpn.keys' % constants.DEFAULT_TEST_PROVIDER) @@ -60,12 +64,8 @@ class EIPConductorTest(BaseLeapTest): # we init the manager with only # some methods mocked - - self.manager = Mock( - name="openvpnmanager_mock") - + self.manager = Mock(name="openvpnmanager_mock") self.con = MockedEIPConnection() - #manager=self.manager) def tearDown(self): del self.con @@ -74,14 +74,6 @@ class EIPConductorTest(BaseLeapTest): # tests # - @unittest.skip - #ain't manager anymore! - def test_manager_was_initialized(self): - """ - manager init ok during conductor init? - """ - self.manager.assert_called_once_with() - def test_vpnconnection_defaults(self): """ default attrs as expected @@ -109,6 +101,16 @@ class EIPConductorTest(BaseLeapTest): self.assertEqual(self.con.args, [1, 2, 3]) + # config checks + + def test_config_checked_called(self): + del(self.con) + config_checker = Mock() + self.con = MockedEIPConnection(config_checker=config_checker) + self.assertTrue(config_checker.called) + self.con.run_checks() + self.con.config_checker.run_all.assert_called_with(skip_download=False) + # connect/disconnect calls def test_disconnect(self): -- cgit v1.2.3