mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	Test NSX tunnel in guest network
This commit is contained in:
		
							parent
							
								
									a633ef8113
								
							
						
					
					
						commit
						811f254e4d
					
				| @ -24,10 +24,19 @@ from marvin.lib.base import ( | |||||||
|     NetworkOffering, |     NetworkOffering, | ||||||
|     NiciraNvp, |     NiciraNvp, | ||||||
|     ServiceOffering, |     ServiceOffering, | ||||||
|  |     NATRule, | ||||||
|  |     PublicIPAddress, | ||||||
|     Network, |     Network, | ||||||
|     VirtualMachine |     VirtualMachine | ||||||
| ) | ) | ||||||
| from marvin.lib.common import (get_domain, get_zone, get_template) | from marvin.lib.common import ( | ||||||
|  |     get_domain, | ||||||
|  |     get_zone, | ||||||
|  |     get_template, | ||||||
|  |     list_routers, | ||||||
|  |     list_hosts, | ||||||
|  |     findSuitableHostForMigration | ||||||
|  | ) | ||||||
| from nose.plugins.attrib import attr | from nose.plugins.attrib import attr | ||||||
| from marvin.codes import (FAILED, PASS) | from marvin.codes import (FAILED, PASS) | ||||||
| import time | import time | ||||||
| @ -255,13 +264,74 @@ class TestNiciraContoller(cloudstackTestCase): | |||||||
| 
 | 
 | ||||||
|     def get_routers_for_network(self, network): |     def get_routers_for_network(self, network): | ||||||
|         return list_routers( |         return list_routers( | ||||||
|             self.apiclient, |             self.api_client, | ||||||
|             account='admin', |             account='admin', | ||||||
|             domainid=self.account.domainid, |             domainid=self.domain.id, | ||||||
|             networkid=network.id |             networkid=network.id | ||||||
|         ) |         ) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |     def get_hosts(self): | ||||||
|  |         return list_hosts( | ||||||
|  |             self.api_client, | ||||||
|  |             account='admin', | ||||||
|  |             domainid=self.domain.id | ||||||
|  |         ) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def get_master_router(self, routers): | ||||||
|  |         master = filter(lambda r: r.redundantstate == 'MASTER', routers) | ||||||
|  |         self.logger.debug("Found %s master router(s): %s" % (master.size(), master)) | ||||||
|  |         return master[0] | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def distribute_vm_and_routers_by_hosts(self, virtual_machine, routers): | ||||||
|  |         if len(routers) > 1: | ||||||
|  |             router = self.get_router(routers) | ||||||
|  |             self.logger.debug("Master Router VM is %s" % router) | ||||||
|  |         else: | ||||||
|  |             router = routers[0] | ||||||
|  | 
 | ||||||
