diff options
Diffstat (limited to 'src')
| -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 | 
4 files changed, 95 insertions, 25 deletions
| 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) | 
