Merge "Remove all references to /home/opnfv/repos/functest"
[functest.git] / functest / tests / unit / odl / test_odl.py
index 54d6da7..60adf21 100644 (file)
 import errno
 import logging
 import os
-import StringIO
 import unittest
 
 from keystoneauth1.exceptions import auth_plugins
 import mock
 from robot.errors import DataError, RobotError
-from robot.result import testcase as result_testcase
+from robot.result import model
 from robot.utils.robottime import timestamp_to_secs
+import six
 
 from functest.core import testcase
 from functest.opnfv_tests.sdn.odl import odl
@@ -32,8 +32,6 @@ class ODLVisitorTesting(unittest.TestCase):
     """The class testing ODLResultVisitor."""
     # pylint: disable=missing-docstring
 
-    logging.disable(logging.CRITICAL)
-
     def setUp(self):
         self.visitor = odl.ODLResultVisitor()
 
@@ -49,11 +47,9 @@ class ODLVisitorTesting(unittest.TestCase):
                 'elapsedtime': 1000,
                 'text': 'Hello, World!',
                 'critical': True}
-        test = result_testcase.TestCase(name=data['name'],
-                                        status=data['status'],
-                                        message=data['text'],
-                                        starttime=data['starttime'],
-                                        endtime=data['endtime'])
+        test = model.TestCase(
+            name=data['name'], status=data['status'], message=data['text'],
+            starttime=data['starttime'], endtime=data['endtime'])
         test.parent = mock.Mock()
         config = {'name': data['parent'],
                   'criticality.test_is_critical.return_value': data[
@@ -109,6 +105,9 @@ class ODLParseResultTesting(ODLTesting):
     """The class testing ODLTests.parse_results()."""
     # pylint: disable=missing-docstring
 
+    _config = {'name': 'dummy', 'starttime': '20161216 16:00:00.000',
+               'endtime': '20161216 16:00:01.000'}
+
     @mock.patch('robot.api.ExecutionResult', side_effect=DataError)
     def test_raises_exc(self, mock_method):
         with self.assertRaises(DataError):
@@ -116,15 +115,13 @@ class ODLParseResultTesting(ODLTesting):
         mock_method.assert_called_once_with(
             os.path.join(odl.ODLTests.res_dir, 'output.xml'))
 
-    def test_ok(self):
-        config = {'name': 'dummy', 'starttime': '20161216 16:00:00.000',
-                  'endtime': '20161216 16:00:01.000', 'status': 'PASS'}
+    def _test_result(self, config, result):
         suite = mock.Mock()
         suite.configure_mock(**config)
         with mock.patch('robot.api.ExecutionResult',
                         return_value=mock.Mock(suite=suite)):
             self.test.parse_results()
-            self.assertEqual(self.test.result, config['status'])
+            self.assertEqual(self.test.result, result)
             self.assertEqual(self.test.start_time,
                              timestamp_to_secs(config['starttime']))
             self.assertEqual(self.test.stop_time,
@@ -132,6 +129,26 @@ class ODLParseResultTesting(ODLTesting):
             self.assertEqual(self.test.details,
                              {'description': config['name'], 'tests': []})
 
+    def test_null_passed(self):
+        self._config.update({'statistics.critical.passed': 0,
+                             'statistics.critical.total': 20})
+        self._test_result(self._config, 0)
+
+    def test_no_test(self):
+        self._config.update({'statistics.critical.passed': 20,
+                             'statistics.critical.total': 0})
+        self._test_result(self._config, 0)
+
+    def test_half_success(self):
+        self._config.update({'statistics.critical.passed': 10,
+                             'statistics.critical.total': 20})
+        self._test_result(self._config, 50)
+
+    def test_success(self):
+        self._config.update({'statistics.critical.passed': 20,
+                             'statistics.critical.total': 20})
+        self._test_result(self._config, 100)
+
 
 class ODLRobotTesting(ODLTesting):
 
@@ -152,7 +169,7 @@ class ODLRobotTesting(ODLTesting):
             os.path.join(odl.ODLTests.odl_test_repo,
                          'csit/variables/Variables.py'), inplace=True)
 
-    @mock.patch('sys.stdout', new_callable=StringIO.StringIO)
+    @mock.patch('sys.stdout', new_callable=six.StringIO)
     def _test_set_vars(self, msg1, msg2, *args):
         line = mock.MagicMock()
         line.__iter__.return_value = [msg1]
@@ -170,7 +187,7 @@ class ODLRobotTesting(ODLTesting):
     def test_set_vars_auth1(self):
         self._test_set_vars("AUTH1 = []", "AUTH1 = []")
 
-    @mock.patch('sys.stdout', new_callable=StringIO.StringIO)
+    @mock.patch('sys.stdout', new_callable=six.StringIO)
     def test_set_vars_auth_foo(self, *args):
         line = mock.MagicMock()
         line.__iter__.return_value = ["AUTH = []"]
@@ -293,8 +310,6 @@ class ODLMainTesting(ODLTesting):
     def test_run_ko(self, *args):
         with mock.patch.object(self.test, 'set_robotframework_vars',
                                return_value=True), \
-                mock.patch.object(odl, 'open', mock.mock_open(),
-                                  create=True), \
                 self.assertRaises(RobotError):
             self._test_main(testcase.TestCase.EX_RUN_ERROR, *args)
 
@@ -303,63 +318,31 @@ class ODLMainTesting(ODLTesting):
     def test_parse_results_ko(self, *args):
         with mock.patch.object(self.test, 'set_robotframework_vars',
                                return_value=True), \
-                mock.patch.object(odl, 'open', mock.mock_open(),
-                                  create=True), \
                 mock.patch.object(self.test, 'parse_results',
                                   side_effect=RobotError):
             self._test_main(testcase.TestCase.EX_RUN_ERROR, *args)
 
-    @mock.patch('os.remove', side_effect=Exception)
-    @mock.patch('robot.run')
-    @mock.patch('os.makedirs')
-    def test_remove_exc(self, *args):
-        with mock.patch.object(self.test, 'set_robotframework_vars',
-                               return_value=True), \
-                mock.patch.object(self.test, 'parse_results'), \
-                self.assertRaises(Exception):
-            self._test_main(testcase.TestCase.EX_OK, *args)
-
-    @mock.patch('os.remove')
     @mock.patch('robot.run')
     @mock.patch('os.makedirs')
     def test_ok(self, *args):
         with mock.patch.object(self.test, 'set_robotframework_vars',
                                return_value=True), \
-                mock.patch.object(odl, 'open', mock.mock_open(),
-                                  create=True), \
                 mock.patch.object(self.test, 'parse_results'):
             self._test_main(testcase.TestCase.EX_OK, *args)
 
-    @mock.patch('os.remove')
     @mock.patch('robot.run')
     @mock.patch('os.makedirs', side_effect=OSError(errno.EEXIST, ''))
     def test_makedirs_oserror17(self, *args):
         with mock.patch.object(self.test, 'set_robotframework_vars',
                                return_value=True), \
-                mock.patch.object(odl, 'open', mock.mock_open(),
-                                  create=True), \
                 mock.patch.object(self.test, 'parse_results'):
             self._test_main(testcase.TestCase.EX_OK, *args)
 
-    @mock.patch('os.remove')
     @mock.patch('robot.run', return_value=1)
     @mock.patch('os.makedirs')
     def test_testcases_in_failure(self, *args):
         with mock.patch.object(self.test, 'set_robotframework_vars',
                                return_value=True), \
-                mock.patch.object(odl, 'open', mock.mock_open(),
-                                  create=True), \
-                mock.patch.object(self.test, 'parse_results'):
-            self._test_main(testcase.TestCase.EX_OK, *args)
-
-    @mock.patch('os.remove', side_effect=OSError)
-    @mock.patch('robot.run')
-    @mock.patch('os.makedirs')
-    def test_remove_oserror(self, *args):
-        with mock.patch.object(self.test, 'set_robotframework_vars',
-                               return_value=True), \
-                mock.patch.object(odl, 'open', mock.mock_open(),
-                                  create=True), \
                 mock.patch.object(self.test, 'parse_results'):
             self._test_main(testcase.TestCase.EX_OK, *args)
 
@@ -552,7 +535,7 @@ class ODLArgParserTesting(ODLTesting):
                  "--odlip={}".format(self._sdn_controller_ip)]),
             self.defaultargs)
 
-    @mock.patch('sys.stderr', new_callable=StringIO.StringIO)
+    @mock.patch('sys.stderr', new_callable=six.StringIO)
     def test_fail(self, mock_method):
         self.defaultargs['foo'] = 'bar'
         with self.assertRaises(SystemExit):
@@ -611,4 +594,5 @@ class ODLArgParserTesting(ODLTesting):
 
 
 if __name__ == "__main__":
+    logging.disable(logging.CRITICAL)
     unittest.main(verbosity=2)