+ self.assertRaises(vimconnNotFoundException,self.vim.delete_tenant,tenant_id)
+
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ @mock.patch.object(Org,'list_catalogs')
+ @mock.patch.object(vimconnector,'get_vcd_network')
+ @mock.patch.object(Org,'get_vdc')
+ @mock.patch.object(Org,'get_catalog_item')
+ @mock.patch.object(vimconnector,'connect')
+ @mock.patch.object(vimconnector,'perform_request')
+ @mock.patch.object(Client,'get_task_monitor')
+ @mock.patch.object(VDC,'get_vapp')
+ @mock.patch.object(vimconnector,'get_network_list')
+ @mock.patch.object(vimconnector,'power_on_vapp')
+ def test_new_vminstance(self, power_on, get_network_list, get_vapp,
+ get_task_monitor, perform_request, connect,
+ get_catalog_item, get_vdc, get_vcd_network,
+ list_catalogs, get_vdc_details):
+ """
+ Test case for new vm instance
+ """
+ image_id = '34925a30-0f4a-4018-9759-0d6799063b51'
+ vimconnector.flavorlist = {'123347db-536b-4936-8b62-1fcdc721865d': {'vcpus': 1,
+ 'disk': 10,
+ 'ram': 1024}}
+
+ flavor_id = '123347db-536b-4936-8b62-1fcdc721865d'
+ net_list = [{'use': 'bridge', 'name': 'eth0', 'floating_ip': False, 'vpci': '0000:00:11.0', 'port_security': True, 'type': 'virtual', 'net_id': '69c713cb-3eec-452c-9a32-0e95c8ffe567'}]
+
+ cat_list = [{'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org3', 'isPublished': 'false', 'ownerName': 'system', 'numberOfMedia': '0', 'creationDate': '2017-10-15T02:03:59.403-07:00', 'id': '34925a30-0f4a-4018-9759-0d6799063b51', 'name': 'Ubuntu_1nic'}]
+
+ network_dict = {'status': '1', 'isShared': 'false', 'IpScope': '', 'EndAddress': '192.169.241.150', 'name': 'testing_6n5mJwUyx-ad9d62fc-8223-4dbe-88c4-9f16458ebeec', 'Dns1': '192.169.241.102', 'IpRanges': '', 'Gateway': '192.169.241.253', 'Netmask': '255.255.255.0', 'RetainNetInfoAcrossDeployments': 'false', 'IpScopes': '', 'IsEnabled': 'true', 'DnsSuffix': 'corp.local', 'StartAddress': '192.169.241.115', 'IpRange': '', 'Configuration': '', 'FenceMode': 'bridged', 'IsInherited': 'true', 'uuid': '69c713cb-3eec-452c-9a32-0e95c8ffe567'}
+
+ network_list = [{'status': 'ACTIVE', 'name': 'default', 'admin_state_up': True, 'shared': False, 'tenant_id': '2584137f-6541-4c04-a2a2-e56bfca14c69', 'type': 'bridge', 'id': '1fd6421e-929a-4576-bc19-a0c48aea1969'}]
+
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+
+ catalog_list = lxmlElementTree.fromstring(xml_resp.catalog_list_xml)
+ # assumed return value from VIM connector
+ get_vdc_details.return_value = self.org, vdc
+ list_catalogs.return_value = cat_list
+ get_vcd_network.return_value = network_dict
+ get_vdc.return_value = vdc
+ get_catalog_item.return_value = catalog_list
+ self.vim.client = self.vim.connect()
+ perform_request.side_effect = [mock.Mock(status_code = 200,
+ content = xml_resp.catalogItem_xml),
+ mock.Mock(status_code = 200,
+ content = xml_resp.vapp_template_xml),
+ mock.Mock(status_code = 201,
+ content = xml_resp.deployed_vapp_xml)]
+
+ status_resp = xml_resp.status_task_xml
+ status = lxmlElementTree.fromstring(status_resp)
+ self.vim.connect.return_value.get_task_monitor.return_value.wait_for_success.return_value = status
+ vapp_resp = xml_resp.vapp_xml_response
+ vapp = lxmlElementTree.fromstring(vapp_resp)
+ get_vapp.return_value = vapp
+ get_network_list.return_value = network_list
+ power_on_resp = xml_resp.poweroff_task_xml
+ poweron = lxmlElementTree.fromstring(power_on_resp)
+ power_on.return_value = poweron
+
+ # call to VIM connector method
+ result = self.vim.new_vminstance(name='Test1_vm', image_id=image_id,
+ flavor_id=flavor_id,
+ net_list=net_list)
+ # assert verified expected and return result from VIM connector
+ self.assertIsNotNone(result)
+
+
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ @mock.patch.object(Org,'list_catalogs')
+ @mock.patch.object(vimconnector,'get_vcd_network')
+ @mock.patch.object(Org,'get_vdc')
+ @mock.patch.object(Org,'get_catalog_item')
+ @mock.patch.object(vimconnector,'connect')
+ @mock.patch.object(vimconnector,'perform_request')
+ @mock.patch.object(Client,'get_task_monitor')
+ @mock.patch.object(VDC,'get_vapp')
+ @mock.patch.object(vimconnector,'get_network_list')
+ @mock.patch.object(vimconnector,'power_on_vapp')
+ def test_new_vminstance_negative(self, power_on, get_network_list, get_vapp,
+ get_task_monitor, perform_request, connect,
+ get_catalog_item, get_vdc, get_vcd_network,
+ list_catalogs, get_vdc_details):
+ """
+ Test case for new vm instance
+ """
+ image_id = '34925a30-0f4a-4018-9759-0d6799063b51'
+ vimconnector.flavorlist = {'123347db-536b-4936-8b62-1fcdc721865d': {'vcpus': 1,
+ 'disk': 10,
+ 'ram': 1024}}
+ flavor_id = '123347db-536b-4936-8b62-1fcdc721865d'
+ net_list = [{'use': 'bridge', 'name': 'eth0', 'floating_ip': False, 'vpci': '0000:00:11.0', 'port_security': True, 'type': 'virtual', 'net_id': '69c713cb-3eec-452c-9a32-0e95c8ffe567'}]
+
+ cat_list = [{'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org3', 'isPublished': 'false', 'ownerName': 'system', 'numberOfMedia': '0', 'creationDate': '2017-10-15T02:03:59.403-07:00', 'id': '34925a30-0f4a-4018-9759-0d6799063b51', 'name': 'Ubuntu_1nic'}]
+
+ network_dict = {'status': '1', 'isShared': 'false', 'IpScope': '', 'EndAddress': '192.169.241.150', 'name': 'testing_6n5mJwUyx-ad9d62fc-8223-4dbe-88c4-9f16458ebeec', 'Dns1': '192.169.241.102', 'IpRanges': '', 'Gateway': '192.169.241.253', 'Netmask': '255.255.255.0', 'RetainNetInfoAcrossDeployments': 'false', 'IpScopes': '', 'IsEnabled': 'true', 'DnsSuffix': 'corp.local', 'StartAddress': '192.169.241.115', 'IpRange': '', 'Configuration': '', 'FenceMode': 'bridged', 'IsInherited': 'true', 'uuid': '69c713cb-3eec-452c-9a32-0e95c8ffe567'}
+
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+
+ catalog_list = lxmlElementTree.fromstring(xml_resp.catalog_list_xml)
+ # assumed return value from VIM connector
+ get_vdc_details.return_value = self.org, vdc
+ list_catalogs.return_value = cat_list
+ get_vcd_network.return_value = network_dict
+ get_vdc.return_value = vdc
+ get_catalog_item.return_value = catalog_list
+ self.vim.client = self.vim.connect()
+ perform_request.side_effect = [mock.Mock(status_code = 200,
+ content = xml_resp.catalogItem_xml),
+ mock.Mock(status_code = 200,
+ content = xml_resp.vapp_template_xml),
+ mock.Mock(status_code = 400,
+ content = "Bad request error")]
+
+ # call to VIM connector method
+ self.assertRaises(vimconnUnexpectedResponse,self.vim.new_vminstance,
+ name='Test1_vm',
+ image_id=image_id,
+ flavor_id=flavor_id,
+ net_list=net_list)
+
+ @mock.patch.object(vimconnector,'get_catalogid')
+ @mock.patch.object(vimconnector,'upload_vimimage')
+ @mock.patch.object(Org,'create_catalog')
+ @mock.patch.object(Org,'list_catalogs')
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ @mock.patch.object(path,'isfile')
+ @mock.patch.object(os,'access')
+ def test_new_image(self, access, isfile,
+ get_vdc_details,
+ list_catalogs,
+ create_catalog,
+ upload_vimimage,
+ get_catalogid):
+ """
+ Test case for create new image
+ """
+ path = '/tmp/cirros/cirros.ovf'
+ cat_list = [{'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org3', 'isPublished': 'false', 'ownerName': 'system', 'numberOfMedia': '0', 'creationDate': '2017-10-15T02:03:59.403-07:00', 'id': '9759-0d6799063b51', 'name': 'cirros'}]
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+
+ catalog = lxmlElementTree.fromstring(xml_resp.catalog1_xml_response)
+
+ # assumed return value from VIM connector
+ isfile.return_value = True
+ access.return_value = True
+ get_vdc_details.return_value = self.org, vdc
+ list_catalogs.return_value = cat_list
+ create_catalog.return_value = catalog
+ upload_vimimage.return_value = True
+ get_catalogid.return_value = '9759-0d6799063b51'
+ result = self.vim.new_image({'name': 'TestImage', 'location' : path})
+
+ # assert verified expected and return result from VIM connector
+ self.assertIsNotNone(result)
+
+ @mock.patch.object(vimconnector,'get_catalogid')
+ @mock.patch.object(vimconnector,'upload_vimimage')
+ @mock.patch.object(Org,'create_catalog')
+ @mock.patch.object(Org,'list_catalogs')
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ def test_new_image_negative(self, get_vdc_details, list_catalogs,
+ create_catalog,
+ upload_vimimage,
+ get_catalogid):
+ """
+ Test case for create new image with negative scenario
+ """
+ path = '/tmp/cirros/cirros.ovf'
+ cat_list = [{'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org1', 'ownerName': 'system', 'numberOfMedia': '0', 'creationDate': '2017-10-15', 'id': '34925a30-0f4a-4018-9759-0d6799063b51', 'name': 'test'}]
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+
+ catalog = lxmlElementTree.fromstring(xml_resp.catalog1_xml_response)
+
+ # assumed return value from VIM connector
+ get_vdc_details.return_value = self.org, vdc
+ list_catalogs.return_value = cat_list
+ create_catalog.return_value = catalog
+ upload_vimimage.return_value = False
+ get_catalogid.return_value = '34925a30-0f4a-4018-9759-0d6799063b51'
+
+ # assert verified expected and return result from VIM connector
+ self.assertRaises(vimconnException,self.vim.new_image,{'name':'TestImage', 'location':path})
+
+ @mock.patch.object(vimconnector,'connect_as_admin')
+ @mock.patch.object(vimconnector,'perform_request')
+ def test_delete_image(self, perform_request, connect_as_admin):
+ """
+ Testcase to delete image by image id
+ """
+ image_id = 'f3bf3733-465b-419f-b675-52f91d18edbb'
+ # creating conn object
+ self.vim.client = self.vim.connect_as_admin()
+
+ # assumed return value from VIM connector
+ perform_request.side_effect = [mock.Mock(status_code = 200,
+ content = xml_resp.delete_catalog_xml_response),
+ mock.Mock(status_code = 200,
+ content = xml_resp.delete_catalog_item_xml_response),
+ mock.Mock(status_code = 204,
+ content = ''),
+ mock.Mock(status_code = 204,
+ content = '')
+ ]
+
+ # call to vim connctor method
+ result = self.vim.delete_image(image_id)
+ # assert verified expected and return result from VIM connector
+ self.assertEqual(image_id, result)
+
+ @mock.patch.object(vimconnector,'get_catalogid')
+ @mock.patch.object(vimconnector,'upload_vimimage')
+ @mock.patch.object(Org,'create_catalog')
+ @mock.patch.object(Org,'list_catalogs')
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ @mock.patch.object(path,'isfile')
+ @mock.patch.object(os,'access')
+ def test_get_image_id_from_path(self, access, isfile,
+ get_vdc_details,
+ list_catalogs,
+ create_catalog,
+ upload_vimimage,
+ get_catalogid):
+ """
+ Test case to get image id from image path
+ """
+ path = '/tmp/ubuntu/ubuntu.ovf'
+ cat_list = [{'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org3', 'isPublished': 'false', 'ownerName': 'system', 'numberOfMedia': '0', 'creationDate': '2017-10-15T02:03:59.403-07:00', 'id': '7208-0f6777052c30', 'name': 'ubuntu'}]
+
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+
+ catalog = lxmlElementTree.fromstring(xml_resp.catalog1_xml_response)
+
+ # assumed return value from VIM connector
+ isfile.return_value = True
+ access.return_value = True
+ get_vdc_details.return_value = self.org, vdc
+ list_catalogs.return_value = cat_list
+ create_catalog.return_value = catalog
+ upload_vimimage.return_value = True
+ get_catalogid.return_value = '7208-0f6777052c30'
+ result = self.vim.get_image_id_from_path(path=path)
+
+ # assert verified expected and return result from VIM connector
+ self.assertIsNotNone(result)
+
+ @mock.patch.object(vimconnector,'get_catalogid')
+ @mock.patch.object(vimconnector,'upload_vimimage')
+ @mock.patch.object(Org,'create_catalog')
+ @mock.patch.object(Org,'list_catalogs')
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ @mock.patch.object(path,'isfile')
+ @mock.patch.object(os,'access')
+ def test_get_image_id_from_path_negative(self, access, isfile,
+ get_vdc_details,
+ list_catalogs,
+ create_catalog,
+ upload_vimimage,
+ get_catalogid):
+ """
+ Test case to get image id from image path with negative scenario
+ """
+ path = '/tmp/ubuntu/ubuntu.ovf'
+ cat_list = [{'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org3', 'isPublished': 'false', 'ownerName': 'system', 'numberOfMedia': '0', 'creationDate': '2017-10-15T02:03:59.403-07:00', 'id': '7208-0f6777052c30', 'name': 'ubuntu'}]
+
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+
+ catalog = lxmlElementTree.fromstring(xml_resp.catalog1_xml_response)
+
+ # assumed return value from VIM connector
+ isfile.return_value = True
+ access.return_value = True
+ get_vdc_details.return_value = self.org, vdc
+ list_catalogs.return_value = cat_list
+ create_catalog.return_value = catalog
+ upload_vimimage.return_value = False
+ get_catalogid.return_value = '7208-0f6777052c30'
+ self.assertRaises(vimconnException, self.vim.get_image_id_from_path, path)
+
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ @mock.patch.object(vimconnector,'connect')
+ @mock.patch.object(Org,'list_catalogs')
+ def test_get_image_list_negative(self, list_catalogs, connect, get_vdc_details):
+ """
+ Testcase to get image list by invalid image id
+ """
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+ self.vim.client = self.vim.connect()
+
+ # assumed return value from VIM connector
+ get_vdc_details.return_value = self.org, vdc
+ list_catalogs.return_value = [{'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org3', 'isPublished': 'false', 'ownerName': 'system', 'numberOfMedia': '0', 'creationDate': '2017-10-15T02:03:59.403-07:00', 'id': '34925a30-0f4a-4018-9759-0d6799063b51', 'name': 'Ubuntu_1nic'}, {'isShared': 'false', 'numberOfVAppTemplates': '1', 'orgName': 'Org3', 'isPublished': 'false', 'ownerName': 'orgadmin', 'numberOfMedia': '1', 'creationDate': '2018-02-15T02:16:58.300-08:00', 'id': '4b94b67e-c2c6-49ec-b46c-3f35ba45ca4a', 'name': 'cirros034'}]
+
+ # call to vim connector method with invalid image id
+ self.vim.get_image_list({'id': 'b46c-3f35ba45ca4a'})
+
+ @mock.patch.object(vimconnector,'get_vapp_details_rest')
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ def test_get_vminstance_negative(self, get_vdc_details, get_vapp_details_rest):
+ """
+ Testcase to get vminstance by invalid vm id
+ """
+
+ invalid_vmid = '18743edb0c8b-sdfsf-fg'
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+ # assumed return value from VIM connector
+ get_vdc_details.return_value = self.org, vdc
+ get_vapp_details_rest.return_value = False
+
+ # assert verified expected and return result from VIM connector
+ self.assertRaises(vimconnNotFoundException, self.vim.get_vminstance,invalid_vmid)
+
+ @mock.patch.object(vimconnector,'connect')
+ @mock.patch.object(vimconnector,'get_namebyvappid')
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ @mock.patch.object(VDC,'get_vapp')
+ def test_delete_vminstance_negative(self, get_vapp, get_vdc_details,
+ get_namebyvappid, connect):
+ """
+ Testcase to delete vminstance by invalid vm id
+ """
+ vm_id = 'sdfrtt4935-87a1-0e4dc9c3a069'
+ vm_name = 'Test1_vm-69a18104-8413-4cb8-bad7-b5afaec6f9fa'
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+
+ # assumed return value from VIM connector
+ self.vim.client = self.vim.connect()
+ get_vdc_details.return_value = self.org, vdc
+ get_namebyvappid.return_name = vm_name
+
+ get_vapp.return_value = None
+
+ # call to VIM connector method
+ self.assertRaises(vimconnException, self.vim.delete_vminstance,vm_id)
+
+ @mock.patch.object(vimconnector,'get_vcd_network')
+ def test_refresh_nets_status_negative(self, get_vcd_network):
+ """
+ Testcase for refresh nets status by invalid vm id
+ """
+ net_id = 'sjkldf-456mfd-345'
+
+ # assumed return value from VIM connector
+ get_vcd_network.return_value = None
+ result = self.vim.refresh_nets_status([net_id])
+
+ # assert verified expected and return result from VIM connector
+ for attr in result[net_id]:
+ if attr == 'status':
+ self.assertEqual(result[net_id][attr], 'DELETED')
+
+ @mock.patch.object(vimconnector,'connect')
+ @mock.patch.object(vimconnector,'get_namebyvappid')
+ @mock.patch.object(vimconnector,'get_vdc_details')
+ def test_action_vminstance_negative(self, get_vdc_details,
+ get_namebyvappid,
+ connect):
+ """
+ Testcase for action vm instance by invalid action
+ """
+ vm_id = '8413-4cb8-bad7-b5afaec6f9fa'
+ # created vdc object
+ vdc_xml_resp = xml_resp.vdc_xml_response
+ vdc = lxmlElementTree.fromstring(vdc_xml_resp)
+ # assumed return value from VIM connector
+ get_vdc_details.return_value = self.org, vdc
+ get_namebyvappid.return_value = 'Test1_vm-69a18104-8413-4cb8-bad7-b5afaec6f9fa'
+ self.vim.client = self.vim.connect()
+
+ # call to VIM connector method
+ self.assertRaises(vimconnException, self.vim.action_vminstance, vm_id,{'invalid': None})