More Unit Tests for tempest and IMS module
authorashishk1994 <ashishk.iiit@gmail.com>
Mon, 27 Mar 2017 06:56:20 +0000 (12:26 +0530)
committerashishk1994 <ashishk.iiit@gmail.com>
Wed, 29 Mar 2017 09:39:09 +0000 (15:09 +0530)
This patch adds more unit tests for
openstack/tempest/ and ims/ modules
with coverage >= 80%

Change-Id: I7c18cea791ac8dc3e890da98066179225283b068
Signed-off-by: ashishk1994 <ashishk.iiit@gmail.com>
functest/tests/unit/opnfv_tests/openstack/tempest/test_conf_utils.py
functest/tests/unit/opnfv_tests/openstack/tempest/test_tempest.py
functest/tests/unit/opnfv_tests/vnf/ims/test_clearwater.py
functest/tests/unit/opnfv_tests/vnf/ims/test_orchestrator_cloudify.py

index caf2192..8ca5cc5 100644 (file)
@@ -37,7 +37,6 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
             self.assertTrue(msg in context)
 
     def test_create_tempest_resources_missing_image(self):
-        CONST.tempest_use_custom_images = 'test_image'
         with mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
                         'os_utils.get_keystone_client',
                         return_value=mock.Mock()), \
@@ -54,13 +53,18 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
                        'os_utils.get_or_create_image',
                        return_value=(mock.Mock(), None)), \
                 self.assertRaises(Exception) as context:
+
+            CONST.tempest_use_custom_images = True
             conf_utils.create_tempest_resources()
             msg = 'Failed to create image'
             self.assertTrue(msg in context)
 
+            CONST.tempest_use_custom_images = False
+            conf_utils.create_tempest_resources(use_custom_images=True)
+            msg = 'Failed to create image'
+            self.assertTrue(msg in context)
+
     def test_create_tempest_resources_missing_flavor(self):
-        CONST.tempest_use_custom_images = 'test_image'
-        CONST.tempest_use_custom_flavors = 'test_flavour'
         with mock.patch('functest.opnfv_tests.openstack.tempest.conf_utils.'
                         'os_utils.get_keystone_client',
                         return_value=mock.Mock()), \
@@ -80,10 +84,18 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
                        'os_utils.get_or_create_flavor',
                        return_value=(mock.Mock(), None)), \
                 self.assertRaises(Exception) as context:
+            CONST.tempest_use_custom_images = True
+            CONST.tempest_use_custom_flavors = True
             conf_utils.create_tempest_resources()
             msg = 'Failed to create flavor'
             self.assertTrue(msg in context)
 
