Merge "Modify how to disable logging in unit test."
[functest.git] / functest / tests / unit / ci / test_run_tests.py
index 0214061..d48c79c 100644 (file)
@@ -17,8 +17,6 @@ from functest.utils.constants import CONST
 
 class RunTestsTesting(unittest.TestCase):
 
-    logging.disable(logging.CRITICAL)
-
     def setUp(self):
         self.sep = 'test_sep'
         self.creds = {'OS_AUTH_URL': 'http://test_ip:test_port/v2.0',
@@ -37,6 +35,9 @@ class RunTestsTesting(unittest.TestCase):
         attrs = {'get_tiers.return_value': [self.tier]}
         self.tiers.configure_mock(**attrs)
 
+        self.run_tests_parser = run_tests.RunTestsParser()
+        self.global_variables = run_tests.GlobalVariables()
+
     @mock.patch('functest.ci.run_tests.logger.info')
     def test_print_separator(self, mock_logger_info):
         run_tests.print_separator(self.sep)
@@ -59,24 +60,13 @@ class RunTestsTesting(unittest.TestCase):
 
     @mock.patch('functest.ci.run_tests.os_snapshot.main')
     def test_generate_os_snapshot(self, mock_os_snap):
-            run_tests.generate_os_snapshot()
-            self.assertTrue(mock_os_snap.called)
+        run_tests.generate_os_snapshot()
+        self.assertTrue(mock_os_snap.called)
 
     @mock.patch('functest.ci.run_tests.os_clean.main')
     def test_cleanup(self, mock_os_clean):
-            run_tests.cleanup()
-            self.assertTrue(mock_os_clean.called)
-
-    def test_update_test_info(self):
-        run_tests.GlobalVariables.EXECUTED_TEST_CASES = [self.test]
-        run_tests.update_test_info('test_name',
-                                   'test_result',
-                                   'test_duration')
-        exp = self.test
-        exp.update({"result": 'test_result',
-                    "duration": 'test_duration'})
-        self.assertEqual(run_tests.GlobalVariables.EXECUTED_TEST_CASES,
-                         [exp])
+        run_tests.cleanup()
+        self.assertTrue(mock_os_clean.called)
 
     def test_get_run_dict_if_defined_default(self):
         mock_obj = mock.Mock()
@@ -121,8 +111,8 @@ class RunTestsTesting(unittest.TestCase):
 
     def test_run_tests_import_test_class_exception(self):
         mock_test = mock.Mock()
-        args = {'get_name': 'test_name',
-                'needs_clean': False}
+        args = {'get_name.return_value': 'test_name',
+                'needs_clean.return_value': False}
         mock_test.configure_mock(**args)
         with mock.patch('functest.ci.run_tests.print_separator'),\
             mock.patch('functest.ci.run_tests.source_rc_file'), \
@@ -133,6 +123,26 @@ class RunTestsTesting(unittest.TestCase):
             msg = "Cannot import the class for the test case."
             self.assertTrue(msg in context)
 
+    def test_run_tests_default(self):
+        mock_test = mock.Mock()
+        args = {'get_name.return_value': 'test_name',
+                'needs_clean.return_value': True}
+        mock_test.configure_mock(**args)
+        test_run_dict = {'module': 'test_module',
+                         'class': mock.Mock,
+                         'args': 'test_args'}
+        with mock.patch('functest.ci.run_tests.print_separator'),\
+            mock.patch('functest.ci.run_tests.source_rc_file'), \
+            mock.patch('functest.ci.run_tests.generate_os_snapshot'), \
+            mock.patch('functest.ci.run_tests.cleanup'), \
+            mock.patch('functest.ci.run_tests.get_run_dict',
+                       return_value=test_run_dict), \
+                self.assertRaises(run_tests.BlockingTestFailed) as context:
+            run_tests.GlobalVariables.CLEAN_FLAG = True
+            run_tests.run_test(mock_test, 'tier_name')
+            msg = 'The test case test_name failed and is blocking'
+            self.assertTrue(msg in context)
+
     @mock.patch('functest.ci.run_tests.logger.info')
     def test_run_tier_default(self, mock_logger_info):
         with mock.patch('functest.ci.run_tests.print_separator'), \
@@ -151,21 +161,17 @@ class RunTestsTesting(unittest.TestCase):
 
     @mock.patch('functest.ci.run_tests.logger.info')
     def test_run_all_default(self, mock_logger_info):
-        with mock.patch('functest.ci.run_tests.run_tier') as mock_method, \
-            mock.patch('functest.ci.run_tests.generate_report.init'), \
-                mock.patch('functest.ci.run_tests.generate_report.main'):
-            CONST.CI_LOOP = 'test_ci_loop'
+        with mock.patch('functest.ci.run_tests.run_tier') as mock_method:
+            CONST.__setattr__('CI_LOOP', 'test_ci_loop')
             run_tests.run_all(self.tiers)
             mock_method.assert_any_call(self.tier)
             self.assertTrue(mock_logger_info.called)
 
     @mock.patch('functest.ci.run_tests.logger.info')
-    def test_run_all__missing_tier(self, mock_logger_info):
-        with mock.patch('functest.ci.run_tests.generate_report.init'), \
-                mock.patch('functest.ci.run_tests.generate_report.main'):
-            CONST.CI_LOOP = 'loop_re_not_available'
-            run_tests.run_all(self.tiers)
-            self.assertTrue(mock_logger_info.called)
+    def test_run_all_missing_tier(self, mock_logger_info):
+        CONST.__setattr__('CI_LOOP', 'loop_re_not_available')
+        run_tests.run_all(self.tiers)
+        self.assertTrue(mock_logger_info.called)
 
     def test_main_failed(self):
         kwargs = {'test': 'test_name', 'noclean': True, 'report': True}
@@ -187,6 +193,59 @@ class RunTestsTesting(unittest.TestCase):
             self.assertEqual(run_tests.main(**kwargs),
                              run_tests.Result.EX_ERROR)
 
+    def test_main_default(self):
+        kwargs = {'test': 'test_name', 'noclean': True, 'report': True}
+        mock_obj = mock.Mock()
+        args = {'get_tier.return_value': True,
+                'get_test.return_value': False}
+        mock_obj.configure_mock(**args)
+        with mock.patch('functest.ci.run_tests.tb.TierBuilder',
+                        return_value=mock_obj), \
+            mock.patch('functest.ci.run_tests.source_rc_file'), \
+                mock.patch('functest.ci.run_tests.run_tier') as m:
+            self.assertEqual(run_tests.main(**kwargs),
+                             run_tests.Result.EX_OK)
+            self.assertTrue(m.called)
+
+        mock_obj = mock.Mock()
+        args = {'get_tier.return_value': False,
+                'get_test.return_value': True}
+        mock_obj.configure_mock(**args)
+        with mock.patch('functest.ci.run_tests.tb.TierBuilder',
+                        return_value=mock_obj), \
+            mock.patch('functest.ci.run_tests.source_rc_file'), \
+                mock.patch('functest.ci.run_tests.run_test') as m:
+            self.assertEqual(run_tests.main(**kwargs),
+                             run_tests.Result.EX_OK)
+            self.assertTrue(m.called)
+
+        kwargs = {'test': 'all', 'noclean': True, 'report': True}
+        mock_obj = mock.Mock()
+        args = {'get_tier.return_value': False,
+                'get_test.return_value': False}
+        mock_obj.configure_mock(**args)
+        with mock.patch('functest.ci.run_tests.tb.TierBuilder',
+                        return_value=mock_obj), \
+            mock.patch('functest.ci.run_tests.source_rc_file'), \
+                mock.patch('functest.ci.run_tests.run_all') as m:
+            self.assertEqual(run_tests.main(**kwargs),
+                             run_tests.Result.EX_OK)
+            self.assertTrue(m.called)
+
+        kwargs = {'test': 'any', 'noclean': True, 'report': True}
+        mock_obj = mock.Mock()
+        args = {'get_tier.return_value': False,
+                'get_test.return_value': False}
+        mock_obj.configure_mock(**args)
+        with mock.patch('functest.ci.run_tests.tb.TierBuilder',
+                        return_value=mock_obj), \
+            mock.patch('functest.ci.run_tests.source_rc_file'), \
+                mock.patch('functest.ci.run_tests.logger.debug') as m:
+            self.assertEqual(run_tests.main(**kwargs),
+                             run_tests.Result.EX_ERROR)
+            self.assertTrue(m.called)
+
 
 if __name__ == "__main__":
+    logging.disable(logging.CRITICAL)
     unittest.main(verbosity=2)