diff options
-rw-r--r-- | setup.py | 2 | ||||
-rw-r--r-- | src/leap/common/check.py | 4 | ||||
-rw-r--r-- | src/leap/common/files.py | 5 | ||||
-rw-r--r-- | src/leap/common/testing/basetest.py | 68 | ||||
-rw-r--r-- | src/leap/common/testing/test_basetest.py | 43 |
5 files changed, 96 insertions, 26 deletions
@@ -36,7 +36,7 @@ setup( "Common files used by the LEAP Client project." ), namespace_packages=["leap"], - package_dir = {'': 'src'}, + package_dir={'': 'src'}, packages=find_packages('src'), #test_suite='leap.common.tests', #install_requires=requirements, diff --git a/src/leap/common/check.py b/src/leap/common/check.py index 9787341..359673b 100644 --- a/src/leap/common/check.py +++ b/src/leap/common/check.py @@ -14,12 +14,12 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. - """ Set of functions to help checking situations """ -import logging + import inspect +import logging import traceback diff --git a/src/leap/common/files.py b/src/leap/common/files.py index e3c8423..4c443dd 100644 --- a/src/leap/common/files.py +++ b/src/leap/common/files.py @@ -14,16 +14,15 @@ # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. - """ Implements file helper methods """ +import errno +import logging import os import stat -import logging import time -import errno logger = logging.getLogger(__name__) diff --git a/src/leap/common/testing/basetest.py b/src/leap/common/testing/basetest.py index 2359754..65e23a9 100644 --- a/src/leap/common/testing/basetest.py +++ b/src/leap/common/testing/basetest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# leap.common.testing.basetest.py +# basetest.py # Copyright (C) 2013 LEAP # # This program is free software: you can redistribute it and/or modify @@ -27,20 +27,25 @@ try: except ImportError: import unittest +from leap.common.check import leap_assert from leap.common.files import mkdir_p, check_and_fix_urw_only -_system = platform.system() - class BaseLeapTest(unittest.TestCase): """ Base Leap TestCase """ - __name__ = "leap_test" + _system = platform.system() @classmethod def setUpClass(cls): + """ + Sets up common facilities for testing this TestCase: + - custom PATH and HOME environmental variables + - creates a temporal folder to which those point. + It saves the old path and home vars so they can be restored later. + """ cls.old_path = os.environ['PATH'] cls.old_home = os.environ['HOME'] cls.tempdir = tempfile.mkdtemp(prefix="leap_tests-") @@ -53,10 +58,19 @@ class BaseLeapTest(unittest.TestCase): @classmethod def tearDownClass(cls): + """ + Cleanup common facilities used for testing this TestCase: + - restores the default PATH and HOME variables + - removes the temporal folder + """ os.environ["PATH"] = cls.old_path os.environ["HOME"] = cls.old_home - # safety check - assert cls.tempdir.startswith('/tmp/leap_tests-') + # safety check! please do not wipe my home... + # XXX needs to adapt to non-linuces + leap_assert( + cls.tempdir.startswith('/tmp/leap_tests-'), + "beware! tried to remove a dir which does not " + "live in temporal folder!") shutil.rmtree(cls.tempdir) # you have to override these methods @@ -64,37 +78,63 @@ class BaseLeapTest(unittest.TestCase): # here that you can forget to call. def setUp(self): + """not implemented""" raise NotImplementedError("abstract base class") def tearDown(self): + """not implemented""" raise NotImplementedError("abstract base class") # # helper methods # - def get_tempfile(self, filename): - return os.path.join(self.tempdir, filename) - def _missing_test_for_plat(self, do_raise=False): + """ + Raises NotImplementedError for this platform + if do_raise is True + + @param do_raise: flag to actually raise exception + @type do_raise: bool + """ if do_raise: raise NotImplementedError( "This test is not implemented " "for the running platform: %s" % - _system) + self._system) + + def get_tempfile(self, filename): + """ + Returns the path of a given filename + prepending the temporal dir associated with this + TestCase + + @param filename: the filename + @type filename: str + """ + return os.path.join(self.tempdir, filename) def touch(self, filepath): + """ + Touches a filepath, creating folders along + the way if needed. + + @param filepath: path to be touched + @type filepath: str + """ folder, filename = os.path.split(filepath) if not os.path.isdir(folder): mkdir_p(folder) - # XXX should move to test_basetest self.assertTrue(os.path.isdir(folder)) - with open(filepath, 'w') as fp: fp.write(' ') - - # XXX should move to test_basetest self.assertTrue(os.path.isfile(filepath)) def chmod600(self, filepath): + """ + Chmods 600 a file + + @param filepath: filepath to be chmodded + @type filepath: str + """ check_and_fix_urw_only(filepath) diff --git a/src/leap/common/testing/test_basetest.py b/src/leap/common/testing/test_basetest.py index 3674185..c4636df 100644 --- a/src/leap/common/testing/test_basetest.py +++ b/src/leap/common/testing/test_basetest.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- -# leap.common.testing.test_basetest +# test_basetest.py # Copyright (C) 2013 LEAP # # This program is free software: you can redistribute it and/or modify @@ -15,8 +15,8 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. """ -Unittests for base test -...becase it's oh so meta""" +Unittests for BaseLeapTest ...becase it's oh so meta +""" try: import unittest2 as unittest except ImportError: @@ -27,12 +27,20 @@ import StringIO from leap.testing.basetest import BaseLeapTest -# global for tempdir checking -_tempdir = None +_tempdir = None # global for tempdir checking class _TestCaseRunner(object): + """ + TestCaseRunner used to run BaseLeapTest + """ def run_testcase(self, testcase=None): + """ + Runs a given TestCase + + @param testcase: the testcase + @type testcase: unittest.TestCase + """ if not testcase: return None loader = unittest.TestLoader() @@ -46,8 +54,13 @@ class _TestCaseRunner(object): class TestAbstractBaseLeapTest(unittest.TestCase, _TestCaseRunner): - + """ + TestCase for BaseLeapTest abs + """ def test_abstract_base_class(self): + """ + Test errors raised when setup/teardown not overloaded + """ class _BaseTest(BaseLeapTest): def test_dummy_method(self): pass @@ -65,36 +78,54 @@ class TestAbstractBaseLeapTest(unittest.TestCase, _TestCaseRunner): class TestInitBaseLeapTest(BaseLeapTest): + """ + TestCase for testing initialization of BaseLeapTest + """ def setUp(self): + """nuke it""" pass def tearDown(self): + """nuke it""" pass def test_path_is_changed(self): + """tests whether we have changed the PATH env var""" os_path = os.environ['PATH'] self.assertTrue(os_path.startswith(self.tempdir)) def test_old_path_is_saved(self): + """tests whether we restore the PATH env var""" self.assertTrue(len(self.old_path) > 1) class TestCleanedBaseLeapTest(unittest.TestCase, _TestCaseRunner): + """ + TestCase for testing tempdir creation and cleanup + """ def test_tempdir_is_cleaned_after_tests(self): + """ + test if a TestCase derived from BaseLeapTest creates and cleans the + temporal dir + """ class _BaseTest(BaseLeapTest): def setUp(self): + """set global _tempdir to this instance tempdir""" global _tempdir _tempdir = self.tempdir def tearDown(self): + """nothing""" pass def test_tempdir_created(self): + """test if tempdir was created""" self.assertTrue(os.path.isdir(self.tempdir)) def test_tempdir_created_on_setupclass(self): + """test if tempdir is the one created by setupclass""" self.assertEqual(_tempdir, self.tempdir) results = self.run_testcase(_BaseTest) |