Skip the selected testcase too 33/60833/4 0.56
authorCédric Ollivier <cedric.ollivier@orange.com>
Fri, 10 Aug 2018 11:04:11 +0000 (13:04 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Sun, 12 Aug 2018 10:08:52 +0000 (12:08 +0200)
It completes "Allow calling a skip test" [1]

[1] https://gerrit.opnfv.org/gerrit/60655

Change-Id: I02499aed56e6b23563165ea1f17b476e12408823
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
tox.ini
xtesting/ci/run_tests.py
xtesting/ci/tier_builder.py
xtesting/ci/tier_handler.py
xtesting/tests/unit/ci/test_run_tests.py
xtesting/tests/unit/ci/test_tier_handler.py

diff --git a/tox.ini b/tox.ini
index 8041008..6c6de70 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -57,7 +57,6 @@ dirs =
   xtesting/tests/unit/energy
   xtesting/tests/unit/utils/test_decorators.py
 commands = nosetests --with-coverage --cover-tests \
-  --cover-package xtesting.ci.tier_handler \
   --cover-package xtesting.core \
   --cover-package xtesting.energy \
   --cover-package xtesting.tests.unit \
index 61482d9..59ed561 100644 (file)
@@ -138,7 +138,7 @@ class Runner(object):
 
     def run_test(self, test):
         """Run one test case"""
-        if not test.is_enabled():
+        if not test.is_enabled() or test.is_skipped():
             msg = prettytable.PrettyTable(
                 header_style='upper', padding_width=5,
                 field_names=['test case', 'project', 'duration',
index 4290981..66ad325 100644 (file)
@@ -45,11 +45,11 @@ class TierBuilder(object):
             tier = tier_handler.Tier(
                 name=dic_tier['name'], order=dic_tier['order'],
                 description=dic_tier['description'])
-
             for dic_testcase in dic_tier['testcases']:
                 testcase = tier_handler.TestCase(
                     name=dic_testcase['case_name'],
                     enabled=dic_testcase.get('enabled', True),
+                    skipped=False,
                     criteria=dic_testcase['criteria'],
                     blocking=dic_testcase['blocking'],
                     description=dic_testcase['description'],
@@ -58,17 +58,20 @@ class TierBuilder(object):
                     if testcase.is_enabled():
                         tier.add_test(testcase)
                     else:
+                        testcase.skipped = True
                         tier.skip_test(testcase)
                 else:
                     for dependency in dic_testcase['dependencies']:
                         kenv = dependency.keys()[0]
                         if not re.search(dependency[kenv], env.get(kenv)):
+                            testcase.skipped = True
                             tier.skip_test(testcase)
                             break
                     else:
                         if testcase.is_enabled():
                             tier.add_test(testcase)
                         else:
+                            testcase.skipped = True
                             tier.skip_test(testcase)
             self.tier_objects.append(tier)
 
index 11a0858..ce9685b 100644 (file)
@@ -97,11 +97,12 @@ class Tier(object):
 
 class TestCase(object):
 
-    def __init__(self, name, enabled, criteria, blocking,
+    def __init__(self, name, enabled, skipped, criteria, blocking,
                  description="", project=""):
         # pylint: disable=too-many-arguments
         self.name = name
         self.enabled = enabled
+        self.skipped = skipped
         self.criteria = criteria
         self.blocking = blocking
         self.description = description
@@ -113,6 +114,9 @@ class TestCase(object):
     def is_enabled(self):
         return self.enabled
 
+    def is_skipped(self):
+        return self.skipped
+
     def get_criteria(self):
         return self.criteria
 
index 448b6f3..392612b 100644 (file)
@@ -130,6 +130,8 @@ class RunTestsTesting(unittest.TestCase):
     def test_run_tests_import_exception(self, *args):
         mock_test = mock.Mock()
         kwargs = {'get_name.return_value': 'test_name',
+                  'is_skipped.return_value': False,
+                  'is_enabled.return_value': True,
                   'needs_clean.return_value': False}
         mock_test.configure_mock(**kwargs)
         with self.assertRaises(Exception) as context:
@@ -145,6 +147,8 @@ class RunTestsTesting(unittest.TestCase):
     def test_run_tests_default(self, *args):
         mock_test = mock.Mock()
         kwargs = {'get_name.return_value': 'test_name',
+                  'is_skipped.return_value': False,
+                  'is_enabled.return_value': True,
                   'needs_clean.return_value': True}
         mock_test.configure_mock(**kwargs)
         test_run_dict = {'module': 'test_module',
@@ -153,12 +157,47 @@ class RunTestsTesting(unittest.TestCase):
                         return_value=test_run_dict):
             self.runner.clean_flag = True
             self.runner.run_test(mock_test)
-
         args[0].assert_called_with('test_name')
         args[1].assert_called_with('test_module')
         self.assertEqual(self.runner.overall_result,
                          run_tests.Result.EX_OK)
 
+    @mock.patch('xtesting.ci.run_tests.Runner.get_dict_by_test')
+    def test_run_tests_disabled(self, *args):
+        mock_test = mock.Mock()
+        kwargs = {'get_name.return_value': 'test_name',
+                  'is_skipped.return_value': False,
+                  'is_enabled.return_value': False,
+                  'needs_clean.return_value': True}
+        mock_test.configure_mock(**kwargs)
+        test_run_dict = {'module': 'test_module',
+                         'class': 'test_class'}
+        with mock.patch('xtesting.ci.run_tests.Runner.get_run_dict',
+                        return_value=test_run_dict):
+            self.runner.clean_flag = True
+            self.runner.run_test(mock_test)
+        args[0].assert_not_called()
+        self.assertEqual(self.runner.overall_result,
+                         run_tests.Result.EX_OK)
+
+    @mock.patch('xtesting.ci.run_tests.Runner.get_dict_by_test')
+    def test_run_tests_skipped(self, *args):
+        mock_test = mock.Mock()
+        kwargs = {'get_name.return_value': 'test_name',
+                  'is_skipped.return_value': True,
+                  'is_enabled.return_value': True,
+                  'needs_clean.return_value': True}
+        mock_test.configure_mock(**kwargs)
+        test_run_dict = {'module': 'test_module',
+                         'class': 'test_class'}
+        with mock.patch('xtesting.ci.run_tests.Runner.get_run_dict',
+                        return_value=test_run_dict):
+            self.runner.clean_flag = True
+            self.runner.run_test(mock_test)
+        args[0].assert_not_called()
+        self.assertEqual(self.runner.overall_result,
+                         run_tests.Result.EX_OK)
+
     @mock.patch('xtesting.ci.run_tests.Runner.run_test',
                 return_value=TestCase.EX_OK)
     def test_run_tier_default(self, *mock_methods):
index 21670dd..2c48ac9 100644 (file)
@@ -25,7 +25,7 @@ class TierHandlerTesting(unittest.TestCase):
         self.tier = tier_handler.Tier(
             'test_tier', 'test_order', 'test_desc')
         self.testcase = tier_handler.TestCase(
-            'test_name', 'true', 'test_criteria',
+            'test_name', 'true', False, 'test_criteria',
             True, description='test_desc', project='project_name')
         self.testcase.str = self.testcase.__str__()
         self.tier.str = self.tier.__str__()