Skip the selected testcase too 35/60835/3 0.35
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:26:23 +0000 (12:26 +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>
(cherry picked from commit a9491ef0948f8fe3eb3772b6b6ae44d86bde7e9b)

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 2ee6a1c..0401894 100644 (file)
--- a/tox.ini
+++ b/tox.ini
@@ -58,7 +58,6 @@ dirs =
   xtesting/tests/unit/utils/test_decorators.py
 commands = nosetests --with-coverage --cover-tests \
   --cover-package xtesting.ci.tier_builder \
-  --cover-package xtesting.ci.tier_handler \
   --cover-package xtesting.core \
   --cover-package xtesting.energy \
   --cover-package xtesting.tests.unit \
index 27f9d94..255b74d 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 a416909..3383a76 100644 (file)
@@ -45,7 +45,6 @@ class TierBuilder(object):
                 name=dic_tier['name'], order=dic_tier['order'],
                 ci_loop=dic_tier['ci_loop'],
                 description=dic_tier['description'])
-
             for dic_testcase in dic_tier['testcases']:
                 if not dic_testcase.get('dependencies'):
                     installer = '.*'
@@ -60,6 +59,7 @@ class TierBuilder(object):
                 testcase = tier_handler.TestCase(
                     name=dic_testcase['case_name'],
                     enabled=dic_testcase.get('enabled', True),
+                    skipped=False,
                     dependency=dep, criteria=dic_testcase['criteria'],
                     blocking=dic_testcase['blocking'],
                     description=dic_testcase['description'],
@@ -69,6 +69,7 @@ class TierBuilder(object):
                         testcase.is_enabled()):
                     tier.add_test(testcase)
                 else:
+                    testcase.skipped = True
                     tier.skip_test(testcase)
 
             self.tier_objects.append(tier)
index 51f031c..4e413f5 100644 (file)
@@ -100,14 +100,15 @@ class Tier(object):
         return msg.get_string()
 
 
-class TestCase(object):
+class TestCase(object):  # pylint: disable=too-many-instance-attributes
 
-    def __init__(self, name, enabled, dependency, criteria, blocking,
+    def __init__(self, name, enabled, skipped, dependency, criteria, blocking,
                  description="", project=""):
         # pylint: disable=too-many-arguments
         self.name = name
         self.enabled = enabled
         self.dependency = dependency
+        self.skipped = skipped
         self.criteria = criteria
         self.blocking = blocking
         self.description = description
@@ -129,6 +130,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 de2af66..3624d15 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',
@@ -158,6 +162,42 @@ class RunTestsTesting(unittest.TestCase):
         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 97ba5ab..dd7e1b0 100644 (file)
@@ -29,7 +29,7 @@ class TierHandlerTesting(unittest.TestCase):
         self.tier = tier_handler.Tier(
             'test_tier', 'test_order', 'test_ci_loop', description='test_desc')
         self.testcase = tier_handler.TestCase(
-            'test_name', 'true', self.mock_depend, 'test_criteria',
+            'test_name', 'true', False, self.mock_depend, 'test_criteria',
             True, description='test_desc', project='project_name')
         self.dependency = tier_handler.Dependency(
             'test_installer', 'test_scenario')