+            CONST.tempest_use_custom_images = True
+            CONST.tempest_use_custom_flavors = False
+            conf_utils.create_tempest_resources(use_custom_flavors=False)
+            msg = 'Failed to create flavor'
+            self.assertTrue(msg in context)
+
     def test_get_verifier_id_missing_verifier(self):
         CONST.tempest_deployment_name = 'test_deploy_name'
         with mock.patch('functest.opnfv_tests.openstack.tempest.'
@@ -153,6 +165,210 @@ class OSTempestConfUtilsTesting(unittest.TestCase):
             self.assertTrue(m1.called)
             self.assertTrue(m2.called)
 
+    def test_get_repo_tag_default(self):
+        mock_popen = mock.Mock()
+        attrs = {'stdout.readline.return_value': 'test_tag'}
+        mock_popen.configure_mock(**attrs)
+
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.subprocess.Popen',
+                        return_value=mock_popen):
+            self.assertEqual(conf_utils.get_repo_tag('test_repo'),
+                             'test_tag')
+
+    def test_backup_tempest_config_default(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.os.path.exists',
+                        return_value=False), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.os.makedirs') as m1, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.shutil.copyfile') as m2:
+            conf_utils.backup_tempest_config('test_conf_file')
+            self.assertTrue(m1.called)
+            self.assertTrue(m2.called)
+
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.os.path.exists',
+                        return_value=True), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.shutil.copyfile') as m2:
+            conf_utils.backup_tempest_config('test_conf_file')
+            self.assertTrue(m2.called)
+
+    def test_configure_tempest_default(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.configure_verifier',
+                        return_value='test_conf_file'), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.configure_tempest_update_params') as m1, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.configure_tempest_multisite_params') as m2:
+            conf_utils.configure_tempest('test_dep_dir',
+                                         MODE='feature_multisite')
+            self.assertTrue(m1.called)
+            self.assertTrue(m2.called)
+
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.configure_verifier',
+                        return_value='test_conf_file'), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.configure_tempest_update_params') as m1:
+            conf_utils.configure_tempest('test_dep_dir')
+            self.assertTrue(m1.called)
+            self.assertTrue(m2.called)
+
+    def test_configure_tempest_defcore_default(self):
+        img_flavor_dict = {'image_id': 'test_image_id',
+                           'flavor_id': 'test_flavor_id',
+                           'image_id_alt': 'test_image_alt_id',
+                           'flavor_id_alt': 'test_flavor_alt_id'}
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.configure_verifier',
+                        return_value='test_conf_file'), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.configure_tempest_update_params'), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'set') as mset, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'read') as mread, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'write') as mwrite, \
+            mock.patch('__builtin__.open', mock.mock_open()), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.shutil.copyfile'):
+            CONST.dir_functest_test = 'test_dir'
+            CONST.refstack_tempest_conf_path = 'test_path'
+            conf_utils.configure_tempest_defcore('test_dep_dir',
+                                                 img_flavor_dict)
+            mset.assert_any_call('compute', 'image_ref', 'test_image_id')
+            mset.assert_any_call('compute', 'image_ref_alt',
+                                 'test_image_alt_id')
+            mset.assert_any_call('compute', 'flavor_ref', 'test_flavor_id')
+            mset.assert_any_call('compute', 'flavor_ref_alt',
+                                 'test_flavor_alt_id')
+            self.assertTrue(mread.called)
+            self.assertTrue(mwrite.called)
+
+    def _test_missing_param(self, params, image_id, flavor_id):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.ConfigParser.RawConfigParser.'
+                        'set') as mset, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'read') as mread, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'write') as mwrite, \
+            mock.patch('__builtin__.open', mock.mock_open()), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.backup_tempest_config'):
+            CONST.dir_functest_test = 'test_dir'
+            CONST.OS_ENDPOINT_TYPE = None
+            conf_utils.\
+                configure_tempest_update_params('test_conf_file',
+                                                IMAGE_ID=image_id,
+                                                FLAVOR_ID=flavor_id)
+            mset.assert_any_call(params[0], params[1], params[2])
+            self.assertTrue(mread.called)
+            self.assertTrue(mwrite.called)
+
+    def test_configure_tempest_update_params_missing_image_id(self):
+            CONST.tempest_use_custom_images = True
+            self._test_missing_param(('compute', 'image_ref',
+                                      'test_image_id'), 'test_image_id',
+                                     None)
+
+    def test_configure_tempest_update_params_missing_image_id_alt(self):
+            CONST.tempest_use_custom_images = True
+            conf_utils.IMAGE_ID_ALT = 'test_image_id_alt'
+            self._test_missing_param(('compute', 'image_ref_alt',
+                                      'test_image_id_alt'), None, None)
+
+    def test_configure_tempest_update_params_missing_flavor_id(self):
+            CONST.tempest_use_custom_flavors = True
+            self._test_missing_param(('compute', 'flavor_ref',
+                                      'test_flavor_id'), None,
+                                     'test_flavor_id')
+
+    def test_configure_tempest_update_params_missing_flavor_id_alt(self):
+            CONST.tempest_use_custom_flavors = True
+            conf_utils.FLAVOR_ID_ALT = 'test_flavor_id_alt'
+            self._test_missing_param(('compute', 'flavor_ref_alt',
+                                      'test_flavor_id_alt'), None,
+                                     None)
+
+    def test_configure_verifier_missing_temp_conf_file(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.os.path.isfile',
+                        return_value=False), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ft_utils.execute_command') as mexe, \
+                self.assertRaises(Exception) as context:
+            conf_utils.configure_verifier('test_dep_dir')
+            mexe.assert_any_call("rally verify configure-verifier")
+            msg = ("Tempest configuration file 'test_dep_dir/tempest.conf'"
+                   " NOT found.")
+            self.assertTrue(msg in context)
+
+    def test_configure_verifier_default(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.os.path.isfile',
+                        return_value=True), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ft_utils.execute_command') as mexe:
+            self.assertEqual(conf_utils.configure_verifier('test_dep_dir'),
+                             'test_dep_dir/tempest.conf')
+            mexe.assert_any_call("rally verify configure-verifier "
+                                 "--reconfigure")
+
+    def test_configure_tempest_multisite_params_without_fuel(self):
+        conf_utils.CI_INSTALLER_TYPE = 'not_fuel'
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.os_utils.get_endpoint',
+                        return_value='kingbird_endpoint_url'), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'set') as mset, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'read') as mread, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'add_section') as msection, \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ConfigParser.RawConfigParser.'
+                       'write') as mwrite, \
+            mock.patch('__builtin__.open', mock.mock_open()), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.backup_tempest_config'):
+
+            conf_utils.configure_tempest_multisite_params('test_conf_file')
+            msection.assert_any_call("kingbird")
+            mset.assert_any_call('service_available', 'kingbird', 'true')
+            mset.assert_any_call('kingbird', 'endpoint_type', 'publicURL')
+            mset.assert_any_call('kingbird', 'TIME_TO_SYNC', '120')
+            mset.assert_any_call('kingbird', 'endpoint_url',
+                                 'kingbird_endpoint_url')
+            self.assertTrue(mread.called)
+            self.assertTrue(mwrite.called)
+
+    def test_install_verifier_ext_default(self):
+        with mock.patch('functest.opnfv_tests.openstack.tempest.'
+                        'conf_utils.get_repo_tag',
+                        return_value='test_tag'), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.'
+                       'conf_utils.ft_utils.'
+                       'execute_command_raise') as mexe:
+            conf_utils.install_verifier_ext('test_path')
+            cmd = ("rally verify add-verifier-ext --source test_path "
+                   "--version test_tag")
+            error_msg = ("Problem while adding verifier extension from"
+                         " test_path")
+            mexe.assert_called_once_with(cmd, error_msg=error_msg)
 
 if __name__ == "__main__":
     unittest.main(verbosity=2)