|  |         if router.hostid == virtual_machine.hostid: | ||||||
|  |             self.logger.debug("Master Router VM is on the same host as VM") | ||||||
|  |             host = findSuitableHostForMigration(self.api_client, router.id) | ||||||
|  |             if host is not None: | ||||||
|  |                 router.migrate(self.api_client, host) | ||||||
|  |                 self.logger.debug("Migrated Master Router VM to host %s" % host) | ||||||
|  |             else: | ||||||
|  |                 self.fail('No suitable host to migrate Master Router VM to') | ||||||
|  |         else: | ||||||
|  |             self.logger.debug("Master Router VM is not on the same host as VM: %s, %s" % (router.hostid, virtual_machine.hostid)) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def acquire_publicip(self, network): | ||||||
|  |         self.logger.debug("Associating public IP for network: %s" % network.name) | ||||||
|  |         public_ip = PublicIPAddress.create( | ||||||
|  |             self.api_client, | ||||||
|  |             accountid='admin', | ||||||
|  |             zoneid=self.zone.id, | ||||||
|  |             domainid=self.domain.id, | ||||||
|  |             networkid=network.id | ||||||
|  |         ) | ||||||
|  |         self.logger.debug("Associated %s with network %s" % (public_ip.ipaddress.ipaddress, network.id)) | ||||||
|  |         self.test_cleanup.append(public_ip) | ||||||
|  |         return public_ip | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def create_natrule(self, vm, public_ip, network): | ||||||
|  |         self.logger.debug("Creating NAT rule in network for vm with public IP") | ||||||
|  |         nat_rule = NATRule.create( | ||||||
|  |             self.api_client, | ||||||
|  |             vm, | ||||||
|  |             self.vm_services['small'], | ||||||
|  |             ipaddressid=public_ip.ipaddress.id, | ||||||
|  |             openfirewall=True, | ||||||
|  |             networkid=network.id | ||||||
|  |         ) | ||||||
|  |         self.test_cleanup.append(nat_rule) | ||||||
|  |         return nat_rule | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|     @attr(tags = ["advanced", "smoke", "nicira"], required_hardware="true") |     @attr(tags = ["advanced", "smoke", "nicira"], required_hardware="true") | ||||||
|     def test_01_nicira_controller(self): |     def test_01_nicira_controller(self): | ||||||
|         self.add_nicira_device(self.nicira_master_controller) |         self.add_nicira_device(self.nicira_master_controller) | ||||||
| @ -309,3 +379,39 @@ class TestNiciraContoller(cloudstackTestCase): | |||||||
|         vm_response = list_vm_response[0] |         vm_response = list_vm_response[0] | ||||||
|         self.assertEqual(vm_response.id, virtual_machine.id, 'Virtual machine in response does not match request') |         self.assertEqual(vm_response.id, virtual_machine.id, 'Virtual machine in response does not match request') | ||||||
|         self.assertEqual(vm_response.state, 'Running', 'VM is not in Running state') |         self.assertEqual(vm_response.state, 'Running', 'VM is not in Running state') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     @attr(tags = ["advanced", "smoke", "nicira"], required_hardware="true") | ||||||
|  |     def test_03_nicira_tunnel_guest_network(self): | ||||||
|  |         self.add_nicira_device(self.nicira_master_controller) | ||||||
|  |         network         = self.create_guest_network() | ||||||
|  |         virtual_machine = self.create_virtual_machine(network) | ||||||
|  |         public_ip       = self.acquire_publicip(network) | ||||||
|  |         nat_rule        = self.create_natrule(virtual_machine, public_ip, network) | ||||||
|  | 
 | ||||||
|  |         list_vm_response = VirtualMachine.list(self.api_client, id=virtual_machine.id) | ||||||
|  |         self.logger.debug("Verify listVirtualMachines response for virtual machine: %s" % virtual_machine.id) | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(isinstance(list_vm_response, list), True, 'Response did not return a valid list') | ||||||
|  |         self.assertNotEqual(len(list_vm_response), 0, 'List of VMs is empty') | ||||||
|  | 
 | ||||||
|  |         vm_response = list_vm_response[0] | ||||||
|  |         self.assertEqual(vm_response.id, virtual_machine.id, 'Virtual machine in response does not match request') | ||||||
|  |         self.assertEqual(vm_response.state, 'Running', 'VM is not in Running state') | ||||||
|  | 
 | ||||||
|  |         routers = self.get_routers_for_network(network) | ||||||
|  | 
 | ||||||
|  |         self.distribute_vm_and_routers_by_hosts(virtual_machine, routers) | ||||||
|  | 
 | ||||||
|  |         ssh_command = 'ping -c 3 google.com' | ||||||
|  |         result = 'failed' | ||||||
|  |         try: | ||||||
|  |             self.logger.debug("SSH into VM: %s" % public_ip.ipaddress.ipaddress) | ||||||
|  |             ssh = virtual_machine.get_ssh_client(ipaddress=public_ip.ipaddress.ipaddress) | ||||||
|  |             self.logger.debug('Ping to google.com from VM') | ||||||
|  |             result = str(ssh.execute(ssh_command)) | ||||||
|  |             self.logger.debug("SSH result: %s; COUNT is ==> %s" % (result, result.count("3 packets received"))) | ||||||
|  |         except Exception as e: | ||||||
|  |             self.fail("SSH Access failed for %s: %s" % (vmObj.get_ip(), e)) | ||||||
|  | 
 | ||||||
|  |         self.assertEqual(result.count('3 packets received'), 1, 'Ping to outside world from VM should be successful') | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user