Merge "Bugfix: heat conext of test case yamls jinja2 bypass sriov type"
[yardstick.git] / yardstick / tests / unit / common / test_utils.py
index 31b10e6..6e7a0bf 100644 (file)
@@ -19,14 +19,14 @@ from six.moves import configparser
 import time
 import unittest
 
 import time
 import unittest
 
-import yardstick
 from yardstick import ssh
 from yardstick.common import constants
 from yardstick.common import utils
 from yardstick.common import exceptions
 from yardstick import ssh
 from yardstick.common import constants
 from yardstick.common import utils
 from yardstick.common import exceptions
+from yardstick.tests.unit import base as ut_base
 
 
 
 
-class IterSubclassesTestCase(unittest.TestCase):
+class IterSubclassesTestCase(ut_base.BaseUnitTestCase):
     # Disclaimer: this class is a modified copy from
     # rally/tests/unit/common/plugin/test_discover.py
     # Copyright 2015: Mirantis Inc.
     # Disclaimer: this class is a modified copy from
     # rally/tests/unit/common/plugin/test_discover.py
     # Copyright 2015: Mirantis Inc.
@@ -47,7 +47,7 @@ class IterSubclassesTestCase(unittest.TestCase):
         self.assertEqual([B, C, D], list(utils.itersubclasses(A)))
 
 
         self.assertEqual([B, C, D], list(utils.itersubclasses(A)))
 
 
-class ImportModulesFromPackageTestCase(unittest.TestCase):
+class ImportModulesFromPackageTestCase(ut_base.BaseUnitTestCase):
 
     @mock.patch('yardstick.common.utils.os.walk')
     def test_import_modules_from_package_no_mod(self, mock_walk):
 
     @mock.patch('yardstick.common.utils.os.walk')
     def test_import_modules_from_package_no_mod(self, mock_walk):
@@ -72,7 +72,7 @@ class ImportModulesFromPackageTestCase(unittest.TestCase):
         mock_import_module.assert_called_once_with('bar.baz')
 
 
         mock_import_module.assert_called_once_with('bar.baz')
 
 
-class GetParaFromYaml(unittest.TestCase):
+class GetParaFromYaml(ut_base.BaseUnitTestCase):
 
     @mock.patch('yardstick.common.utils.os.environ.get')
     def test_get_param_para_not_found(self, get_env):
 
     @mock.patch('yardstick.common.utils.os.environ.get')
     def test_get_param_para_not_found(self, get_env):
@@ -96,7 +96,7 @@ class GetParaFromYaml(unittest.TestCase):
         return file_path
 
 
         return file_path
 
 