index 856cd14..95e5a71 100644 (file)
@@ -13,6 +13,7 @@ import mock
 from functest.core import testcase_base
 from functest.opnfv_tests.openstack.tempest import tempest
 from functest.opnfv_tests.openstack.tempest import conf_utils
+from functest.utils.constants import CONST
 
 
 class OSTempestTesting(unittest.TestCase):
@@ -33,6 +34,14 @@ class OSTempestTesting(unittest.TestCase):
                        'conf_utils.get_verifier_deployment_dir',
                        return_value='test_verifier_deploy_dir'):
             self.tempestcommon = tempest.TempestCommon()
+            self.tempestsmoke_serial = tempest.TempestSmokeSerial()
+            self.tempestsmoke_parallel = tempest.TempestSmokeParallel()
+            self.tempestfull_parallel = tempest.TempestFullParallel()
+            with mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+                            'conf_utils.install_verifier_ext'):
+                self.tempestmultisite = tempest.TempestMultisite()
+            self.tempestcustom = tempest.TempestCustom()
+            self.tempestdefcore = tempest.TempestDefcore()
 
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.logger.debug')
     def test_generate_test_list_defcore_mode(self, mock_logger_debug):
@@ -100,6 +109,48 @@ class OSTempestTesting(unittest.TestCase):
         with self.assertRaises(Exception):
             self.tempestcommon.parse_verifier_result()
 
