X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=rwcal%2Ftest%2Ftest_rwcal_openstack.py;h=c2f54c212720fdd9d7d46bd0c1d969b08791b646;hb=f314b4af9744068a7ed7a6a6314220c3aa857523;hp=4ce494beccd4cd78d65d9372c932676a6675227f;hpb=6f07e6f33f751ab4ffe624f6037f887b243bece2;p=osm%2FSO.git diff --git a/rwcal/test/test_rwcal_openstack.py b/rwcal/test/test_rwcal_openstack.py index 4ce494be..c2f54c21 100644 --- a/rwcal/test/test_rwcal_openstack.py +++ b/rwcal/test/test_rwcal_openstack.py @@ -1,5 +1,5 @@ -# +# # Copyright 2016 RIFT.IO Inc # # Licensed under the Apache License, Version 2.0 (the "License"); @@ -20,7 +20,6 @@ import logging import time import unittest import hashlib - import novaclient.exceptions as nova_exception import paramiko import rw_peas @@ -29,38 +28,63 @@ from keystoneclient import v3 as ksclient from gi.repository import RwcalYang from gi.repository.RwTypes import RwStatus -from rift.rwcal.openstack.openstack_drv import KeystoneDriver, NovaDriver +#from rift.rwcal.openstack.openstack_drv import KeystoneDriver, NovaDriver, KeystoneDriverV3, KeystoneDriverV2 logger = logging.getLogger('rwcal-openstack') +PING_USERDATA = ''' +#cloud-config +password: fedora +chpasswd: { expire: False } +ssh_pwauth: True +''' + # -# Important information about openstack installation. This needs to be manually verified +# Important information about openstack installation. This needs to be manually verified # openstack_info = { - 'username' : 'pluto', - 'password' : 'mypasswd', - 'auth_url' : 'http://10.66.4.14:5000/v3/', - 'project_name' : 'demo', + 'username' : 'xxxxxx', + 'password' : 'xxxxx', + 'auth_url' : 'http://10.66.4.102:5000/v2.0/', + 'project_name' : 'xxxxx', 'mgmt_network' : 'private', 'reserved_flavor' : 'm1.medium', - 'reserved_image' : 'rift-root-latest.qcow2', + 'reserved_image' : 'Fedora-x86_64-20-20131211.1-sda-ping.qcow2', 'physical_network' : None, 'network_type' : None, - 'segmentation_id' : None + 'segmentation_id' : None, + 'user_domain_name' : 'default', + 'project_domain_name': 'default' + } + +openstack_V3_info = { + 'username' : 'riftdev_admin', + 'password' : 'mypasswd', + 'auth_url' : 'http://10.68.0.11:5000/v3/', + 'project_name' : 'demov3', + 'mgmt_network' : 'center', + 'physical_network' : None, + 'network_type' : None, + 'segmentation_id' : None, + 'user_domain_name' : 'riftdev', + 'project_domain_name': 'riftdev' } def get_cal_account(): """ - Creates an object for class RwcalYang.CloudAccount() + Creates an object for class RwcalYang.YangData_RwProject_Project_CloudAccounts_CloudAccountList() """ - account = RwcalYang.CloudAccount() - account.account_type = "openstack" - account.openstack.key = openstack_info['username'] - account.openstack.secret = openstack_info['password'] - account.openstack.auth_url = openstack_info['auth_url'] - account.openstack.tenant = openstack_info['project_name'] - account.openstack.mgmt_network = openstack_info['mgmt_network'] + account = RwcalYang.YangData_RwProject_Project_CloudAccounts_CloudAccountList() + account.name = "Gruntxx" + account.account_type = "openstack" + account.openstack.key = openstack_info['username'] + account.openstack.secret = openstack_info['password'] + account.openstack.auth_url = openstack_info['auth_url'] + account.openstack.tenant = openstack_info['project_name'] + account.openstack.mgmt_network = openstack_info['mgmt_network'] + account.openstack.user_domain = openstack_info['user_domain_name'] + account.openstack.project_domain = openstack_info['project_domain_name'] return account def get_cal_plugin(): @@ -81,7 +105,7 @@ def get_cal_plugin(): logger.error("ERROR:Cal plugin instantiation failed. Aborting tests") else: logger.info("Openstack Cal plugin successfully instantiated") - return cal + return cal class OpenStackTest(unittest.TestCase): @@ -94,7 +118,7 @@ class OpenStackTest(unittest.TestCase): HostTrust = "trusted" PCIPassThroughAlias = "PCI_10G_ALIAS" SEG_ID = openstack_info['segmentation_id'] - + def setUp(self): """ Assumption: @@ -108,7 +132,7 @@ class OpenStackTest(unittest.TestCase): logger.info("Openstack-CAL-Test: setUp") self.cal = get_cal_plugin() logger.info("Openstack-CAL-Test: setUpEND") - + # First check for VM Flavor and Image and get the corresponding IDs rc, rs = self.cal.get_flavor_list(self._acct) self.assertEqual(rc, RwStatus.SUCCESS) @@ -126,13 +150,14 @@ class OpenStackTest(unittest.TestCase): rc, rs = self.cal.get_network_list(self._acct) self.assertEqual(rc, RwStatus.SUCCESS) - networks = [ network for network in rs.networkinfo_list if (network.network_name == 'rift.cal.unittest.network' or network.network_name == 'rift.cal.virtual_link') ] + networks = [ network for network in rs.networkinfo_list if ((network.network_name == 'rift.cal.unittest.network') or ('rift.cal.virtual_link' in network.network_name) ) ] for network in networks: + logger.debug("Openstack-CAL-Test: Deleting old VL %s", network.network_id) self.cal.delete_virtual_link(self._acct, network.network_id) - + def tearDown(self): logger.info("Openstack-CAL-Test: tearDown") - + def _md5(fname, blksize=1048576): hash_md5 = hashlib.md5() @@ -141,7 +166,7 @@ class OpenStackTest(unittest.TestCase): hash_md5.update(chunk) return hash_md5.hexdigest() - @unittest.skip("Skipping test_list_flavors") + @unittest.skip("Skipping test_list_flavors") def test_list_flavor(self): """ List existing flavors from openstack installation @@ -154,8 +179,8 @@ class OpenStackTest(unittest.TestCase): rc, flv = self.cal.get_flavor(self._acct, flavor.id) self.assertEqual(rc, RwStatus.SUCCESS) self.assertEqual(flavor.id, flv.id) - - @unittest.skip("Skipping test_list_images") + + @unittest.skip("Skipping test_list_images") def test_list_images(self): """ List existing images from openstack installation @@ -168,8 +193,8 @@ class OpenStackTest(unittest.TestCase): # rc, img = self.cal.get_image(self._acct, image.id) # self.assertEqual(rc, RwStatus.SUCCESS) # self.assertEqual(image.id, img.id) - - @unittest.skip("Skipping test_list_vms") + + @unittest.skip("Skipping test_list_vms") def test_list_vms(self): """ List existing VMs from openstack installation @@ -181,8 +206,8 @@ class OpenStackTest(unittest.TestCase): for vm in rsp.vminfo_list: rc, server = self.cal.get_vm(self._acct, vm.vm_id) self.assertEqual(vm.vm_id, server.vm_id) - - @unittest.skip("Skipping test_list_networks") + + @unittest.skip("Skipping test_list_networks") def test_list_networks(self): """ List existing Network from openstack installation @@ -194,8 +219,8 @@ class OpenStackTest(unittest.TestCase): for network in rsp.networkinfo_list: rc, net = self.cal.get_network(self._acct, network.network_id) self.assertEqual(network.network_id, net.network_id) - - @unittest.skip("Skipping test_list_ports") + + @unittest.skip("Skipping test_list_ports") def test_list_ports(self): """ List existing Ports from openstack installation @@ -211,9 +236,9 @@ class OpenStackTest(unittest.TestCase): def _get_image_info_request(self): """ - Returns request object of type RwcalYang.ImageInfoItem() + Returns request object of type RwcalYang.YangData_RwProject_Project_VimResources_ImageinfoList() """ - img = RwcalYang.ImageInfoItem() + img = RwcalYang.YangData_RwProject_Project_VimResources_ImageinfoList() img.name = "rift.cal.unittest.image" img.location = '/net/sharedfiles/home1/common/vm/rift-root-latest.qcow2' img.disk_format = "qcow2" @@ -237,8 +262,8 @@ class OpenStackTest(unittest.TestCase): else: time.sleep(2) # Sleep for a second return rs - - @unittest.skip("Skipping test_create_delete_image") + + @unittest.skip("Skipping test_create_delete_image") def test_create_delete_image(self): """ Create/Query/Delete a new image in openstack installation @@ -261,12 +286,12 @@ class OpenStackTest(unittest.TestCase): def _get_flavor_info_request(self): """ - Returns request object of type RwcalYang.FlavorInfoItem() + Returns request object of type RwcalYang.YangData_RwProject_Project_VimResources_FlavorinfoList() """ - flavor = RwcalYang.FlavorInfoItem() + flavor = RwcalYang.YangData_RwProject_Project_VimResources_FlavorinfoList() flavor.name = 'rift.cal.unittest.flavor' flavor.vm_flavor.memory_mb = 16384 # 16GB - flavor.vm_flavor.vcpu_count = 4 + flavor.vm_flavor.vcpu_count = 4 flavor.vm_flavor.storage_gb = 40 # 40GB flavor.guest_epa.mempage_size = OpenStackTest.MemoryPageSize flavor.guest_epa.cpu_pinning_policy = OpenStackTest.CpuPolicy @@ -276,16 +301,22 @@ class OpenStackTest(unittest.TestCase): node = flavor.guest_epa.numa_node_policy.node.add() node.id = i if i == 0: - node.vcpu = [0,1] + vcpu = node.vcpu.add() + vcpu.id = 0 + vcpu = node.vcpu.add() + vcpu.id = 1 elif i == 1: - node.vcpu = [2,3] + vcpu = node.vcpu.add() + vcpu.id = 2 + vcpu = node.vcpu.add() + vcpu.id = 3 node.memory_mb = 8196 dev = flavor.guest_epa.pcie_device.add() dev.device_id = OpenStackTest.PCIPassThroughAlias dev.count = 1 return flavor - - @unittest.skip("Skipping test_create_delete_flavor") + + @unittest.skip("Skipping test_create_delete_flavor") def test_create_delete_flavor(self): """ Create/Query/Delete a new flavor in openstack installation @@ -299,11 +330,11 @@ class OpenStackTest(unittest.TestCase): if flavor_list: rc = self.cal.delete_flavor(self._acct, flavor_list[0].id) self.assertEqual(rc, RwStatus.SUCCESS) - + flavor = self._get_flavor_info_request() rc, flavor_id = self.cal.create_flavor(self._acct, flavor) self.assertEqual(rc, RwStatus.SUCCESS) - + logger.info("Openstack-CAL-Test: Created new flavor with flavor_id : %s" %(flavor_id)) rc, rs = self.cal.get_flavor(self._acct, flavor_id) self.assertEqual(rc, RwStatus.SUCCESS) @@ -332,7 +363,7 @@ class OpenStackTest(unittest.TestCase): """ Returns request object of type RwcalYang.VMInfoItem """ - vm = RwcalYang.VMInfoItem() + vm = RwcalYang.YangData_RwProject_Project_VimResources_VminfoList() vm.vm_name = 'rift.cal.unittest.vm' vm.flavor_id = flavor_id vm.image_id = image_id @@ -342,7 +373,7 @@ class OpenStackTest(unittest.TestCase): def _check_vm_state(self, vm_id, expected_state): """ - Wait until VM reaches particular state (expected_state). + Wait until VM reaches particular state (expected_state). """ # Wait while VM goes to required state @@ -369,7 +400,7 @@ class OpenStackTest(unittest.TestCase): if port_list: for port_id in port_list: port = vm.port_list.add() - port.port_id = port_id + port.port_id = port_id rc, vm_id = self.cal.create_vm(self._acct, vm) self.assertEqual(rc, RwStatus.SUCCESS) @@ -409,7 +440,7 @@ class OpenStackTest(unittest.TestCase): vm_list = [vm for vm in rs.vminfo_list if vm.vm_id == vm_id] if not len(vm_list): break - + rc, rs = self.cal.get_vm_list(self._acct) self.assertEqual(rc, RwStatus.SUCCESS) vm_list = [vm for vm in rs.vminfo_list if vm.vm_id == vm_id] @@ -427,8 +458,8 @@ class OpenStackTest(unittest.TestCase): self.assertEqual(rc, RwStatus.SUCCESS) ### Ensure that VM state is SHUTOFF self._check_vm_state(vm_id, 'SHUTOFF') - - + + def _start_vm(self, vm_id): """ Starts VM and performs validity checks @@ -442,7 +473,7 @@ class OpenStackTest(unittest.TestCase): ### Ensure that VM state is ACTIVE self._check_vm_state(vm_id, 'ACTIVE') - + def _reboot_vm(self, vm_id): """ Reboot VM and perform validity checks @@ -498,7 +529,7 @@ class OpenStackTest(unittest.TestCase): logger.info("Openstack-CAL-Test: Starting VM(EPA) create/delete test") flavor = self._get_flavor_info_request() - + rc, flavor_id = self.cal.do_create_flavor(self._acct, flavor) self.assertEqual(rc, RwStatus.SUCCESS) flavor.id = flavor_id @@ -513,6 +544,7 @@ class OpenStackTest(unittest.TestCase): rc = self.cal.do_delete_flavor(self._acct, flavor_id) self.assertEqual(rc, RwStatus.SUCCESS) + ''' @unittest.skip("Skipping test_expiry_token") def test_expiry_token(self): """ @@ -523,6 +555,7 @@ class OpenStackTest(unittest.TestCase): openstack_info['username'], openstack_info['password'], openstack_info['auth_url'], + None, openstack_info['project_name']) # Get hold of the client instance need for Token Manager client = drv._get_keystone_connection() @@ -558,7 +591,83 @@ class OpenStackTest(unittest.TestCase): flavors = nova.flavor_list() self.assertTrue(len(flavors) > 1) - @unittest.skip("Skipping test_vm_operations") + def test_v3_Keystone(self): + # Keystone v3 authentication + auth_exp = False + try: + drv = KeystoneDriverV3(openstack_V3_info['username'], + openstack_V3_info['password'], + openstack_V3_info['auth_url'], + openstack_V3_info['project_name'], + None, + openstack_V3_info['user_domain_name'], + openstack_V3_info['project_domain_name']) + client = drv._get_keystone_connection() + except Exception: + auth_exp = True + self.assertFalse(auth_exp) + + # Incorrect domain being to passed to v3 Keystone API + auth_exp = False + try: + drv = KeystoneDriverV3(openstack_V3_info['username'], + openstack_V3_info['password'], + openstack_V3_info['auth_url'], + openstack_V3_info['project_name'], + None, + "DummyDom", + openstack_V3_info['project_domain_name']) + client = drv._get_keystone_connection() + except Exception: + auth_exp = True + self.assertTrue(auth_exp) + + # Keystone v3 authentication-Backward compatabilty test + auth_exp = False + try: + drv = KeystoneDriverV3(openstack_info['username'], + openstack_info['password'], + openstack_info['auth_url'], + openstack_info['project_name'], + None, + openstack_info['user_domain_name'], + openstack_info['project_domain_name']) + client = drv._get_keystone_connection() + except Exception: + auth_exp = True + self.assertFalse(auth_exp) + + # Keystone v3 authentication-Backward compatabilty + auth_exp = False + try: + drv = KeystoneDriverV3(openstack_info['username'], + openstack_info['password'], + openstack_info['auth_url'], + openstack_info['project_name'], + None, + None, + None) + client = drv._get_keystone_connection() + except Exception: + auth_exp = True + self.assertFalse(auth_exp) + + # Keystone v2 authentication + auth_exp = False + try: + drv2 = KeystoneDriverV2( + openstack_info['username'], + openstack_info['password'], + 'http://10.66.4.17:5000/v2.0', + openstack_info['project_name'], + None) + client = drv2._get_keystone_connection() + except Exception: + auth_exp = True + self.assertFalse(auth_exp) + ''' + + @unittest.skip("Skipping test_vm_operations") def test_vm_operations(self): """ Primary goal: Create/Query/Delete VM in openstack installation. @@ -583,12 +692,12 @@ class OpenStackTest(unittest.TestCase): ### Delete the VM self._delete_vm(vm_id) - + def _get_network_info_request(self): """ - Returns request object of type RwcalYang.NetworkInfoItem + Returns request object of type RwcalYang.YangData_RwProject_Project_VimResources_NetworkinfoList """ - network = RwcalYang.NetworkInfoItem() + network = RwcalYang.YangData_RwProject_Project_VimResources_NetworkinfoList() network.network_name = 'rift.cal.unittest.network' network.subnet = '192.168.16.0/24' if openstack_info['physical_network']: @@ -629,16 +738,16 @@ class OpenStackTest(unittest.TestCase): logger.info("Openstack-CAL-Test: Deleting a network with id : %s. " %(net_id)) rc = self.cal.delete_network(self._acct, net_id) self.assertEqual(rc, RwStatus.SUCCESS) - + # Verify that network is no longer available via get_network_list API rc, rs = self.cal.get_network_list(self._acct) self.assertEqual(rc, RwStatus.SUCCESS) network_info = [ network for network in rs.networkinfo_list if network.network_id == net_id ] self.assertEqual(len(network_info), 0) logger.info("Openstack-CAL-Test: Successfully deleted Network with id : %s" %(net_id)) - - - @unittest.skip("Skipping test_network_operations") + + + @unittest.skip("Skipping test_network_operations") def test_network_operations(self): """ Create/Delete Networks @@ -653,9 +762,9 @@ class OpenStackTest(unittest.TestCase): def _get_port_info_request(self, network_id, vm_id): """ - Returns an object of type RwcalYang.PortInfoItem + Returns an object of type RwcalYang.YangData_RwProject_Project_VimResources_PortinfoList """ - port = RwcalYang.PortInfoItem() + port = RwcalYang.YangData_RwProject_Project_VimResources_PortinfoList() port.port_name = 'rift.cal.unittest.port' port.network_id = network_id if vm_id != None: @@ -693,7 +802,7 @@ class OpenStackTest(unittest.TestCase): ### Delete Port self.cal.delete_port(self._acct, port_id) - + rc, rs = self.cal.get_port_list(self._acct) self.assertEqual(rc, RwStatus.SUCCESS) port_list = [ port for port in rs.portinfo_list if port.port_id == port_id ] @@ -714,7 +823,7 @@ class OpenStackTest(unittest.TestCase): self.assertEqual(rc, RwStatus.SUCCESS) self.assertEqual(rs.port_state, expected_state) logger.info("Openstack-CAL-Test: Port with port_id : %s reached expected state : %s" %(port_id, rs.port_state)) - + @unittest.skip("Skipping test_port_operations_with_vm") def test_port_operations_with_vm(self): """ @@ -736,7 +845,7 @@ class OpenStackTest(unittest.TestCase): ### Delete VM self._delete_vm(vm_id) - + ### Delete Port self._delete_port(port_id) @@ -764,7 +873,7 @@ class OpenStackTest(unittest.TestCase): ### Delete VM self._delete_vm(vm_id) - + ### Delete Port self._delete_port(port_id) @@ -778,10 +887,14 @@ class OpenStackTest(unittest.TestCase): """ logger.info("Openstack-CAL-Test: Test Get VDU List APIs") rc, rsp = self.cal.get_vdu_list(self._acct) - self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rc.status, RwStatus.SUCCESS) logger.info("Openstack-CAL-Test: Received %d VDUs" %(len(rsp.vdu_info_list))) for vdu in rsp.vdu_info_list: - rc, vdu2 = self.cal.get_vdu(self._acct, vdu.vdu_id) + rc, vdu2 = self.cal.get_vdu(self._acct, vdu.vdu_id, "") + self.assertEqual(rc.status, RwStatus.SUCCESS) + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. self.assertEqual(vdu2.vdu_id, vdu.vdu_id) @@ -800,9 +913,9 @@ class OpenStackTest(unittest.TestCase): def _get_virtual_link_request_info(self): """ - Returns object of type RwcalYang.VirtualLinkReqParams + Returns object of type RwcalYang.YangData_RwProject_Project_VirtualLinkReqParams """ - vlink = RwcalYang.VirtualLinkReqParams() + vlink = RwcalYang.YangData_RwProject_Project_VirtualLinkReqParams() vlink.name = 'rift.cal.virtual_link' vlink.subnet = '192.168.1.0/24' if openstack_info['physical_network']: @@ -813,18 +926,39 @@ class OpenStackTest(unittest.TestCase): vlink.provider_network.segmentation_id = OpenStackTest.SEG_ID OpenStackTest.SEG_ID += 1 return vlink - + def _get_vdu_request_info(self, virtual_link_id): """ - Returns object of type RwcalYang.VDUInitParams + Returns object of type RwcalYang.YangData_RwProject_Project_VduInitParams """ - vdu = RwcalYang.VDUInitParams() + vdu = RwcalYang.YangData_RwProject_Project_VduInitParams() vdu.name = "cal.vdu" vdu.node_id = OpenStackTest.NodeID vdu.image_id = self._image.id + vdu.vm_flavor.memory_mb = 512 + vdu.vm_flavor.vcpu_count = 1 + vdu.vm_flavor.storage_gb = 4 vdu.flavor_id = self._flavor.id - vdu.vdu_init.userdata = '' + vdu.vdu_init.userdata = PING_USERDATA vdu.allocate_public_address = True + try: + meta1 = vdu.supplemental_boot_data.custom_meta_data.add() + meta1.name = "EMS_IP" + meta1.data_type = "STRING" + meta1.value = "10.5.6.6" + #meta2 = vdu.supplemental_boot_data.custom_meta_data.add() + #meta2.name = "Cluster_data" + #meta2.data_type = "JSON" + #meta2.value = '''{ "cluster_id": "12" , "vnfc_id": "112" }''' + except Exception as e: + pass + #vdu.supplemental_boot_data.boot_data_drive = True + customfile1 = vdu.supplemental_boot_data.config_file.add() + customfile1.source = "abcdef124" + customfile1.dest = "/tmp/tempfile.txt" + customfile2 = vdu.supplemental_boot_data.config_file.add() + customfile2.source = "123456" + customfile2.dest = "/tmp/tempfile2.txt" c1 = vdu.connection_points.add() c1.name = "c_point1" c1.virtual_link_id = virtual_link_id @@ -833,16 +967,153 @@ class OpenStackTest(unittest.TestCase): def _get_vdu_modify_request_info(self, vdu_id, virtual_link_id): """ - Returns object of type RwcalYang.VDUModifyParams + Returns object of type RwcalYang.YangData_RwProject_Project_VduModifyParams """ - vdu = RwcalYang.VDUModifyParams() + vdu = RwcalYang.YangData_RwProject_Project_VduModifyParams() vdu.vdu_id = vdu_id c1 = vdu.connection_points_add.add() c1.name = "c_modify1" c1.virtual_link_id = virtual_link_id - - return vdu - + + return vdu + + def _get_rbsh_vdu_request_info(self, vlink_list): + """ + Returns object of type RwcalYang.YangData_RwProject_Project_VduInitParams + """ + vdu = RwcalYang.YangData_RwProject_Project_VduInitParams() + vdu.name = "cal_rbsh_vdu" + vdu.vm_flavor.memory_mb = 2048 + vdu.vm_flavor.vcpu_count = 1 + vdu.vm_flavor.storage_gb = 10 + vdu.flavor_id = self._flavor.id + vdu.allocate_public_address = True + ctr = 0 + for vl in vlink_list: + c1 = vdu.connection_points.add() + c1.name = "c_point" + str(ctr) + ctr += 1 + c1.virtual_link_id = vl + c1.type_yang = 'VIRTIO' + + vol0 = vdu.volumes.add() + vol0.name = "vda" + vol0.image = "mgmt.img" + vol0.size = 40 + vol0.boot_priority = 0 + vol0.device_bus = "virtio" + vol0.device_type = "disk" + + vol1 = vdu.volumes.add() + vol1.name = "vdb" + vol1.image = "segstore.img" + vol1.size = 60 + vol1.boot_priority = 1 + vol1.device_bus = "virtio" + vol1.device_type = "disk" + + # blank disk + vol2 = vdu.volumes.add() + vol2.name = "vdc" + vol2.size = 10 + vol2.boot_priority = 2 + vol2.device_bus = "virtio" + vol2.device_type = "disk" + + # existing volume disk + vol3 = vdu.volumes.add() + vol3.name = "vdd" + vol3.size = 10 + vol3.volume_ref = "volume-ref1" + vol3.boot_priority = 3 + vol3.device_bus = "virtio" + vol3.device_type = "disk" + return vdu + + @unittest.skip("Skipping test_create_rbsh_vdu") + def test_create_rbsh_vdu(self): + """ + Test to create VDU with mgmt port and 3 additional connection points + """ + logger.info("Openstack-CAL-Test: Test Create Virtual Link API") + vlink_list = [] + for ctr in range(3): + vlink = RwcalYang.YangData_RwProject_Project_VirtualLinkReqParams() + vlink.name = 'rift.cal.virtual_link' + str(ctr) + vlink.subnet = '11.0.{}.0/24'.format(str(1 + ctr)) + + rc, rsp = self.cal.create_virtual_link(self._acct, vlink) + self.assertEqual(rc.status, RwStatus.SUCCESS) + logger.info("Openstack-CAL-Test: Created virtual_link with Id: %s" %rsp) + vlink_id = rsp + + #Check if virtual_link create is successful + rc, rsp = self.cal.get_virtual_link(self._acct, rsp) + self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rsp.virtual_link_id, vlink_id) + vlink_list.append(vlink_id) + + + # Now create VDU + vdu_req = self._get_rbsh_vdu_request_info(vlink_list) + logger.info("Openstack-CAL-Test: Test Create RB steelhead VDU API (w/ mgmt port) and 3 CPs") + + rc, rsp = self.cal.create_vdu(self._acct, vdu_req) + logger.debug("Openstack-CAL-Test: rc %s rsp %s" % (rc, rsp)) + self.assertEqual(rc.status, RwStatus.SUCCESS) + logger.info("Openstack-CAL-Test: Created vdu with Id: %s" %rsp) + + test_vdu_id = rsp + + ## Check if VDU get is successful + rc, rsp = self.cal.get_vdu(self._acct, test_vdu_id, "") + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. + self.assertEqual(rc.status, RwStatus.SUCCESS) + logger.debug("Get VDU response %s", rsp) + self.assertEqual(rsp.vdu_id, test_vdu_id) + + ### Wait until vdu_state is active + logger.debug("Waiting 10 secs") + time.sleep(10) + #{'name': 'dp0vhost7', 'connection_point_id': 'dp0vhost7', 'state': 'active', 'virtual_link_id': 'rift.cal.virtual_link', 'ip_address': '192.168.100.6'} + vdu_state = 'inactive' + cp_state = 'inactive' + for i in range(15): + rc, rsp = self.cal.get_vdu(self._acct, test_vdu_id, "") + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. + self.assertEqual(rc.status, RwStatus.SUCCESS) + logger.info("Openstack-CAL-Test: Iter %d VDU with id : %s. Reached State : %s, mgmt ip %s" %(i, test_vdu_id, rsp.state, rsp.management_ip)) + if (rsp.state == 'active') and ('management_ip' in rsp) and ('public_ip' in rsp): + vdu_state = 'active' + #'connection_points': [{'name': 'dp0vhost7', 'connection_point_id': 'dp0vhost7', 'state': 'active', 'virtual_link_id': 'rift.cal.virtual_link', 'ip_address': '192.168.100.6'}] + for cp in rsp.connection_points: + logger.info("Openstack-CAL-Test: Iter %d VDU with id : %s. Reached State : %s CP state %s" %(i, test_vdu_id, rsp.state, cp)) + logger.debug("Waiting another 5 secs") + time.sleep(5) + + self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rsp.state, 'active') + self.assertEqual(vdu_state, 'active') + logger.info("Openstack-CAL-Test: VDU with id : %s reached expected state : %s IP: %s" %(test_vdu_id, rsp.state, rsp.management_ip)) + logger.info("Openstack-CAL-Test: VDUInfo: %s" %(rsp)) + logger.info("Waiting for 30 secs before deletion") + time.sleep(30) + + ### Check vdu list as well + rc, rsp = self.cal.get_vdu_list(self._acct) + self.assertEqual(rc.status, RwStatus.SUCCESS) + found = False + logger.debug("Get VDU response %s", rsp) + for vdu in rsp.vdu_info_list: + if vdu.vdu_id == test_vdu_id: + found = True + self.assertEqual(found, True) + logger.info("Openstack-CAL-Test: Passed VDU list" ) + #@unittest.skip("Skipping test_create_delete_virtual_link_and_vdu") def test_create_delete_virtual_link_and_vdu(self): """ @@ -852,10 +1123,10 @@ class OpenStackTest(unittest.TestCase): vlink_req = self._get_virtual_link_request_info() rc, rsp = self.cal.create_virtual_link(self._acct, vlink_req) - self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rc.status, RwStatus.SUCCESS) logger.info("Openstack-CAL-Test: Created virtual_link with Id: %s" %rsp) vlink_id = rsp - + #Check if virtual_link create is successful rc, rsp = self.cal.get_virtual_link(self._acct, rsp) self.assertEqual(rc, RwStatus.SUCCESS) @@ -866,41 +1137,53 @@ class OpenStackTest(unittest.TestCase): logger.info("Openstack-CAL-Test: Test Create VDU API") rc, rsp = self.cal.create_vdu(self._acct, vdu_req) - self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rc.status, RwStatus.SUCCESS) logger.info("Openstack-CAL-Test: Created vdu with Id: %s" %rsp) vdu_id = rsp ## Check if VDU create is successful - rc, rsp = self.cal.get_vdu(self._acct, rsp) + rc, rsp = self.cal.get_vdu(self._acct, rsp, "") + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. + + self.assertEqual(rc.status, RwStatus.SUCCESS) self.assertEqual(rsp.vdu_id, vdu_id) ### Wait until vdu_state is active for i in range(50): - rc, rs = self.cal.get_vdu(self._acct, vdu_id) - self.assertEqual(rc, RwStatus.SUCCESS) + rc, rs = self.cal.get_vdu(self._acct, vdu_id, "") + self.assertEqual(rc.status, RwStatus.SUCCESS) + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. + self.assertEqual(rc.status, RwStatus.SUCCESS) logger.info("Openstack-CAL-Test: VDU with id : %s. Reached State : %s" %(vdu_id, rs.state)) if rs.state == 'active': break - rc, rs = self.cal.get_vdu(self._acct, vdu_id) - self.assertEqual(rc, RwStatus.SUCCESS) + rc, rs = self.cal.get_vdu(self._acct, vdu_id, "") + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. + self.assertEqual(rc.status, RwStatus.SUCCESS) self.assertEqual(rs.state, 'active') logger.info("Openstack-CAL-Test: VDU with id : %s reached expected state : %s" %(vdu_id, rs.state)) logger.info("Openstack-CAL-Test: VDUInfo: %s" %(rs)) - + vlink_req = self._get_virtual_link_request_info() ### Create another virtual_link rc, rsp = self.cal.create_virtual_link(self._acct, vlink_req) - self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rc.status, RwStatus.SUCCESS) logger.info("Openstack-CAL-Test: Created virtual_link with Id: %s" %rsp) vlink_id2= rsp ### Now exercise the modify_vdu_api - vdu_modify = self._get_vdu_modify_request_info(vdu_id, vlink_id2) - rc = self.cal.modify_vdu(self._acct, vdu_modify) - self.assertEqual(rc, RwStatus.SUCCESS) - logger.info("Openstack-CAL-Test: Modified vdu with Id: %s" %vdu_id) + #vdu_modify = self._get_vdu_modify_request_info(vdu_id, vlink_id2) + #rc = self.cal.modify_vdu(self._acct, vdu_modify) + #self.assertEqual(rc, RwStatus.SUCCESS) + #logger.info("Openstack-CAL-Test: Modified vdu with Id: %s" %vdu_id) ### Lets delete the VDU self.cal.delete_vdu(self._acct, vdu_id) @@ -914,7 +1197,7 @@ class OpenStackTest(unittest.TestCase): time.sleep(5) ### Verify that VDU and virtual link are successfully deleted rc, rsp = self.cal.get_vdu_list(self._acct) - self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rc.status, RwStatus.SUCCESS) for vdu in rsp.vdu_info_list: self.assertNotEqual(vdu.vdu_id, vdu_id) @@ -926,6 +1209,139 @@ class OpenStackTest(unittest.TestCase): logger.info("Openstack-CAL-Test: VDU/Virtual Link create-delete test successfully completed") + def _get_vol_vdu_request_info(self, vlink_list): + """ + Returns object of type RwcalYang.YangData_RwProject_Project_VduInitParams + """ + vdu = RwcalYang.YangData_RwProject_Project_VduInitParams() + vdu.name = "cal_vdu" + vdu.vm_flavor.memory_mb = 512 + vdu.vm_flavor.vcpu_count = 1 + vdu.vm_flavor.storage_gb = 4 + vdu.allocate_public_address = True + ctr = 0 + for vl in vlink_list: + c1 = vdu.connection_points.add() + c1.name = "c_point" + str(ctr) + ctr += 1 + c1.virtual_link_id = vl + c1.type_yang = 'VIRTIO' + + vol0 = vdu.volumes.add() + vol0.name = "vda" + vol0.image = openstack_info['reserved_image'] + vol0.size = 10 + try: + vol0.boot_priority = 0 + except Exception as e: + pass + vol0.device_type = "disk" + try: + meta1 = vol0.custom_meta_data.add() + meta1.name = "fs_type" + meta1.data_type = "STRING" + meta1.value = "ext4" + except Exception as e: + pass + + return vdu + + @unittest.skip("Skipping test_create_vol_vdu") + def test_create_vol_vdu(self): + """ + Test to create VDU with mgmt port using Volumes + """ + logger.info("Openstack-CAL-Test: Test Create Virtual Link API") + vlink_list = [] + vlink = RwcalYang.YangData_RwProject_Project_VirtualLinkReqParams() + vlink.name = 'rift.cal.virtual_link' + vlink.subnet = '11.0.1.0/24' + + rc, rsp = self.cal.create_virtual_link(self._acct, vlink) + self.assertEqual(rc.status, RwStatus.SUCCESS) + logger.info("Openstack-CAL-Test: Created virtual_link with Id: %s" %rsp) + vlink_id = rsp + + #Check if virtual_link create is successful + rc, rsp = self.cal.get_virtual_link(self._acct, rsp) + self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rsp.virtual_link_id, vlink_id) + vlink_list.append(vlink_id) + + # Now create VDU + vdu_req = self._get_vol_vdu_request_info(vlink_list) + logger.info("################################### ") + logger.info("Openstack-CAL-Test: Test Create VDU API (w/ volumes) ") + + rc, rsp = self.cal.create_vdu(self._acct, vdu_req) + logger.debug("Openstack-CAL-Test: rc %s rsp %s" % (rc, rsp)) + self.assertEqual(rc.status, RwStatus.SUCCESS) + logger.info("Openstack-CAL-Test: Created vdu with Id: %s" %rsp) + + test_vdu_id = rsp + + ## Check if VDU get is successful + rc, rsp = self.cal.get_vdu(self._acct, test_vdu_id, "") + self.assertEqual(rc.status, RwStatus.SUCCESS) + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. + + logger.debug("Get VDU response %s", rsp) + self.assertEqual(rsp.vdu_id, test_vdu_id) + + ### Wait until vdu_state is active + logger.debug("Waiting 10 secs") + time.sleep(10) + #{'name': 'dp0vhost7', 'connection_point_id': 'dp0vhost7', 'state': 'active', 'virtual_link_id': 'rift.cal.virtual_link', 'ip_address': '192.168.100.6'} + vdu_state = 'inactive' + cp_state = 'inactive' + for i in range(5): + rc, rsp = self.cal.get_vdu(self._acct, test_vdu_id, "") + # Make changes for the third argument (currently None for mgmt_network). + # This is the mgmt_network published in the vdur (vdu.mgmt_network). + # Pass accordingly as per the use case of the test. + self.assertEqual(rc.status, RwStatus.SUCCESS) + logger.info("Openstack-CAL-Test: VDU with id : %s. Reached State : %s, mgmt ip %s" %(test_vdu_id, rsp.state, rsp.management_ip)) + if (rsp.state == 'active') and ('management_ip' in rsp) and ('public_ip' in rsp): + vdu_state = 'active' + #'connection_points': [{'name': 'dp0vhost7', 'connection_point_id': 'dp0vhost7', 'state': 'active', 'virtual_link_id': 'rift.cal.virtual_link', 'ip_address': '192.168.100.6'}] + for cp in rsp.connection_points: + logger.info("Openstack-CAL-Test: VDU with id : %s. Reached State : %s CP state %s" %(test_vdu_id, rsp.state, cp)) + if vdu_state == 'active' and cp.ip_address is not None : + cp_state = 'active' + break + logger.debug("Waiting another 5 secs") + time.sleep(5) + + self.assertEqual(rc, RwStatus.SUCCESS) + self.assertEqual(rsp.state, 'active') + self.assertEqual(vdu_state, 'active') + self.assertEqual(cp_state, 'active') + logger.info("Openstack-CAL-Test: VDU with id : %s reached expected state : %s IP: %s" %(test_vdu_id, rsp.state, rsp.management_ip)) + logger.info("Openstack-CAL-Test: VDUInfo: %s" %(rsp)) + logger.info("Waiting for 30 secs before deletion") + time.sleep(30) + + ### Check vdu list as well + rc, rsp = self.cal.get_vdu_list(self._acct) + self.assertEqual(rc.status, RwStatus.SUCCESS) + found = False + logger.debug("Get VDU response %s", rsp) + for vdu in rsp.vdu_info_list: + if vdu.vdu_id == test_vdu_id: + found = True + self.assertEqual(found, True) + logger.info("Openstack-CAL-Test: Passed VDU list" ) + + @unittest.skip("Skipping test_validate_creds") + def test_validate_creds(self): + """ + Test validate creds + """ + logger.info("Openstack-CAL-Test: Test validate creds") + status = self.cal.validate_cloud_creds(self._acct) + logger.info("Openstack-CAL-Test: Passed validate creds") class VmData(object): """A convenience class that provides all the stats and EPA Attributes @@ -1053,5 +1469,6 @@ class VmData(object): if __name__ == "__main__": - logging.basicConfig(level=logging.INFO) + #logging.basicConfig(level=logging.DEBUG) + logger.setLevel(logging.DEBUG) unittest.main()