-class CommonUtilTestCase(unittest.TestCase):
+class CommonUtilTestCase(ut_base.BaseUnitTestCase):
 
     def setUp(self):
         self.data = {
 
     def setUp(self):
         self.data = {
@@ -186,14 +186,14 @@ class CommonUtilTestCase(unittest.TestCase):
         self.assertEqual(mock_open.call_count, mock_open_call_count)
 
 
         self.assertEqual(mock_open.call_count, mock_open_call_count)
 
 
-class TestMacAddressToHex(unittest.TestCase):
+class TestMacAddressToHex(ut_base.BaseUnitTestCase):
 
     def test_mac_address_to_hex_list(self):
         self.assertEqual(utils.mac_address_to_hex_list("ea:3e:e1:9a:99:e8"),
                          ['0xea', '0x3e', '0xe1', '0x9a', '0x99', '0xe8'])
 
 
 
     def test_mac_address_to_hex_list(self):
         self.assertEqual(utils.mac_address_to_hex_list("ea:3e:e1:9a:99:e8"),
                          ['0xea', '0x3e', '0xe1', '0x9a', '0x99', '0xe8'])
 
 
-class TranslateToStrTestCase(unittest.TestCase):
+class TranslateToStrTestCase(ut_base.BaseUnitTestCase):
 
     def test_translate_to_str_unicode(self):
         input_str = u'hello'
 
     def test_translate_to_str_unicode(self):
         input_str = u'hello'
@@ -219,7 +219,7 @@ class TranslateToStrTestCase(unittest.TestCase):
         self.assertIs(input_value, result)
 
 
         self.assertIs(input_value, result)
 
 
-class TestParseCpuInfo(unittest.TestCase):
+class TestParseCpuInfo(ut_base.BaseUnitTestCase):
 
     def test_single_socket_no_hyperthread(self):
         cpuinfo = """\
 
     def test_single_socket_no_hyperthread(self):
         cpuinfo = """\
@@ -804,7 +804,7 @@ power management:
         self.assertEqual(sockets, [0, 1])
 
 
         self.assertEqual(sockets, [0, 1])
 
 
-class ChangeObjToDictTestCase(unittest.TestCase):
+class ChangeObjToDictTestCase(ut_base.BaseUnitTestCase):
 
     def test_change_obj_to_dict(self):
         class A(object):
 
     def test_change_obj_to_dict(self):
         class A(object):
@@ -817,7 +817,7 @@ class ChangeObjToDictTestCase(unittest.TestCase):
         self.assertEqual(obj_r, obj_s)
 
 
         self.assertEqual(obj_r, obj_s)
 
 
-class SetDictValueTestCase(unittest.TestCase):
+class SetDictValueTestCase(ut_base.BaseUnitTestCase):
 
     def test_set_dict_value(self):
         input_dic = {
 
     def test_set_dict_value(self):
         input_dic = {
@@ -827,7 +827,7 @@ class SetDictValueTestCase(unittest.TestCase):
         self.assertEqual(output_dic.get('welcome', {}).get('to'), 'yardstick')
 
 
         self.assertEqual(output_dic.get('welcome', {}).get('to'), 'yardstick')
 
 
-class RemoveFileTestCase(unittest.TestCase):
+class RemoveFileTestCase(ut_base.BaseUnitTestCase):
 
     def test_remove_file(self):
         try:
 
     def test_remove_file(self):
         try:
@@ -837,7 +837,83 @@ class RemoveFileTestCase(unittest.TestCase):
             self.assertTrue(isinstance(e, OSError))
 
 
             self.assertTrue(isinstance(e, OSError))
 
 
-class TestUtils(unittest.TestCase):
+class ParseIniFileTestCase(ut_base.BaseUnitTestCase):
+
+    def setUp(self):
+        self._mock_config_parser_type = mock.patch.object(configparser,
+                                                          'ConfigParser')
+        self.mock_config_parser_type = self._mock_config_parser_type.start()
+        self.addCleanup(self._stop_mocks)
+
+    def _stop_mocks(self):
+        self._mock_config_parser_type.stop()
+
+    def test_parse_ini_file(self):
+        defaults = {'default1': 'value1',
+                    'default2': 'value2'}
+        s1 = {'key1': 'value11',
+              'key2': 'value22'}
+        s2 = {'key1': 'value123',
+              'key2': 'value234'}
+
+        mock_config_parser = mock.Mock()
+        self.mock_config_parser_type.return_value = mock_config_parser
+        mock_config_parser.read.return_value = True
+        mock_config_parser.sections.return_value = ['s1', 's2']
+        mock_config_parser.items.side_effect = iter([
+            defaults.items(),
+            s1.items(),
+            s2.items(),
+        ])
+
+        expected = {'DEFAULT': defaults,
+                    's1': s1,
+                    's2': s2}
+        result = utils.parse_ini_file('my_path')
+        self.assertDictEqual(expected, result)
+
+    @mock.patch.object(utils, 'logger')
+    def test_parse_ini_file_missing_section_header(self, *args):
+        mock_config_parser = mock.Mock()
+        self.mock_config_parser_type.return_value = mock_config_parser
+        mock_config_parser.read.side_effect = (
+            configparser.MissingSectionHeaderError(
+                mock.Mock(), 321, mock.Mock()))
+
+        with self.assertRaises(configparser.MissingSectionHeaderError):
+            utils.parse_ini_file('my_path')
+
+    def test_parse_ini_file_no_file(self):
+        mock_config_parser = mock.Mock()
+        self.mock_config_parser_type.return_value = mock_config_parser
+        mock_config_parser.read.return_value = False
+        with self.assertRaises(RuntimeError):
+            utils.parse_ini_file('my_path')
+
+    def test_parse_ini_file_no_default_section_header(self):
+        s1 = {'key1': 'value11',
+              'key2': 'value22'}
+        s2 = {'key1': 'value123',
+              'key2': 'value234'}
+
+        mock_config_parser = mock.Mock()
+        self.mock_config_parser_type.return_value = mock_config_parser
+        mock_config_parser.read.return_value = True
+        mock_config_parser.sections.return_value = ['s1', 's2']
+        mock_config_parser.items.side_effect = iter([
+            configparser.NoSectionError(mock.Mock()),
+            s1.items(),
+            s2.items(),
+        ])
+
+        expected = {'DEFAULT': {},
+                    's1': s1,
+                    's2': s2}
+        result = utils.parse_ini_file('my_path')
+        self.assertDictEqual(expected, result)
+
+
+class TestUtils(ut_base.BaseUnitTestCase):
 
     @mock.patch('yardstick.common.utils.os.makedirs')
     def test_makedirs(self, *_):
 
     @mock.patch('yardstick.common.utils.os.makedirs')
     def test_makedirs(self, *_):
@@ -992,7 +1068,7 @@ class TestUtils(unittest.TestCase):
             utils.validate_non_string_sequence(1, raise_exc=RuntimeError)
 
 
             utils.validate_non_string_sequence(1, raise_exc=RuntimeError)
 
 
-class TestUtilsIpAddrMethods(unittest.TestCase):
+class TestUtilsIpAddrMethods(ut_base.BaseUnitTestCase):
 
     GOOD_IP_V4_ADDRESS_STR_LIST = [
         u'0.0.0.0',
 
     GOOD_IP_V4_ADDRESS_STR_LIST = [
         u'0.0.0.0',
@@ -1119,7 +1195,7 @@ class TestUtilsIpAddrMethods(unittest.TestCase):
             self.assertEqual(utils.ip_to_hex(value), value)
 
 
             self.assertEqual(utils.ip_to_hex(value), value)
 
 
-class SafeDecodeUtf8TestCase(unittest.TestCase):
+class SafeDecodeUtf8TestCase(ut_base.BaseUnitTestCase):
 
     @unittest.skipIf(six.PY2,
                      'This test should only be launched with Python 3.x')
 
     @unittest.skipIf(six.PY2,
                      'This test should only be launched with Python 3.x')
@@ -1130,7 +1206,7 @@ class SafeDecodeUtf8TestCase(unittest.TestCase):
         self.assertEqual('this is a byte array', out)
 
 
         self.assertEqual('this is a byte array', out)
 
 
-class ReadMeminfoTestCase(unittest.TestCase):
+class ReadMeminfoTestCase(ut_base.BaseUnitTestCase):
 
     MEMINFO = (b'MemTotal:       65860500 kB\n'
                b'MemFree:        28690900 kB\n'
 
     MEMINFO = (b'MemTotal:       65860500 kB\n'
                b'MemFree:        28690900 kB\n'
@@ -1156,7 +1232,7 @@ class ReadMeminfoTestCase(unittest.TestCase):
         self.assertEqual(self.MEMINFO_DICT, output)
 
 
         self.assertEqual(self.MEMINFO_DICT, output)
 
 
-class TimerTestCase(unittest.TestCase):
+class TimerTestCase(ut_base.BaseUnitTestCase):
 
     def test__getattr(self):
         with utils.Timer() as timer:
 
     def test__getattr(self):
         with utils.Timer() as timer:
@@ -1186,7 +1262,7 @@ class TimerTestCase(unittest.TestCase):
         self.assertEqual(2, len(iterations))
 
 
         self.assertEqual(2, len(iterations))
 
 
-class WaitUntilTrueTestCase(unittest.TestCase):
+class WaitUntilTrueTestCase(ut_base.BaseUnitTestCase):
 
     def test_no_timeout(self):
         self.assertIsNone(utils.wait_until_true(lambda: True,
 
     def test_no_timeout(self):
         self.assertIsNone(utils.wait_until_true(lambda: True,