+    def test_apply_tempest_blacklist_no_blacklist(self):
+        with mock.patch('__builtin__.open', mock.mock_open()) as m, \
+            mock.patch.object(self.tempestcommon, 'read_file',
+                              return_value=['test1', 'test2']):
+            conf_utils.TEMPEST_BLACKLIST = Exception
+            CONST.INSTALLER_TYPE = 'installer_type'
+            CONST.DEPLOY_SCENARIO = 'deploy_scenario'
+            self.tempestcommon.apply_tempest_blacklist()
+            obj = m()
+            obj.write.assert_any_call('test1\n')
+            obj.write.assert_any_call('test2\n')
+
+    def test_apply_tempest_blacklist_default(self):
+        item_dict = {'scenarios': ['deploy_scenario'],
+                     'installers': ['installer_type'],
+                     'tests': ['test2']}
+        with mock.patch('__builtin__.open', mock.mock_open()) as m, \
+            mock.patch.object(self.tempestcommon, 'read_file',
+                              return_value=['test1', 'test2']), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+                       'yaml.safe_load', return_value=item_dict):
+            CONST.INSTALLER_TYPE = 'installer_type'
+            CONST.DEPLOY_SCENARIO = 'deploy_scenario'
+            self.tempestcommon.apply_tempest_blacklist()
+            obj = m()
+            obj.write.assert_any_call('test1\n')
+            self.assertFalse(obj.write.assert_any_call('test2\n'))
+
+    @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.logger.info')
+    def test_run_verifier_tests_default(self, mock_logger_info):
+        with mock.patch('__builtin__.open', mock.mock_open()), \
+            mock.patch('__builtin__.iter', return_value=['\} tempest\.']), \
+            mock.patch('functest.opnfv_tests.openstack.tempest.tempest.'
+                       'subprocess.Popen'):
+            conf_utils.TEMPEST_LIST = 'test_tempest_list'
+            cmd_line = ("rally verify start  --load-list "
+                        "test_tempest_list --detailed")
+            self.tempestcommon.run_verifier_tests()
+            mock_logger_info. \
+                assert_any_call("Starting Tempest test suite: '%s'."
+                                % cmd_line)
+
     @mock.patch('functest.opnfv_tests.openstack.tempest.tempest.logger.info')
     def test_parse_verifier_result_default(self, mock_logger_info):
         self.tempestcommon.VERIFICATION_ID = 'test_uuid'
index 527f12e..18bebfd 100644 (file)
@@ -39,16 +39,48 @@ class ClearwaterTesting(unittest.TestCase):
         with mock.patch.object(self.clearwater.orchestrator,
                                'download_upload_and_deploy_blueprint',
                                return_value=''):
-            self.clearwater.deploy_vnf(self.bp),
+            self.clearwater.deploy_vnf(self.bp)
             self.assertEqual(self.clearwater.deploy, True)
 
     def test_undeploy_vnf_deployment_passed(self):
         with mock.patch.object(self.clearwater.orchestrator,
                                'undeploy_deployment'):
             self.clearwater.deploy = True
+            self.clearwater.undeploy_vnf()
+            self.assertEqual(self.clearwater.deploy, False)
+
+    def test_undeploy_vnf_deployment_with_undeploy(self):
+        with mock.patch.object(self.clearwater.orchestrator,
+                               'undeploy_deployment') as m:
+            self.clearwater.deploy = False
+            self.clearwater.undeploy_vnf(),
+            self.assertEqual(self.clearwater.deploy, False)
+            self.assertFalse(m.called)
+
+            self.clearwater.orchestrator = None
+            self.clearwater.deploy = True
+            self.clearwater.undeploy_vnf(),
+            self.assertEqual(self.clearwater.deploy, True)
+
+            self.clearwater.deploy = False
             self.clearwater.undeploy_vnf(),
             self.assertEqual(self.clearwater.deploy, False)
 
