Unit tests for vnf/ims. 25/29125/9
authorashishk1994 <ashishk.iiit@gmail.com>
Tue, 21 Feb 2017 08:14:12 +0000 (13:44 +0530)
committerashishk1994 <ashishk.iiit@gmail.com>
Wed, 22 Feb 2017 08:03:06 +0000 (13:33 +0530)
Change-Id: I12b17ee7ed03987473825e0705074f0430b820bb
Signed-off-by: ashishk1994 <ashishk.iiit@gmail.com>
functest/tests/unit/opnfv_tests/vnf/__init__.py [new file with mode: 0644]
functest/tests/unit/opnfv_tests/vnf/ims/__init__.py [new file with mode: 0644]
functest/tests/unit/opnfv_tests/vnf/ims/test_clearwater.py [new file with mode: 0644]
functest/tests/unit/opnfv_tests/vnf/ims/test_cloudify_ims.py [new file with mode: 0644]
functest/tests/unit/opnfv_tests/vnf/ims/test_orchestrator_cloudify.py [new file with mode: 0644]
run_unit_tests.sh
test-requirements.txt

diff --git a/functest/tests/unit/opnfv_tests/vnf/__init__.py b/functest/tests/unit/opnfv_tests/vnf/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/functest/tests/unit/opnfv_tests/vnf/ims/__init__.py b/functest/tests/unit/opnfv_tests/vnf/ims/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/functest/tests/unit/opnfv_tests/vnf/ims/test_clearwater.py b/functest/tests/unit/opnfv_tests/vnf/ims/test_clearwater.py
new file mode 100644 (file)
index 0000000..527f12e
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/env python
+
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+import logging
+import unittest
+
+import mock
+
+from functest.opnfv_tests.vnf.ims import clearwater
+from functest.opnfv_tests.vnf.ims import orchestrator_cloudify
+
+
+class ClearwaterTesting(unittest.TestCase):
+
+    logging.disable(logging.CRITICAL)
+
+    def setUp(self):
+        self.clearwater = clearwater.Clearwater()
+        self.orchestrator = orchestrator_cloudify.Orchestrator('test_dir')
+        self.clearwater.orchestrator = self.orchestrator
+        self.clearwater.dep_name = 'test_dep_name'
+        self.bp = {'file_name': 'test_file',
+                   'destination_folder': 'test_folder',
+                   'url': 'test_url',
+                   'branch': 'test_branch'}
+
+    def test_deploy_vnf_blueprint_download_failed(self):
+        with mock.patch.object(self.clearwater.orchestrator,
+                               'download_upload_and_deploy_blueprint',
+                               return_value='error'):
+            self.assertEqual(self.clearwater.deploy_vnf(self.bp),
+                             'error')
+
+    def test_deploy_vnf_blueprint_download_passed(self):
+        with mock.patch.object(self.clearwater.orchestrator,
+                               'download_upload_and_deploy_blueprint',
+                               return_value=''):
+            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)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
diff --git a/functest/tests/unit/opnfv_tests/vnf/ims/test_cloudify_ims.py b/functest/tests/unit/opnfv_tests/vnf/ims/test_cloudify_ims.py
new file mode 100644 (file)
index 0000000..e25816f
--- /dev/null
@@ -0,0 +1,542 @@
+#!/usr/bin/env python
+
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+import logging
+import unittest
+
+import mock
+
+from functest.opnfv_tests.vnf.ims import cloudify_ims
+
+
+class ImsVnfTesting(unittest.TestCase):
+
+    logging.disable(logging.CRITICAL)
+
+    def setUp(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os.makedirs'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'get_config', return_value='config_value'):
+            self.ims_vnf = cloudify_ims.ImsVnf()
+        self.neutron_client = mock.Mock()
+        self.glance_client = mock.Mock()
+        self.keystone_client = mock.Mock()
+        self.nova_client = mock.Mock()
+        self.orchestrator = {'requirements': {'ram_min': 2,
+                                              'os_image': 'test_os_image'},
+                             'blueprint': {'url': 'test_url',
+                                           'branch': 'test_branch'},
+                             'inputs': {'public_domain': 'test_domain'},
+                             'object': 'test_object',
+                             'deployment_name': 'test_deployment_name'}
+        self.ims_vnf.orchestrator = self.orchestrator
+        self.ims_vnf.images = {'test_image': 'test_url'}
+        self.ims_vnf.vnf = self.orchestrator
+        self.ims_vnf.tenant_name = 'test_tenant'
+        self.ims_vnf.inputs = {'public_domain': 'test_domain'}
+        self.ims_vnf.glance_client = self.glance_client
+        self.ims_vnf.neutron_client = self.neutron_client
+        self.ims_vnf.keystone_client = self.keystone_client
+        self.ims_vnf.nova_client = self.nova_client
+        self.ims_vnf.admin_creds = 'test_creds'
+
+        self.mock_post = mock.Mock()
+        attrs = {'status_code': 201,
+                 'cookies': ""}
+        self.mock_post.configure_mock(**attrs)
+
+        self.mock_post_200 = mock.Mock()
+        attrs = {'status_code': 200,
+                 'cookies': ""}
+        self.mock_post_200.configure_mock(**attrs)
+
+    def test_deploy_orchestrator_missing_image(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os_utils.get_neutron_client',
+                        return_value=self.neutron_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_glance_client',
+                       return_value=self.glance_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_keystone_client',
+                       return_value=self.keystone_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_nova_client',
+                       return_value=self.nova_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value=''), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'download_and_add_image_on_glance') as m, \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_orchestrator()
+            self.assertTrue(m.called)
+            msg = "Failed to find or upload required OS "
+            msg += "image for this deployment"
+            self.assertTrue(msg in context.exception)
+
+    def test_deploy_orchestrator_extend_quota_fail(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os_utils.get_neutron_client',
+                        return_value=self.neutron_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_glance_client',
+                       return_value=self.glance_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_keystone_client',
+                       return_value=self.keystone_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_nova_client',
+                       return_value=self.nova_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value='image_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_tenant_id',
+                       return_value='tenant_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.update_sg_quota',
+                       return_value=False), \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_orchestrator()
+            msg = "Failed to update security group quota"
+            msg += " for tenant test_tenant"
+            self.assertTrue(msg in context.exception)
+
+    def _get_image_id(self, client, name):
+        if name == 'test_image':
+            return 'image_id'
+        else:
+            return ''
+
+    def test_deploy_orchestrator_missing_flavor(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os_utils.get_neutron_client',
+                        return_value=self.neutron_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_glance_client',
+                       return_value=self.glance_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_keystone_client',
+                       return_value=self.keystone_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_nova_client',
+                       return_value=self.nova_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       side_effect=self._get_image_id), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_tenant_id',
+                       return_value='tenant_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.update_sg_quota',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_endpoint',
+                       return_value='public_auth_url'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'Orchestrator', return_value=mock.Mock()) as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(False, '')), \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_orchestrator()
+            self.assertTrue(m.set_credentials.called)
+            msg = "Failed to find required flavorfor this deployment"
+            self.assertTrue(msg in context.exception)
+
+    def test_deploy_orchestrator_missing_os_image(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os_utils.get_neutron_client',
+                        return_value=self.neutron_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_glance_client',
+                       return_value=self.glance_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_keystone_client',
+                       return_value=self.keystone_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_nova_client',
+                       return_value=self.nova_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       side_effect=self._get_image_id), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_tenant_id',
+                       return_value='tenant_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.update_sg_quota',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_endpoint',
+                       return_value='public_auth_url'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'Orchestrator', return_value=mock.Mock()) as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'flavor_id')), \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_orchestrator()
+            self.assertTrue(m.set_credentials.called)
+            self.assertTrue(m.set_flavor_id.called)
+            msg = "Failed to find required OS image for cloudify manager"
+            self.assertTrue(msg in context.exception)
+
+    def test_deploy_orchestrator_get_ext_network_fail(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os_utils.get_neutron_client',
+                        return_value=self.neutron_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_glance_client',
+                       return_value=self.glance_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_keystone_client',
+                       return_value=self.keystone_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_nova_client',
+                       return_value=self.nova_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value='image_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_tenant_id',
+                       return_value='tenant_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.update_sg_quota',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_endpoint',
+                       return_value='public_auth_url'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'Orchestrator', return_value=mock.Mock()) as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'flavor_id')), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_external_net',
+                       return_value=''), \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_orchestrator()
+            self.assertTrue(m.set_credentials.called)
+            self.assertTrue(m.set_flavor_id.called)
+            self.assertTrue(m.set_image_id.called)
+            msg = "Failed to get external network"
+            self.assertTrue(msg in context.exception)
+
+    def test_deploy_orchestrator_with_error(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os_utils.get_neutron_client',
+                        return_value=self.neutron_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_glance_client',
+                       return_value=self.glance_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_keystone_client',
+                       return_value=self.keystone_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_nova_client',
+                       return_value=self.nova_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value='image_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_tenant_id',
+                       return_value='tenant_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.update_sg_quota',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_endpoint',
+                       return_value='public_auth_url'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'Orchestrator') as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'flavor_id')), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_external_net',
+                       return_value='ext_net'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'ft_utils.get_resolvconf_ns',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'ft_utils.execute_command'):
+            mock_obj = mock.Mock()
+            attrs = {'deploy_manager.return_value': 'error'}
+            mock_obj.configure_mock(**attrs)
+
+            m.return_value = mock_obj
+
+            self.assertEqual(self.ims_vnf.deploy_orchestrator(),
+                             {'status': 'FAIL', 'result': 'error'})
+
+    def test_deploy_orchestrator_default(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os_utils.get_neutron_client',
+                        return_value=self.neutron_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_glance_client',
+                       return_value=self.glance_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_keystone_client',
+                       return_value=self.keystone_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_nova_client',
+                       return_value=self.nova_client), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value='image_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_tenant_id',
+                       return_value='tenant_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.update_sg_quota',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_endpoint',
+                       return_value='public_auth_url'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'Orchestrator') as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'flavor_id')), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_external_net',
+                       return_value='ext_net'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'ft_utils.get_resolvconf_ns',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'ft_utils.execute_command'):
+            mock_obj = mock.Mock()
+            attrs = {'deploy_manager.return_value': ''}
+            mock_obj.configure_mock(**attrs)
+
+            m.return_value = mock_obj
+
+            self.assertEqual(self.ims_vnf.deploy_orchestrator(),
+                             {'status': 'PASS', 'result': ''})
+
+    def test_deploy_vnf_missing_flavor(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'Clearwater', return_value=mock.Mock()), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(False, '')), \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_vnf()
+            msg = "Failed to find required flavor for this deployment"
+            self.assertTrue(msg in context.exception)
+
+    def test_deploy_vnf_missing_os_image(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'Clearwater', return_value=mock.Mock()) as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'test_flavor')), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value=''), \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_vnf()
+            msg = "Failed to find required OS image"
+            msg += " for clearwater VMs"
+            self.assertTrue(msg in context.exception)
+            self.assertTrue(m.set_flavor_id.called)
+
+    def test_deploy_vnf_missing_get_ext_net(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'Clearwater', return_value=mock.Mock()) as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'test_flavor')), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value='image_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_external_net',
+                       return_value=''), \
+                self.assertRaises(Exception) as context:
+            self.ims_vnf.deploy_vnf()
+            msg = "Failed to get external network"
+            self.assertTrue(msg in context.exception)
+            self.assertTrue(m.set_flavor_id.called)
+            self.assertTrue(m.set_image_id.called)
+
+    def test_deploy_vnf_with_error(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'Clearwater') as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'test_flavor')), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value='image_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_external_net',
+                       return_value='ext_net'):
+            mock_obj = mock.Mock()
+            attrs = {'deploy_vnf.return_value': 'error'}
+            mock_obj.configure_mock(**attrs)
+
+            m.return_value = mock_obj
+
+            self.assertEqual(self.ims_vnf.deploy_vnf(),
+                             {'status': 'FAIL', 'result': 'error'})
+
+    def test_deploy_vnf_default(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'Clearwater') as m, \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_or_create_flavor',
+                       return_value=(True, 'test_flavor')), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_image_id',
+                       return_value='image_id'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.get_external_net',
+                       return_value='ext_net'):
+            mock_obj = mock.Mock()
+            attrs = {'deploy_vnf.return_value': ''}
+            mock_obj.configure_mock(**attrs)
+
+            m.return_value = mock_obj
+
+            self.assertEqual(self.ims_vnf.deploy_vnf(),
+                             {'status': 'PASS', 'result': ''})
+
+    def test_test_vnf_ip_retrieval_failure(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os.popen', side_effect=Exception), \
+                self.assertRaises(Exception) as context:
+            msg = "Unable to retrieve the IP of the "
+            msg += "cloudify manager server !"
+            self.ims_vnf.test_vnf()
+            self.assertTrue(msg in context.exception)
+
+    def test_test_vnf_create_number_failure(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os.popen') as m, \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'requests.get'), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'requests.post',
+                           return_value=self.mock_post), \
+                self.assertRaises(Exception) as context:
+            mock_obj = mock.Mock()
+            attrs = {'read.return_value': 'test_ip\n'}
+            mock_obj.configure_mock(**attrs)
+            m.return_value = mock_obj
+
+            self.ims_vnf.test_vnf()
+
+            msg = "Unable to create a number:"
+            self.assertTrue(msg in context.exception)
+
+    def _get_post_status(self, url, cookies='', data=''):
+        ellis_url = "http://test_ellis_ip/session"
+        if url == ellis_url:
+            return self.mock_post_200
+        return self.mock_post
+
+    def test_test_vnf_fail(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os.popen') as m, \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'requests.get') as mock_get, \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'requests.post',
+                           side_effect=self._get_post_status), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'ft_utils.get_resolvconf_ns'), \
+                mock.patch('__builtin__.open', mock.mock_open()), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'subprocess.call'), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'os.remove'), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'json.load', return_value=''):
+            mock_obj = mock.Mock()
+            attrs = {'read.return_value': 'test_ip\n'}
+            mock_obj.configure_mock(**attrs)
+            m.return_value = mock_obj
+
+            mock_obj2 = mock.Mock()
+            attrs = {'json.return_value': {'outputs':
+                                           {'dns_ip': 'test_dns_ip',
+                                            'ellis_ip': 'test_ellis_ip'}}}
+            mock_obj2.configure_mock(**attrs)
+            mock_get.return_value = mock_obj2
+
+            self.assertEqual(self.ims_vnf.test_vnf(),
+                             {'status': 'FAIL', 'result': ''})
+
+    def test_test_vnf_pass(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os.popen') as m, \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'requests.get') as mock_get, \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'requests.post',
+                           side_effect=self._get_post_status), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'ft_utils.get_resolvconf_ns'), \
+                mock.patch('__builtin__.open', mock.mock_open()), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'subprocess.call'), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'os.remove'), \
+                mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                           'json.load', return_value='vims_test_result'):
+            mock_obj = mock.Mock()
+            attrs = {'read.return_value': 'test_ip\n'}
+            mock_obj.configure_mock(**attrs)
+            m.return_value = mock_obj
+
+            mock_obj2 = mock.Mock()
+            attrs = {'json.return_value': {'outputs':
+                                           {'dns_ip': 'test_dns_ip',
+                                            'ellis_ip': 'test_ellis_ip'}}}
+            mock_obj2.configure_mock(**attrs)
+            mock_get.return_value = mock_obj2
+
+            self.assertEqual(self.ims_vnf.test_vnf(),
+                             {'status': 'PASS', 'result': 'vims_test_result'})
+
+    def test_download_and_add_image_on_glance_incorrect_url(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os.makedirs'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'ft_utils.download_url',
+                       return_value=False):
+            resp = cloudify_ims.download_and_add_image_on_glance(self.
+                                                                 glance_client,
+                                                                 'image_name',
+                                                                 'http://url',
+                                                                 'data_dir')
+            self.assertEqual(resp, False)
+
+    def test_download_and_add_image_on_glance_image_creation_failure(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                        'os.makedirs'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'ft_utils.download_url',
+                       return_value=True), \
+            mock.patch('functest.opnfv_tests.vnf.ims.cloudify_ims.'
+                       'os_utils.create_glance_image',
+                       return_value=''):
+            resp = cloudify_ims.download_and_add_image_on_glance(self.
+                                                                 glance_client,
+                                                                 'image_name',
+                                                                 'http://url',
+                                                                 'data_dir')
+            self.assertEqual(resp, False)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
diff --git a/functest/tests/unit/opnfv_tests/vnf/ims/test_orchestrator_cloudify.py b/functest/tests/unit/opnfv_tests/vnf/ims/test_orchestrator_cloudify.py
new file mode 100644 (file)
index 0000000..620b021
--- /dev/null
@@ -0,0 +1,122 @@
+#!/usr/bin/env python
+
+# All rights reserved. This program and the accompanying materials
+# are made available under the terms of the Apache License, Version 2.0
+# which accompanies this distribution, and is available at
+# http://www.apache.org/licenses/LICENSE-2.0
+
+import logging
+import unittest
+
+import mock
+
+from functest.opnfv_tests.vnf.ims import orchestrator_cloudify
+
+
+class ImsVnfTesting(unittest.TestCase):
+
+    logging.disable(logging.CRITICAL)
+
+    def setUp(self):
+        self.orchestrator = orchestrator_cloudify.Orchestrator('test_dir')
+        self.bp = {'file_name': 'test_file',
+                   'destination_folder': 'test_folder',
+                   'url': 'test_url',
+                   'branch': 'test_branch'}
+
+    def test_download_manager_blueprint_download_blueprint_failed(self):
+        self.orchestrator.manager_blueprint = False
+        with mock.patch.object(self.orchestrator, '_download_blueprints',
+                               return_value=False), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'exit') as mock_exit:
+            self.orchestrator.download_manager_blueprint('test_url',
+                                                         'test_branch')
+            mock_exit.assert_any_call(-1)
+
+    def test_download_manager_blueprint_download_blueprint_passed(self):
+        self.orchestrator.manager_blueprint = False
+        with mock.patch.object(self.orchestrator, '_download_blueprints',
+                               return_value=True):
+            self.orchestrator.download_manager_blueprint('test_url',
+                                                         'test_branch')
+            self.assertEqual(self.orchestrator.manager_blueprint,
+                             True)
+
+    def test_deploy_manager_failed(self):
+        self.orchestrator.manager_blueprint = True
+        with mock.patch('__builtin__.open', mock.mock_open()), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'os.remove'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'execute_command', return_value='error'):
+            self.assertEqual(self.orchestrator.deploy_manager(),
+                             'error')
+            self.assertEqual(self.orchestrator.manager_up,
+                             False)
+
+    def test_deploy_manager_passed(self):
+        self.orchestrator.manager_blueprint = True
+        with mock.patch('__builtin__.open', mock.mock_open()), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'os.remove'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'execute_command', return_value=''):
+            self.orchestrator.deploy_manager()
+            self.assertEqual(self.orchestrator.manager_up,
+                             True)
+
+    def test_undeploy_manager_passed(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                        'execute_command', return_value=''):
+            self.orchestrator.deploy_manager()
+            self.assertEqual(self.orchestrator.manager_up,
+                             False)
+
+    def test_dwnld_upload_and_depl_blueprint_dwnld_blueprint_failed(self):
+        with mock.patch.object(self.orchestrator, '_download_blueprints',
+                               return_value=False), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'exit', side_effect=Exception) as mock_exit, \
+                self.assertRaises(Exception):
+            self.orchestrator.download_upload_and_deploy_blueprint(self.bp,
+                                                                   'cfig',
+                                                                   'bpn',
+                                                                   'dpn')
+            mock_exit.assert_any_call(-1)
+
+    def test_dwnld_upload_and_depl_blueprint_failed(self):
+        with mock.patch.object(self.orchestrator, '_download_blueprints',
+                               return_value=True), \
+            mock.patch('__builtin__.open', mock.mock_open()), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'execute_command', return_value='error'):
+            r = self.orchestrator.download_upload_and_deploy_blueprint(self.bp,
+                                                                       'cfig',
+                                                                       'bpn',
+                                                                       'dpn')
+            self.assertEqual(r, 'error')
+
+    def test__download_blueprints_failed(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                        'shutil.rmtree'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'Repo.clone_from', side_effect=Exception):
+            self.assertEqual(self.orchestrator._download_blueprints('bp_url',
+                                                                    'branch',
+                                                                    'dest'),
+                             False)
+
+    def test__download_blueprints_passed(self):
+        with mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                        'shutil.rmtree'), \
+            mock.patch('functest.opnfv_tests.vnf.ims.orchestrator_cloudify.'
+                       'Repo.clone_from'):
+            self.assertEqual(self.orchestrator._download_blueprints('bp_url',
+                                                                    'branch',
+                                                                    'dest'),
+                             True)
+
+
+if __name__ == "__main__":
+    unittest.main(verbosity=2)
index d60a2d6..8e02880 100755 (executable)
@@ -42,6 +42,7 @@ nosetests --with-xunit \
          --cover-package=functest.cli \
          --cover-package=functest.core.testcase_base \
          --cover-package=functest.opnfv_tests.sdn.odl.odl \
+         --cover-package=functest.opnfv_tests.vnf.ims \
          --cover-package=functest.utils \
          --cover-package=functest.opnfv_tests.openstack.rally \
          --cover-xml \
index 96b2767..16466b8 100644 (file)
@@ -23,4 +23,5 @@ requests==2.8.0
 robotframework==2.9.1
 robotframework-requests==0.3.8
 robotframework-sshlibrary==2.1.1
+subprocess32==3.2.7
 virtualenv==15.1.0