+    def test_set_methods(self):
+        self.clearwater.set_orchestrator(self.orchestrator)
+        self.assertTrue(self.clearwater.orchestrator, self.orchestrator)
+        self.clearwater.set_flavor_id('test_flavor_id')
+        self.assertTrue(self.clearwater.config['flavor_id'], 'test_flavor_id')
+        self.clearwater.set_image_id('test_image_id')
+        self.assertTrue(self.clearwater.config['image_id'], 'test_image_id')
+        self.clearwater.set_agent_user('test_user')
+        self.assertTrue(self.clearwater.config['agent_user'], 'test_user')
+        self.clearwater.set_external_network_name('test_network')
+        self.assertTrue(self.clearwater.config['external_network_name'],
+                        'test_network')
+        self.clearwater.set_public_domain('test_domain')
+        self.assertTrue(self.clearwater.config['public_domain'],
+                        'test_domain')
 
 if __name__ == "__main__":
     unittest.main(verbosity=2)
index 620b021..bf6d483 100644 (file)
@@ -6,6 +6,7 @@
 # http://www.apache.org/licenses/LICENSE-2.0
 
 import logging
+import subprocess32 as subprocess
 import unittest
 
 import mock
@@ -117,6 +118,60 @@ class ImsVnfTesting(unittest.TestCase):
                                                                     'dest'),
                              True)
 
+    def test_execute_command_failed(self):
+        with mock.patch('__builtin__.open',
+                        mock.mock_open(read_data='test_data\n')):
+            subprocess.call = mock.create_autospec(subprocess.call,
+                                                   return_value=0)
+            mock_log = mock.Mock()
+            cmd = 'test_cmd -e test_env bash_script'
+            ret = orchestrator_cloudify.execute_command(cmd, mock_log,
+                                                        timeout=100)
+            self.assertEqual(ret, False)
+
+    def test_execute_command_default(self):
+        with mock.patch('__builtin__.open',
+                        mock.mock_open(read_data='test_data\n')):
+            subprocess.call = mock. \
+                create_autospec(subprocess.call,
+                                return_value=subprocess.TimeoutExpired)
+            mock_log = mock.Mock()
+            cmd = 'test_cmd -e test_env bash_script'
+            ret = orchestrator_cloudify.execute_command(cmd, mock_log,
+                                                        timeout=100)
+            self.assertEqual(ret, ['test_data\n'])
+
+    def test_set_methods(self):
+        self.orchestrator.set_credentials('test_username', 'test_password',
+                                          'test_tenant_name', 'test_auth_url')
+        self.assertTrue(self.orchestrator.config['keystone_username'],
+                        'test_username')
+        self.assertTrue(self.orchestrator.config['keystone_password'],
+                        'test_password')
+        self.assertTrue(self.orchestrator.config['keystone_url'],
+                        'test_auth_url')
+        self.assertTrue(self.orchestrator.config['keystone_tenant_name'],
+                        'test_tenant_name')
+        self.orchestrator.set_flavor_id('test_flavor_id')
+        self.assertTrue(self.orchestrator.config['flavor_id'],
+                        'test_flavor_id')
+        self.orchestrator.set_image_id('test_image_id')
+        self.assertTrue(self.orchestrator.config['image_id'], 'test_image_id')
+        self.orchestrator.set_external_network_name('test_network')
+        self.assertTrue(self.orchestrator.config['external_network_name'],
+                        'test_network')
+        self.orchestrator.set_ssh_user('test_user')
+        self.assertTrue(self.orchestrator.config['ssh_user'],
+                        'test_user')
+        self.orchestrator.set_nova_url('test_nova_url')
+        self.assertTrue(self.orchestrator.config['nova_url'],
+                        'test_nova_url')
+        self.orchestrator.set_neutron_url('test_neutron_url')
+        self.assertTrue(self.orchestrator.config['neutron_url'],
+                        'test_neutron_url')
+        self.orchestrator.set_nameservers(['test_subnet'])
+        self.assertTrue(self.orchestrator.config['dns_subnet_1'],
+                        'test_subnet')
 
 if __name__ == "__main__":
     unittest.main(verbosity=2)