mirror of
				https://github.com/apache/cloudstack.git
				synced 2025-10-26 08:42:29 +01:00 
			
		
		
		
	* cleanup plan * more robust cleanup within member method * ss_domain_limits fixed * egress 'icmp' instead of 'all' and cleanup * configdrive syntax, fixed to be up to par with py2 * cleanup fixed the lb secondary ip tests? * deal with different base64 encoding in py3 for userdata * cleanup of multiple_ips_per_nic * cleanup and reformat of test_volumes * cleanup and fixes for test_ps_domain_limits.py * cleanup and fix of test_ps_limits.py * fix occasional match of float against int * cleanup and fix test_ps_resize_volume.py * cleanup and fix test_snapshots * cleanup ss_max_limits and fix for float vs int problem in API * mere cleanup of test_volume_destroy_recover * add missing command creation * cleanup of test_vpc_on_host_maintenance * cleanup test_vpc_network * cleanup, comments and logging in test_vpc_network_lbrules * cleanup of test_vpc_network_pfrules * cleanup and format code for test_vpc_network_staticnatrule * f string instead of conversion specifiers * check http and ssh fix and cleanup (for vpc pfrules tests) * generalise create network method * make ip optional in creating webserver * remove unused code and add rules to enable ssh * more cleanup * remove unused code and cleanup * small cleanup, mostly precarous run environment required * cleanup and removed unused code * advancedsg only, cleanup, pulled in services * reformat/cleanup * log result of error after verify rule * add nw_off_no_services * tags=["TODO"] for escalations_networks * tags=["TODO"] for organization_states * tags=["TODO"] for browse_templates * tags=["TODO"] for configdrive * tags=["TODO"] for vpc_vms_deployment * add remove network cleanup and fixes * move tests that fail on all platforms out of the way Co-authored-by: Daan Hoogland <dahn@onecht.net>
		
			
				
	
	
		
			1209 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			1209 lines
		
	
	
		
			65 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| # Licensed to the Apache Software Foundation (ASF) under one
 | |
| # or more contributor license agreements.  See the NOTICE file
 | |
| # distributed with this work for additional information
 | |
| # regarding copyright ownership.  The ASF licenses this file
 | |
| # to you under the Apache License, Version 2.0 (the
 | |
| # "License"); you may not use this file except in compliance
 | |
| # with the License.  You may obtain a copy of the License at
 | |
| #
 | |
| #   http://www.apache.org/licenses/LICENSE-2.0
 | |
| #
 | |
| # Unless required by applicable law or agreed to in writing,
 | |
| # software distributed under the License is distributed on an
 | |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 | |
| # KIND, either express or implied.  See the License for the
 | |
| # specific language governing permissions and limitations
 | |
| # under the License.
 | |
| 
 | |
| """ Component tests for VPC network functionality - Internal Load Balancing Rules
 | |
| """
 | |
| # Import Local Modules
 | |
| from marvin.cloudstackTestCase import cloudstackTestCase
 | |
| from marvin.lib.base import (Account,
 | |
|                              ApplicationLoadBalancer,
 | |
|                              Network,
 | |
|                              NetworkACL,
 | |
|                              NetworkOffering,
 | |
|                              PublicIPAddress,
 | |
|                              Router,
 | |
|                              ServiceOffering,
 | |
|                              StaticNATRule,
 | |
|                              VirtualMachine,
 | |
|                              VPC,
 | |
|                              VpcOffering)
 | |
| from marvin.lib.common import (get_domain,
 | |
|                                get_template,
 | |
|                                get_zone)
 | |
| from marvin.lib.utils import cleanup_resources
 | |
| from marvin.cloudstackAPI import (listInternalLoadBalancerVMs,
 | |
|                                   restartVPC,
 | |
|                                   stopInternalLoadBalancerVM,
 | |
|                                   startInternalLoadBalancerVM)
 | |
| # Import System Modules
 | |
| from nose.plugins.attrib import attr
 | |
| import copy
 | |
| import socket
 | |
| import time
 | |
| 
 | |
| 
 | |
| class TestVPCNetworkInternalLBRules(cloudstackTestCase):
 | |
|     """Test VPC network functionality with Internal Load Balancing Rules
 | |
|     """
 | |
| 
 | |
|     @classmethod
 | |
|     def setUpClass(cls):
 | |
|         # We want to fail quicker, if it's a failure
 | |
|         socket.setdefaulttimeout(60)
 | |
| 
 | |
|         test_client = super(TestVPCNetworkInternalLBRules, cls).getClsTestClient()
 | |
|         cls.api_client = test_client.getApiClient()
 | |
|         cls.db_client = test_client.getDbConnection()
 | |
|         cls.test_data = test_client.getParsedTestDataConfig()
 | |
| 
 | |
|         # Get Zone, Domain and templates
 | |
|         cls.zone = get_zone(cls.api_client)
 | |
|         cls.domain = get_domain(cls.api_client)
 | |
|         cls.template = get_template(cls.api_client,
 | |
|                                     cls.zone.id,
 | |
|                                     cls.test_data["ostype"]
 | |
|                                     )
 | |
|         cls.test_data["virtual_machine"]["zoneid"] = cls.zone.id
 | |
|         cls.test_data["virtual_machine"]["template"] = cls.template.id
 | |
| 
 | |
|         # Create service offering
 | |
|         cls.service_offering = ServiceOffering.create(cls.api_client,
 | |
|                                                       cls.test_data["service_offering"]
 | |
|                                                       )
 | |
|         cls._cleanup = [cls.service_offering]
 | |
|         return
 | |
| 
 | |
|     @classmethod
 | |
|     def tearDownClass(cls):
 | |
|         try:
 | |
|             # Cleanup resources used
 | |
|             cleanup_resources(cls.api_client, cls._cleanup)
 | |
|         except Exception as e:
 | |
|             print(("Warning: Exception during cleanup : %s" % e))
 | |
|         return
 | |
| 
 | |
|     def setUp(self):
 | |
|         # Create an account
 | |
|         self.account = Account.create(self.api_client,
 | |
|                                       self.test_data["account"],
 | |
|                                       admin=True,
 | |
|                                       domainid=self.domain.id
 | |
|                                       )
 | |
|         self.cleanup = [self.account]
 | |
| 
 | |
|         # Creating a VPC offering
 | |
|         self.debug("Creating a VPC offering..")
 | |
|         self.vpc_off = VpcOffering.create(self.api_client, self.test_data["vpc_offering_multi_lb"])
 | |
|         self.cleanup.append(self.vpc_off)
 | |
|         self.debug("Enabling the VPC offering created")
 | |
|         self.vpc_off.update(self.api_client, state='Enabled')
 | |
| 
 | |
|         # Creating a VPC
 | |
|         self.debug("Creating a VPC in the account: %s" % self.account.name)
 | |
|         testdata = self.test_data["vpc"]
 | |
|         testdata["name"] = "TestVPC"
 | |
|         testdata["displaytext"] = "TestVPC"
 | |
|         testdata["cidr"] = "10.1.1.1/16"
 | |
|         self.vpc = VPC.create(self.api_client,
 | |
|                               testdata,
 | |
|                               vpcofferingid=self.vpc_off.id,
 | |
|                               zoneid=self.zone.id,
 | |
|                               account=self.account.name,
 | |
|                               domainid=self.account.domainid
 | |
|                               )
 | |
| 
 | |
|         # Creating network offerings
 | |
|         self.debug("Creating Network offering with Internal LB service...")
 | |
|         self.net_off_1 = NetworkOffering.create(self.api_client,
 | |
|                                                 self.test_data["network_offering_internal_lb"],
 | |
|                                                 conservemode=False)
 | |
|         self.cleanup.append(self.net_off_1)
 | |
|         self.debug("Enabling the Network offering created")
 | |
|         self.net_off_1.update(self.api_client, state="Enabled")
 | |
| 
 | |
|         self.debug("Creating Network offering without Internal LB service...")
 | |
|         net_offering = copy.deepcopy(self.test_data["network_offering_internal_lb"])
 | |
|         net_offering["name"] = "Network offering without internal lb service"
 | |
|         net_offering["displaytext"] = "Network offering without internal lb service"
 | |
|         net_offering["supportedservices"] = "Vpn,Dhcp,Dns,UserData,SourceNat,StaticNat,PortForwarding,NetworkACL"
 | |
|         del net_offering["serviceProviderList"]["Lb"]
 | |
|         del net_offering["serviceCapabilityList"]["Lb"]
 | |
|         self.net_off_2 = NetworkOffering.create(self.api_client,
 | |
|                                                 net_offering,
 | |
|                                                 conservemode=False)
 | |
|         self.cleanup.append(self.net_off_2)
 | |
|         self.debug("Enabling the Network offering created")
 | |
|         self.net_off_2.update(self.api_client, state="Enabled")
 | |
|         return
 | |
| 
 | |
|     def tearDown(self):
 | |
|         try:
 | |
|             # Clean up, terminate the created network offerings
 | |
|             cleanup_resources(self.api_client, self.cleanup)
 | |
|         except Exception as e:
 | |
|             self.debug("Warning: Exception during cleanup : %s" % e)
 | |
|         return
 | |
| 
 | |
|     # create_Network - Creates network with the given Network offering in the VPC
 | |
|     def create_Network(self, nw_off, gateway="10.1.1.1"):
 | |
|         self.debug("Creating a network in the account - %s" % self.account.name)
 | |
|         self.test_data["network"]["netmask"] = "255.255.255.0"
 | |
|         network = Network.create(self.api_client,
 | |
|                                  self.test_data["network"],
 | |
|                                  accountid=self.account.name,
 | |
|                                  domainid=self.account.domainid,
 | |
|                                  networkofferingid=nw_off.id,
 | |
|                                  zoneid=self.zone.id,
 | |
|                                  gateway=gateway,
 | |
|                                  vpcid=self.vpc.id,
 | |
|                                  )
 | |
|         self.debug("Created network with ID - %s" % network.id)
 | |
|         return network
 | |
| 
 | |
|     # create_VM - Creates VM in the given network
 | |
|     def create_VM(self, network):
 | |
|         self.debug("Creating VM in network with ID - %s in the account - %s" % (network.id, self.account.name))
 | |
|         vm = VirtualMachine.create(self.api_client,
 | |
|                                    self.test_data["virtual_machine"],
 | |
|                                    accountid=self.account.name,
 | |
|                                    domainid=self.account.domainid,
 | |
|                                    serviceofferingid=self.service_offering.id,
 | |
|                                    templateid=self.template.id,
 | |
|                                    zoneid=self.zone.id,
 | |
|                                    networkids=[str(network.id)],
 | |
|                                    hostid=None
 | |
|                                    )
 | |
|         self.debug("Created VM with ID - %s in network with ID - %s" % (vm.id, network.id))
 | |
|         return vm
 | |
| 
 | |
|     # restart_Vpc - Restarts the given VPC with/without cleanup
 | |
|     def restart_Vpc(self, vpc, cleanup=None):
 | |
|         self.debug("Restarting VPC with ID - %s" % vpc.id)
 | |
|         cmd = restartVPC.restartVPCCmd()
 | |
|         cmd.id = vpc.id
 | |
|         cmd.cleanup = cleanup
 | |
|         self.api_client.restartVPC(cmd)
 | |
|         self.debug("Restarted VPC with ID - %s" % vpc.id)
 | |
| 
 | |
|     # get_Router - Returns router for the given network
 | |
|     def get_Router(self, network):
 | |
|         self.debug("Finding the virtual router for network with ID - %s" % network.id)
 | |
|         routers = Router.list(self.api_client,
 | |
|                               networkid=network.id,
 | |
|                               listall=True
 | |
|                               )
 | |
|         self.assertEqual(isinstance(routers, list), True,
 | |
|                          "List routers should return a valid virtual router for network"
 | |
|                          )
 | |
|         return routers[0]
 | |
| 
 | |
|     # create_Internal_LB_Rule - Creates Internal LB rule in the given VPC network
 | |
|     def create_Internal_LB_Rule(self, network, vm_array=None, services=None, source_ip=None):
 | |
|         self.debug("Creating Internal LB rule in VPC network with ID - %s" % network.id)
 | |
|         if not services:
 | |
|             services = self.test_data["internal_lbrule"]
 | |
|         int_lb_rule = ApplicationLoadBalancer.create(self.api_client,
 | |
|                                                      services=services,
 | |
|                                                      sourcenetworkid=network.id,
 | |
|                                                      networkid=network.id,
 | |
|                                                      sourceipaddress=source_ip
 | |
|                                                      )
 | |
|         self.debug("Created Internal LB rule")
 | |
|         # Assigning VMs to the created Internal Load Balancer rule
 | |
|         if vm_array:
 | |
|             self.debug("Assigning virtual machines - %s to the created Internal LB rule" % vm_array)
 | |
|             int_lb_rule.assign(self.api_client, vms=vm_array)
 | |
|             self.debug("Assigned VMs to the created Internal LB rule")
 | |
|         return int_lb_rule
 | |
| 
 | |
|     # validate_Internal_LB_Rule - Validates the given Internal LB rule,
 | |
|     # matches the given Internal LB rule name and state against the list of Internal LB rules fetched
 | |
|     def validate_Internal_LB_Rule(self, int_lb_rule, state=None, vm_array=None):
 | |
|         """Validates the Internal LB Rule"""
 | |
|         self.debug("Check if the Internal LB Rule is created successfully ?")
 | |
|         int_lb_rules = ApplicationLoadBalancer.list(self.api_client,
 | |
|                                                     id=int_lb_rule.id
 | |
|                                                     )
 | |
|         self.assertEqual(isinstance(int_lb_rules, list), True,
 | |
|                          "List Internal LB Rule should return a valid list"
 | |
|                          )
 | |
|         self.assertEqual(int_lb_rule.name, int_lb_rules[0].name,
 | |
|                          "Name of the Internal LB Rule should match with the returned list data"
 | |
|                          )
 | |
|         if state:
 | |
|             self.assertEqual(int_lb_rules[0].loadbalancerrule[0].state, state,
 | |
|                              "Internal LB Rule state should be '%s'" % state
 | |
|                              )
 | |
|         if vm_array:
 | |
|             instance_ids = [instance.id for instance in int_lb_rules[0].loadbalancerinstance]
 | |
|             for vm in vm_array:
 | |
|                 self.assertEqual(vm.id in instance_ids, True,
 | |
|                                  "Internal LB instance list should have the VM with ID - %s" % vm.id
 | |
|                                  )
 | |
|         self.debug("Internal LB Rule creation successfully validated for %s" % int_lb_rule.name)
 | |
| 
 | |
|     # list_InternalLbVms - Lists deployed Internal LB VM instances
 | |
|     def list_InternalLbVms(self, network_id=None, source_ip=None):
 | |
|         listInternalLoadBalancerVMsCmd = listInternalLoadBalancerVMs.listInternalLoadBalancerVMsCmd()
 | |
|         listInternalLoadBalancerVMsCmd.account = self.account.name
 | |
|         listInternalLoadBalancerVMsCmd.domainid = self.account.domainid
 | |
|         if network_id:
 | |
|             listInternalLoadBalancerVMsCmd.networkid = network_id
 | |
|         internal_lb_vms = self.api_client.listInternalLoadBalancerVMs(listInternalLoadBalancerVMsCmd)
 | |
|         if source_ip:
 | |
|             return [internal_lb_vm for internal_lb_vm in internal_lb_vms
 | |
|                     if str(internal_lb_vm.guestipaddress) == source_ip]
 | |
|         else:
 | |
|             return internal_lb_vms
 | |
| 
 | |
|     # get_InternalLbVm - Returns Internal LB VM instance for the given VPC network and source ip
 | |
|     def get_InternalLbVm(self, network, source_ip):
 | |
|         self.debug("Finding the InternalLbVm for network with ID - %s and source IP address - %s" %
 | |
|                    (network.id, source_ip))
 | |
|         internal_lb_vms = self.list_InternalLbVms(network.id, source_ip)
 | |
|         self.assertEqual(isinstance(internal_lb_vms, list), True,
 | |
|                          "List InternalLbVms should return a valid list"
 | |
|                          )
 | |
|         return internal_lb_vms[0]
 | |
| 
 | |
|     # stop_InternalLbVm - Stops the given Internal LB VM instance
 | |
|     def stop_InternalLbVm(self, int_lb_vm, force=None):
 | |
|         self.debug("Stopping InternalLbVm with ID - %s" % int_lb_vm.id)
 | |
|         cmd = stopInternalLoadBalancerVM.stopInternalLoadBalancerVMCmd()
 | |
|         cmd.id = int_lb_vm.id
 | |
|         if force:
 | |
|             cmd.forced = force
 | |
|         self.api_client.stopInternalLoadBalancerVM(cmd)
 | |
| 
 | |
|     # start_InternalLbVm - Starts the given Internal LB VM instance
 | |
|     def start_InternalLbVm(self, int_lb_vm):
 | |
|         self.debug("Starting InternalLbVm with ID - %s" % int_lb_vm.id)
 | |
|         cmd = startInternalLoadBalancerVM.startInternalLoadBalancerVMCmd()
 | |
|         cmd.id = int_lb_vm.id
 | |
|         self.api_client.startInternalLoadBalancerVM(cmd)
 | |
| 
 | |
|     # check_InternalLbVm_state - Checks if the Internal LB VM instance of the given VPC network and source IP is in the
 | |
|     # expected state form the list of fetched Internal LB VM instances
 | |
|     def check_InternalLbVm_state(self, network, source_ip, state=None):
 | |
|         self.debug("Check if the InternalLbVm is in state - %s" % state)
 | |
|         internal_lb_vms = self.list_InternalLbVms(network.id, source_ip)
 | |
|         self.assertEqual(isinstance(internal_lb_vms, list), True,
 | |
|                          "List InternalLbVm should return a valid list"
 | |
|                          )
 | |
|         if state:
 | |
|             self.assertEqual(internal_lb_vms[0].state, state,
 | |
|                              "InternalLbVm is not in the expected state"
 | |
|                              )
 | |
|         self.debug("InternalLbVm instance - %s is in the expected state - %s" % (internal_lb_vms[0].name, state))
 | |
| 
 | |
|     # create_NetworkAclRule - Creates Ingress Network ACL rule in the given network
 | |
|     def create_NetworkAclRule(self, rule, network):
 | |
|         self.debug("Adding Ingress NetworkACL rule - %s" % rule)
 | |
|         return NetworkACL.create(self.api_client,
 | |
|                                  networkid=network.id,
 | |
|                                  services=rule,
 | |
|                                  traffictype="Ingress"
 | |
|                                  )
 | |
| 
 | |
|     # acquire_PublicIPAddress - Acquires public IP address for the VPC
 | |
|     def acquire_PublicIPAddress(self):
 | |
|         self.debug("Acquiring public IP for VPC with ID - %s in the account - %s" % (self.vpc.id, self.account.name))
 | |
|         public_ip = PublicIPAddress.create(self.api_client,
 | |
|                                            accountid=self.account.name,
 | |
|                                            domainid=self.account.domainid,
 | |
|                                            zoneid=self.zone.id,
 | |
|                                            vpcid=self.vpc.id
 | |
|                                            )
 | |
|         self.debug("Acquired public IP address - %s for VPC with ID - %s" %
 | |
|                    (public_ip.ipaddress.ipaddress, self.vpc.id))
 | |
|         return public_ip
 | |
| 
 | |
|     # create_StaticNatRule_For_VM - Creates Static NAT rule on the given public IP for the given VM in the given network
 | |
|     def create_StaticNatRule_For_VM(self, vm, public_ip, network):
 | |
|         self.debug("Enabling Static NAT rule on public IP - %s for VM with ID - %s in network with ID - %s" %
 | |
|                    (public_ip.ipaddress.ipaddress, vm.id, network.id))
 | |
|         StaticNATRule.enable(self.api_client,
 | |
|                              ipaddressid=public_ip.ipaddress.id,
 | |
|                              virtualmachineid=vm.id,
 | |
|                              networkid=network.id,
 | |
|                              vmguestip=None
 | |
|                              )
 | |
|         self.debug("Static NAT rule enabled on public IP - %s for VM with ID - %s in network with ID - %s" %
 | |
|                    (public_ip.ipaddress.ipaddress, vm.id, network.id))
 | |
| 
 | |
|     # ssh_into_VM - Gets into the shell of the given VM using its Static NAT rule enabled public IP
 | |
|     def ssh_into_VM(self, vm, public_ip):
 | |
|         self.debug("SSH into VM with ID - %s on public IP address - %s" % (vm.id, public_ip.ipaddress.ipaddress))
 | |
|         ssh_client = vm.get_ssh_client(ipaddress=public_ip.ipaddress.ipaddress)
 | |
|         return ssh_client
 | |
| 
 | |
|     # execute_cmd - Executes the given command on the given ssh client
 | |
|     def execute_cmd(self, ssh_client, cmd):
 | |
|         self.debug("SSH client executing command - %s" % cmd)
 | |
|         ret_data = ""
 | |
|         out_list = ssh_client.execute(cmd)
 | |
|         if out_list is not None:
 | |
|             ret_data = ' '.join(map(str, out_list)).strip()
 | |
|             self.debug("SSH client executed command result - %s" % ret_data)
 | |
|         else:
 | |
|             self.debug("SSH client executed command result is None")
 | |
|         return ret_data
 | |
| 
 | |
|     # wget_from_vm_cmd - From within the given VM (ssh client),
 | |
|     # fetches test.html file of web server running with the given public IP
 | |
|     def wget_from_vm_cmd(self, ssh_client, ip_address, port):
 | |
|         cmd = "wget --no-cache -t 1 http://" + ip_address + ":" + str(port) + "/test.html"
 | |
|         response = self.execute_cmd(ssh_client, cmd)
 | |
|         if "200 OK" not in response:
 | |
|             self.fail("Failed to wget from a VM with http server IP address - %s" % ip_address)
 | |
|         # Removing the wget file
 | |
|         cmd = "rm -r test.html"
 | |
|         self.execute_cmd(ssh_client, cmd)
 | |
| 
 | |
|     @attr(tags=["advanced", "intervlan"], required_hardware="false")
 | |
|     def test_01_internallb_rules(self):
 | |
|         """Test VPC Network Internal LB functionality with different combinations of Internal LB rules
 | |
|         """
 | |
| 
 | |
|         # 1. Create an Internal LB Rule with source IP Address specified, check if the Internal LB Rule is successfully
 | |
|         #    created.
 | |
|         # 2. Create an Internal LB Rule without source IP Address specified, check if the Internal LB Rule is
 | |
|         #    successfully created.
 | |
|         # 3. Create an Internal LB Rule when the specified source IP Address is outside the VPC network (tier) CIDR
 | |
|         #    range, check if the Internal LB Rule creation failed as the requested source IP is not in the network's
 | |
|         #    CIDR subnet.
 | |
|         # 4. Create an Internal LB Rule when the specified source IP Address is outside the VPC super CIDR range,
 | |
|         #    check if the Internal LB Rule creation failed as the requested source IP is not in the network's CIDR
 | |
|         #    subnet.
 | |
|         # 5. Create an Internal LB Rule in the tier with LB service provider as VpcInlineLbVm, check if the Internal LB
 | |
|         #    Rule creation failed as Scheme Internal is not supported by this network offering.
 | |
|         # 6. Create multiple Internal LB Rules using different Load Balancing source IP Addresses, check if the Internal
 | |
|         #    LB Rules are successfully created.
 | |
|         # 7. Create multiple Internal LB Rules with different ports but using the same Load Balancing source IP Address,
 | |
|         #    check if the Internal LB Rules are successfully created.
 | |
|         # 8. Create multiple Internal LB Rules with same ports and using the same Load Balancing source IP Address,
 | |
|         #    check if the second Internal LB Rule creation failed as it conflicts with the first Internal LB rule.
 | |
|         # 9. Attach a VM to the above created Internal LB Rules, check if the VM is successfully attached to the
 | |
|         #    Internal LB Rules.
 | |
|         # 10. Verify the InternalLbVm deployment after successfully creating the first Internal LB Rule and attaching a
 | |
|         #     VM to it.
 | |
|         # 11. Verify the failure of attaching a VM from a different tier to an Internal LB Rule created on a tier.
 | |
|         # 12. Delete the above created Internal LB Rules, check if the Internal LB Rules are successfully deleted.
 | |
| 
 | |
|         # Creating VPC networks in the VPC, and deploying VMs
 | |
|         self.debug("Creating a VPC network with Internal LB service...")
 | |
|         internal_tier = self.create_Network(self.net_off_1, gateway='10.1.1.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         internal_vm = self.create_VM(internal_tier)
 | |
| 
 | |
|         self.debug("Creating a VPC network without Internal LB service...")
 | |
|         public_tier = self.create_Network(self.net_off_2, gateway='10.1.2.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         public_vm = self.create_VM(public_tier)
 | |
| 
 | |
|         # Creating Internal LB Rules
 | |
|         self.debug("Creating an Internal LB Rule without source IP Address specified...")
 | |
|         int_lb_rule = self.create_Internal_LB_Rule(internal_tier)
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule, state="Add")
 | |
| 
 | |
|         # Validating InternalLbVm deployment
 | |
|         with self.assertRaises(Exception):
 | |
|             self.check_InternalLbVm_state(internal_tier, int_lb_rule.sourceipaddress)
 | |
|         self.debug("InternalLbVm is not deployed in the network as there are no VMs assigned to this Internal LB Rule")
 | |
| 
 | |
|         self.debug('Deleting the Internal LB Rule - %s' % int_lb_rule.name)
 | |
|         int_lb_rule.delete(self.api_client)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule)
 | |
|         self.debug("Internal LB Rule successfully deleted in CloudStack")
 | |
| 
 | |
|         free_source_ip = int_lb_rule.sourceipaddress
 | |
| 
 | |
|         self.debug("Creating an Internal LB Rule with source IP Address specified...")
 | |
|         int_lb_rule = self.create_Internal_LB_Rule(internal_tier, source_ip=free_source_ip)
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule, state="Add")
 | |
| 
 | |
|         # Validating InternalLbVm deployment
 | |
|         with self.assertRaises(Exception):
 | |
|             self.check_InternalLbVm_state(internal_tier, int_lb_rule.sourceipaddress)
 | |
|         self.debug("InternalLbVm is not deployed in the network as there are no VMs assigned to this Internal LB Rule")
 | |
| 
 | |
|         self.debug('Deleting the Internal LB Rule - %s' % int_lb_rule.name)
 | |
|         int_lb_rule.delete(self.api_client)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule)
 | |
|         self.debug("Internal LB Rule successfully deleted in CloudStack")
 | |
| 
 | |
|         self.debug("Creating an Internal LB Rule when the specified source IP Address is outside the VPC network CIDR "
 | |
|                    "range...")
 | |
|         with self.assertRaises(Exception):
 | |
|             self.create_Internal_LB_Rule(internal_tier, source_ip="10.1.1.256")
 | |
|         self.debug("Internal LB Rule creation failed as the requested IP is not in the network's CIDR subnet")
 | |
| 
 | |
|         self.debug("Creating an Internal LB Rule when the specified source IP Address is outside the VPC super CIDR "
 | |
|                    "range...")
 | |
|         with self.assertRaises(Exception):
 | |
|             self.create_Internal_LB_Rule(internal_tier, source_ip="10.2.1.256")
 | |
|         self.debug("Internal LB Rule creation failed as the requested IP is not in the network's CIDR subnet")
 | |
| 
 | |
|         self.debug("Creating an Internal LB Rule in a VPC network without Internal Lb service...")
 | |
|         with self.assertRaises(Exception):
 | |
|             self.create_Internal_LB_Rule(public_tier)
 | |
|         self.debug("Internal LB Rule creation failed as Scheme Internal is not supported by this network offering")
 | |
| 
 | |
|         self.debug("Creating multiple Internal LB Rules using different Load Balancing source IP Addresses...")
 | |
|         int_lb_rule_1 = self.create_Internal_LB_Rule(internal_tier, vm_array=[internal_vm])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active", vm_array=[internal_vm])
 | |
|         int_lb_rule_2 = self.create_Internal_LB_Rule(internal_tier, vm_array=[internal_vm])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active", vm_array=[internal_vm])
 | |
| 
 | |
|         # Validating InternalLbVms deployment and state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_2.sourceipaddress, state="Running")
 | |
| 
 | |
|         self.debug('Removing VMs from the Internal LB Rules - %s, %s' % (int_lb_rule_1.name, int_lb_rule_2.name))
 | |
|         int_lb_rule_1.remove(self.api_client, vms=[internal_vm])
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_1, vm_array=[internal_vm])
 | |
|         self.debug("VMs successfully removed from the Internal LB Rule in CloudStack")
 | |
|         int_lb_rule_2.remove(self.api_client, vms=[internal_vm])
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_2, vm_array=[internal_vm])
 | |
|         self.debug("VMs successfully removed from the Internal LB Rule in CloudStack")
 | |
| 
 | |
|         # Validating InternalLbVms state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_2.sourceipaddress, state="Running")
 | |
| 
 | |
|         self.debug('Deleting the Internal LB Rules - %s, %s' % (int_lb_rule_1.name, int_lb_rule_2.name))
 | |
|         int_lb_rule_1.delete(self.api_client)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_1)
 | |
|         self.debug("Internal LB Rule successfully deleted in CloudStack")
 | |
|         int_lb_rule_2.delete(self.api_client)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_2)
 | |
|         self.debug("Internal LB Rule successfully deleted in CloudStack")
 | |
| 
 | |
|         # Validating InternalLbVms un-deployment
 | |
|         with self.assertRaises(Exception):
 | |
|             self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress)
 | |
|         self.debug("InternalLbVm successfully destroyed in CloudStack")
 | |
|         with self.assertRaises(Exception):
 | |
|             self.check_InternalLbVm_state(internal_tier, int_lb_rule_2.sourceipaddress)
 | |
|         self.debug("InternalLbVm successfully destroyed in CloudStack")
 | |
| 
 | |
|         self.debug("Creating multiple Internal LB Rules with different ports but using the same Load Balancing source "
 | |
|                    "IP Address...")
 | |
|         int_lb_rule_1 = self.create_Internal_LB_Rule(internal_tier, vm_array=[internal_vm])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active", vm_array=[internal_vm])
 | |
|         int_lb_rule_2 = self.create_Internal_LB_Rule(internal_tier,
 | |
|                                                      vm_array=[internal_vm],
 | |
|                                                      services=self.test_data["internal_lbrule_http"],
 | |
|                                                      source_ip=int_lb_rule_1.sourceipaddress
 | |
|                                                      )
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active", vm_array=[internal_vm])
 | |
| 
 | |
|         # Validating InternalLbVm deployment and state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         self.debug('Removing VMs from the Internal LB Rules - %s, %s' % (int_lb_rule_1.name, int_lb_rule_2.name))
 | |
|         int_lb_rule_1.remove(self.api_client, vms=[internal_vm])
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_1, vm_array=[internal_vm])
 | |
|         self.debug("VMs successfully removed from the Internal LB Rule in CloudStack")
 | |
|         int_lb_rule_2.remove(self.api_client, vms=[internal_vm])
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_2, vm_array=[internal_vm])
 | |
|         self.debug("VMs successfully removed from the Internal LB Rule in CloudStack")
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         self.debug('Deleting the Internal LB Rules - %s, %s' % (int_lb_rule_1.name, int_lb_rule_2.name))
 | |
|         int_lb_rule_1.delete(self.api_client)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_1)
 | |
|         self.debug("Internal LB Rule successfully deleted in CloudStack")
 | |
|         int_lb_rule_2.delete(self.api_client)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule_2)
 | |
|         self.debug("Internal LB Rule successfully deleted in CloudStack")
 | |
| 
 | |
|         # Validating InternalLbVm un-deployment
 | |
|         with self.assertRaises(Exception):
 | |
|             self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress)
 | |
|         self.debug("InternalLbVm successfully destroyed in CloudStack")
 | |
| 
 | |
|         self.debug("Creating multiple Internal LB Rules with same ports and using the same Load Balancing source IP "
 | |
|                    "Address...")
 | |
|         int_lb_rule = self.create_Internal_LB_Rule(internal_tier, vm_array=[internal_vm])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule, state="Active", vm_array=[internal_vm])
 | |
|         with self.assertRaises(Exception):
 | |
|             self.create_Internal_LB_Rule(internal_tier, vm_array=[internal_vm], source_ip=int_lb_rule.sourceipaddress)
 | |
|         self.debug("Internal LB Rule creation failed as it conflicts with the existing rule")
 | |
| 
 | |
|         # Validating InternalLbVm deployment and state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule.sourceipaddress, state="Running")
 | |
| 
 | |
|         self.debug('Removing VMs from the Internal LB Rule - %s' % int_lb_rule.name)
 | |
|         int_lb_rule.remove(self.api_client, vms=[internal_vm])
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule, vm_array=[internal_vm])
 | |
|         self.debug("VMs successfully removed from the Internal LB Rule in CloudStack")
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule.sourceipaddress, state="Running")
 | |
| 
 | |
|         self.debug('Deleting the Internal LB Rule - %s' % int_lb_rule.name)
 | |
|         int_lb_rule.delete(self.api_client)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.validate_Internal_LB_Rule(int_lb_rule)
 | |
|         self.debug("Internal LB Rule successfully deleted in CloudStack")
 | |
| 
 | |
|         # Validating InternalLbVm un-deployment
 | |
|         with self.assertRaises(Exception):
 | |
|             self.check_InternalLbVm_state(internal_tier, int_lb_rule.sourceipaddress)
 | |
|         self.debug("InternalLbVm successfully destroyed in CloudStack")
 | |
| 
 | |
|         self.debug("Attaching a VM from a different tier to an Internal LB Rule created on a tier...")
 | |
|         with self.assertRaises(Exception):
 | |
|             self.create_Internal_LB_Rule(internal_tier, vm_array=[public_vm])
 | |
|         self.debug("Internal LB Rule creation failed as the VM belongs to a different network")
 | |
| 
 | |
|     # tags=["advanced", "intervlan"]
 | |
|     @attr(tags=["TODO"], required_hardware="true")
 | |
|     def test_02_internallb_rules_traffic(self):
 | |
|         """Test VPC Network Internal LB functionality by performing (wget) traffic tests within a VPC
 | |
|         """
 | |
| 
 | |
|         # 1. Create an Internal LB Rule "internal_lbrule" with source IP Address specified on the Internal tier, check
 | |
|         #    if the Internal LB Rule is successfully created.
 | |
|         # 2. Create an Internal LB Rule "internal_lbrule_http" with source IP Address (same as above) specified on the
 | |
|         #    Internal tier, check if the Internal LB Rule is successfully created.
 | |
|         # 3. Attach a VM to the above created Internal LB Rules, check if the InternalLbVm is successfully deployed in
 | |
|         #    the Internal tier.
 | |
|         # 4. Deploy two more VMs in the Internal tier, check if the VMs are successfully deployed.
 | |
|         # 5. Attach the newly deployed VMs to the above created Internal LB Rules, verify the validity of the above
 | |
|         #    created Internal LB Rules over three Load Balanced VMs in the Internal tier.
 | |
|         # 6. Create the corresponding Network ACL rules to make the created Internal LB rules (SSH & HTTP) accessible,
 | |
|         #    check if the Network ACL rules are successfully added to the internal tier.
 | |
|         # 7. Validate the Internal LB functionality by performing (wget) traffic tests from a VM in the Public tier to
 | |
|         #    the Internal load balanced guest VMs in the Internal tier, using Static NAT functionality to access (ssh)
 | |
|         #    the VM on the Public tier.
 | |
|         # 8. Verify that the InternalLbVm gets destroyed when the last Internal LB rule is removed from the Internal
 | |
|         #    tier.
 | |
|         # 9. Repeat the above steps for one more Internal tier as well, validate the Internal LB functionality.
 | |
| 
 | |
|         # Creating VPC networks in the VPC, and deploying VMs
 | |
|         self.debug("Creating a VPC network with Internal LB service...")
 | |
|         internal_tier_1 = self.create_Network(self.net_off_1, gateway='10.1.1.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         internal_vm_1 = self.create_VM(internal_tier_1)
 | |
| 
 | |
|         self.debug("Creating one more VPC network with Internal LB service...")
 | |
|         internal_tier_2 = self.create_Network(self.net_off_1, gateway='10.1.2.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         internal_vm_2 = self.create_VM(internal_tier_2)
 | |
| 
 | |
|         self.debug("Creating a VPC network without Internal LB service...")
 | |
|         public_tier = self.create_Network(self.net_off_2, gateway='10.1.3.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         public_vm = self.create_VM(public_tier)
 | |
| 
 | |
|         # Creating Internal LB Rules in the Internal tiers
 | |
|         self.debug("Creating three Internal LB Rules (SSH & HTTP) using the same Load Balancing source IP Address...")
 | |
|         int_lb_rule_1 = self.create_Internal_LB_Rule(internal_tier_1, vm_array=[internal_vm_1])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active", vm_array=[internal_vm_1])
 | |
|         int_lb_rule_2 = self.create_Internal_LB_Rule(internal_tier_1,
 | |
|                                                      vm_array=[internal_vm_1],
 | |
|                                                      services=self.test_data["internal_lbrule_http"],
 | |
|                                                      source_ip=int_lb_rule_1.sourceipaddress
 | |
|                                                      )
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active", vm_array=[internal_vm_1])
 | |
|         internal_lbrule_http = copy.deepcopy(self.test_data["internal_lbrule_http"])
 | |
|         internal_lbrule_http["sourceport"] = 8080
 | |
|         internal_lbrule_http["instanceport"] = 8080
 | |
|         int_lb_rule_3 = self.create_Internal_LB_Rule(internal_tier_1,
 | |
|                                                      vm_array=[internal_vm_1],
 | |
|                                                      services=internal_lbrule_http,
 | |
|                                                      source_ip=int_lb_rule_1.sourceipaddress
 | |
|                                                      )
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_3, state="Active", vm_array=[internal_vm_1])
 | |
| 
 | |
|         # Validating InternalLbVm deployment and state
 | |
|         self.check_InternalLbVm_state(internal_tier_1, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Deploying more VMs in the Internal tier
 | |
|         self.debug("Deploying two more VMs in network - %s" % internal_tier_1.name)
 | |
|         internal_vm_1_1 = self.create_VM(internal_tier_1)
 | |
|         internal_vm_1_2 = self.create_VM(internal_tier_1)
 | |
| 
 | |
|         # Adding newly deployed VMs to the created Internal LB rules
 | |
|         self.debug("Adding two more virtual machines to the created Internal LB rules...")
 | |
|         int_lb_rule_1.assign(self.api_client, [internal_vm_1_1, internal_vm_1_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active",
 | |
|                                        vm_array=[internal_vm_1, internal_vm_1_1, internal_vm_1_2])
 | |
|         int_lb_rule_2.assign(self.api_client, [internal_vm_1_1, internal_vm_1_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active",
 | |
|                                        vm_array=[internal_vm_1, internal_vm_1_1, internal_vm_1_2])
 | |
|         int_lb_rule_3.assign(self.api_client, [internal_vm_1_1, internal_vm_1_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_3, state="Active",
 | |
|                                        vm_array=[internal_vm_1, internal_vm_1_1, internal_vm_1_2])
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier_1, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Adding Network ACL rules in the Internal tier
 | |
|         self.debug("Adding Network ACL rules to make the created Internal LB rules (SSH & HTTP) accessible...")
 | |
|         self.create_NetworkAclRule(self.test_data["ingress_rule"], internal_tier_1)
 | |
|         self.create_NetworkAclRule(self.test_data["http_rule"], internal_tier_1)
 | |
|         http_rule = copy.deepcopy(self.test_data["http_rule"])
 | |
|         http_rule["privateport"] = 8080
 | |
|         http_rule["publicport"] = 8080
 | |
|         http_rule["startport"] = 8080
 | |
|         http_rule["endport"] = 8080
 | |
|         self.create_NetworkAclRule(http_rule, internal_tier_1)
 | |
| 
 | |
|         # Creating Internal LB Rules in the Internal tier
 | |
|         self.debug("Creating three Internal LB Rules (SSH & HTTP) using the same Load Balancing source IP Address...")
 | |
|         int_lb_rule_4 = self.create_Internal_LB_Rule(internal_tier_2, vm_array=[internal_vm_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_4, state="Active", vm_array=[internal_vm_2])
 | |
|         int_lb_rule_5 = self.create_Internal_LB_Rule(internal_tier_2,
 | |
|                                                      vm_array=[internal_vm_2],
 | |
|                                                      services=self.test_data["internal_lbrule_http"],
 | |
|                                                      source_ip=int_lb_rule_4.sourceipaddress
 | |
|                                                      )
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_5, state="Active", vm_array=[internal_vm_2])
 | |
|         int_lb_rule_6 = self.create_Internal_LB_Rule(internal_tier_2,
 | |
|                                                      vm_array=[internal_vm_2],
 | |
|                                                      services=internal_lbrule_http,
 | |
|                                                      source_ip=int_lb_rule_4.sourceipaddress
 | |
|                                                      )
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_6, state="Active", vm_array=[internal_vm_2])
 | |
| 
 | |
|         # Validating InternalLbVm deployment and state
 | |
|         self.check_InternalLbVm_state(internal_tier_2, int_lb_rule_4.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Deploying more VMs in the Internal tier
 | |
|         self.debug("Deploying two more VMs in network - %s" % internal_tier_2.name)
 | |
|         internal_vm_2_1 = self.create_VM(internal_tier_2)
 | |
|         internal_vm_2_2 = self.create_VM(internal_tier_2)
 | |
| 
 | |
|         # Adding newly deployed VMs to the created Internal LB rules
 | |
|         self.debug("Adding two more virtual machines to the created Internal LB rules...")
 | |
|         int_lb_rule_4.assign(self.api_client, [internal_vm_2_1, internal_vm_2_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_4, state="Active",
 | |
|                                        vm_array=[internal_vm_2, internal_vm_2_1, internal_vm_2_2])
 | |
|         int_lb_rule_5.assign(self.api_client, [internal_vm_2_1, internal_vm_2_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_5, state="Active",
 | |
|                                        vm_array=[internal_vm_2, internal_vm_2_1, internal_vm_2_2])
 | |
|         int_lb_rule_6.assign(self.api_client, [internal_vm_2_1, internal_vm_2_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_6, state="Active",
 | |
|                                        vm_array=[internal_vm_2, internal_vm_2_1, internal_vm_2_2])
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier_2, int_lb_rule_4.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Adding Network ACL rules in the Internal tier
 | |
|         self.debug("Adding Network ACL rules to make the created Internal LB rules (SSH & HTTP) accessible...")
 | |
|         self.create_NetworkAclRule(self.test_data["ingress_rule"], internal_tier_2)
 | |
|         self.create_NetworkAclRule(self.test_data["http_rule"], internal_tier_2)
 | |
|         self.create_NetworkAclRule(http_rule, internal_tier_2)
 | |
| 
 | |
|         # Creating Static NAT rule for the VM in the Public tier
 | |
|         public_ip = self.acquire_PublicIPAddress()
 | |
|         self.create_StaticNatRule_For_VM(public_vm, public_ip, public_tier)
 | |
| 
 | |
|         # Adding Network ACL rule in the Public tier
 | |
|         self.debug("Adding Network ACL rule to make the created NAT rule (SSH) accessible...")
 | |
|         self.create_NetworkAclRule(self.test_data["ingress_rule"], public_tier)
 | |
| 
 | |
|         # Internal LB (wget) traffic tests
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               http_rule["publicport"]
 | |
|                               )
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_4.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_4.sourceipaddress,
 | |
|                               http_rule["publicport"]
 | |
|                               )
 | |
| 
 | |
|     # tags=["advanced", "intervlan"]
 | |
|     @attr(tags=["TODO"], required_hardware="true")
 | |
|     def test_03_internallb_rules_vpc_network_restarts_traffic(self):
 | |
|         """Test VPC Network Internal LB functionality with restarts of VPC network components by performing (wget)
 | |
|         traffic tests within a VPC
 | |
|         """
 | |
| 
 | |
|         # Repeat the tests in the testcase "test_02_internallb_rules_traffic" with restarts of VPC networks (tiers):
 | |
|         # 1. Restart tier with InternalLbVm (cleanup = false), verify that the InternalLbVm gets destroyed and deployed
 | |
|         #    again in the Internal tier.
 | |
|         # 2. Restart tier with InternalLbVm (cleanup = true), verify that the InternalLbVm gets destroyed and deployed
 | |
|         #    again in the Internal tier.
 | |
|         # 3. Restart tier without InternalLbVm (cleanup = false), verify that this restart has no effect on the
 | |
|         #    InternalLbVm functionality.
 | |
|         # 4. Restart tier without InternalLbVm (cleanup = true), verify that this restart has no effect on the
 | |
|         #    InternalLbVm functionality.
 | |
|         # 5. Stop all the VMs configured with InternalLbVm, verify that the InternalLbVm gets destroyed in the Internal
 | |
|         #    tier.
 | |
|         # 6. Start all the VMs configured with InternalLbVm, verify that the InternalLbVm gets deployed again in the
 | |
|         #    Internal tier.
 | |
|         # 7. Restart VPC (cleanup = false), verify that the VPC VR gets rebooted and this restart has no effect on the
 | |
|         #    InternalLbVm functionality.
 | |
|         # 7. Restart VPC (cleanup = true), verify that the VPC VR gets rebooted and this restart has no effect on the
 | |
|         #    InternalLbVm functionality.
 | |
|         # Verify the above restarts of VPC networks (tiers) by performing (wget) traffic tests within a VPC.
 | |
| 
 | |
|         # Creating VPC networks in the VPC, and deploying VMs
 | |
|         self.debug("Creating a VPC network with Internal LB service...")
 | |
|         internal_tier = self.create_Network(self.net_off_1, gateway='10.1.1.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         internal_vm = self.create_VM(internal_tier)
 | |
| 
 | |
|         self.debug("Creating a VPC network without Internal LB service...")
 | |
|         public_tier = self.create_Network(self.net_off_2, gateway='10.1.2.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         public_vm = self.create_VM(public_tier)
 | |
| 
 | |
|         # Creating Internal LB Rules in the Internal tiers
 | |
|         self.debug("Creating three Internal LB Rules (SSH & HTTP) using the same Load Balancing source IP Address...")
 | |
|         int_lb_rule_1 = self.create_Internal_LB_Rule(internal_tier, vm_array=[internal_vm])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active", vm_array=[internal_vm])
 | |
|         int_lb_rule_2 = self.create_Internal_LB_Rule(internal_tier,
 | |
|                                                      vm_array=[internal_vm],
 | |
|                                                      services=self.test_data["internal_lbrule_http"],
 | |
|                                                      source_ip=int_lb_rule_1.sourceipaddress
 | |
|                                                      )
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active", vm_array=[internal_vm])
 | |
| 
 | |
|         # Validating InternalLbVm deployment and state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Deploying more VMs in the Internal tier
 | |
|         self.debug("Deploying two more VMs in network - %s" % internal_tier.name)
 | |
|         internal_vm_1 = self.create_VM(internal_tier)
 | |
|         internal_vm_2 = self.create_VM(internal_tier)
 | |
| 
 | |
|         # Adding newly deployed VMs to the created Internal LB rules
 | |
|         self.debug("Adding two more virtual machines to the created Internal LB rules...")
 | |
|         int_lb_rule_1.assign(self.api_client, [internal_vm_1, internal_vm_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active",
 | |
|                                        vm_array=[internal_vm, internal_vm_1, internal_vm_2])
 | |
|         int_lb_rule_2.assign(self.api_client, [internal_vm_1, internal_vm_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active",
 | |
|                                        vm_array=[internal_vm, internal_vm_1, internal_vm_2])
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Adding Network ACL rules in the Internal tier
 | |
|         self.debug("Adding Network ACL rules to make the created Internal LB rules (SSH & HTTP) accessible...")
 | |
|         self.create_NetworkAclRule(self.test_data["ingress_rule"], internal_tier)
 | |
|         self.create_NetworkAclRule(self.test_data["http_rule"], internal_tier)
 | |
| 
 | |
|         # Creating Static NAT rule for the VM in the Public tier
 | |
|         public_ip = self.acquire_PublicIPAddress()
 | |
|         self.create_StaticNatRule_For_VM(public_vm, public_ip, public_tier)
 | |
| 
 | |
|         # Adding Network ACL rule in the Public tier
 | |
|         self.debug("Adding Network ACL rule to make the created NAT rule (SSH) accessible...")
 | |
|         self.create_NetworkAclRule(self.test_data["ingress_rule"], public_tier)
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
| 
 | |
|         # Restart Internal tier (cleanup = false)
 | |
|         # InternalLbVm gets destroyed and deployed again in the Internal tier
 | |
|         self.debug("Restarting the Internal tier without cleanup...")
 | |
|         Network.restart(internal_tier, self.api_client, cleanup=False)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         tries = 0
 | |
|         while tries < 10:
 | |
|             try:
 | |
|                 self.wget_from_vm_cmd(ssh_client,
 | |
|                                       int_lb_rule_1.sourceipaddress,
 | |
|                                       self.test_data["http_rule"]["publicport"]
 | |
|                                       )
 | |
|             except Exception as e:
 | |
|                 self.debug("Failed to wget file via the InternalLbVm after re-starting the Internal tier: %s" % e)
 | |
|                 self.debug("Waiting for the InternalLbVm in the Internal tier to be fully resolved for (wget) traffic "
 | |
|                            "test...")
 | |
|                 time.sleep(30)
 | |
|                 tries += 1
 | |
|                 continue
 | |
|             self.debug("Internal LB (wget) traffic test is successful after re-starting the Internal tier")
 | |
|             break
 | |
| 
 | |
|         # Restart Internal tier (cleanup = true)
 | |
|         # InternalLbVm gets destroyed and deployed again in the Internal tier
 | |
|         self.debug("Restarting the Internal tier with cleanup...")
 | |
|         Network.restart(internal_tier, self.api_client, cleanup=True)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         tries = 0
 | |
|         while tries < 10:
 | |
|             try:
 | |
|                 self.wget_from_vm_cmd(ssh_client,
 | |
|                                       int_lb_rule_1.sourceipaddress,
 | |
|                                       self.test_data["http_rule"]["publicport"]
 | |
|                                       )
 | |
|             except Exception as e:
 | |
|                 self.debug("Failed to wget file via the InternalLbVm after re-starting the Internal tier with cleanup: "
 | |
|                            "%s" % e)
 | |
|                 self.debug("Waiting for the InternalLbVm in the Internal tier to be fully resolved for (wget) traffic "
 | |
|                            "test...")
 | |
|                 time.sleep(30)
 | |
|                 tries += 1
 | |
|                 continue
 | |
|             self.debug("Internal LB (wget) traffic test is successful after re-starting the Internal tier with cleanup")
 | |
|             break
 | |
| 
 | |
|         # Restart Public tier (cleanup = false)
 | |
|         # This restart has no effect on the InternalLbVm functionality
 | |
|         self.debug("Restarting the Public tier without cleanup...")
 | |
|         Network.restart(public_tier, self.api_client, cleanup=False)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
| 
 | |
|         # Restart Public tier (cleanup = true)
 | |
|         # This restart has no effect on the InternalLbVm functionality
 | |
|         self.debug("Restarting the Public tier with cleanup...")
 | |
|         Network.restart(public_tier, self.api_client, cleanup=True)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
| 
 | |
|         # Stopping VMs in the Internal tier
 | |
|         # wget traffic test fails as all the VMs in the Internal tier are in stopped state
 | |
|         self.debug("Stopping all the VMs in the Internal tier...")
 | |
|         internal_vm.stop(self.api_client)
 | |
|         internal_vm_1.stop(self.api_client)
 | |
|         internal_vm_2.stop(self.api_client)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.wget_from_vm_cmd(ssh_client,
 | |
|                                   int_lb_rule_1.sourceipaddress,
 | |
|                                   self.test_data["http_rule"]["publicport"]
 | |
|                                   )
 | |
|         self.debug("Failed to wget file as all the VMs in the Internal tier are in stopped state")
 | |
| 
 | |
|         # Starting VMs in the Internal tier
 | |
|         # wget traffic test succeeds as all the VMs in the Internal tier are back in running state
 | |
|         self.debug("Starting all the VMs in the Internal tier...")
 | |
|         internal_vm.start(self.api_client)
 | |
|         internal_vm_1.start(self.api_client)
 | |
|         internal_vm_2.start(self.api_client)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         tries = 0
 | |
|         while tries < 10:
 | |
|             try:
 | |
|                 self.wget_from_vm_cmd(ssh_client,
 | |
|                                       int_lb_rule_1.sourceipaddress,
 | |
|                                       self.test_data["http_rule"]["publicport"]
 | |
|                                       )
 | |
|             except Exception as e:
 | |
|                 self.debug("Failed to wget file via the InternalLbVm after re-starting all the VMs in the Internal tier"
 | |
|                            ": %s" % e)
 | |
|                 self.debug("Waiting for the InternalLbVm and all the VMs in the Internal tier to be fully resolved for "
 | |
|                            "(wget) traffic test...")
 | |
|                 time.sleep(30)
 | |
|                 tries += 1
 | |
|                 continue
 | |
|             self.debug("Internal LB (wget) traffic test is successful after re-starting all the VMs in the Internal "
 | |
|                        "tier")
 | |
|             break
 | |
| 
 | |
|         # Restarting VPC (cleanup = false)
 | |
|         # VPC VR gets destroyed and deployed again in the VPC
 | |
|         # This restart has no effect on the InternalLbVm functionality
 | |
|         self.debug("Restarting the VPC without cleanup...")
 | |
|         self.restart_Vpc(self.vpc, cleanup=False)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
| 
 | |
|         # Restarting VPC (cleanup = true)
 | |
|         # VPC VR gets destroyed and deployed again in the VPC
 | |
|         # This restart has no effect on the InternalLbVm functionality
 | |
|         self.debug("Restarting the VPC with cleanup...")
 | |
|         self.restart_Vpc(self.vpc, cleanup=True)
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
| 
 | |
|     # tags=["advanced", "intervlan"]
 | |
|     @attr(tags=["TODO"], required_hardware="true")
 | |
|     def test_04_internallb_appliance_operations_traffic(self):
 | |
|         """Test VPC Network Internal LB functionality with InternalLbVm appliance operations by performing (wget)
 | |
|         traffic tests within a VPC
 | |
|         """
 | |
| 
 | |
|         # Repeat the tests in the testcase "test_02_internallb_rules_traffic" with InternalLbVm appliance operations:
 | |
|         # 1. Verify the InternalLbVm deployment by creating the Internal LB Rules when the VPC VR is in Stopped state,
 | |
|         #    VPC VR has no effect on the InternalLbVm functionality.
 | |
|         # 2. Stop the InternalLbVm when the VPC VR is in Stopped State
 | |
|         # 3. Start the InternalLbVm when the VPC VR is in Stopped state
 | |
|         # 4. Stop the InternalLbVm when the VPC VR is in Running State
 | |
|         # 5. Start the InternalLbVm when the VPC VR is in Running state
 | |
|         # 6. Force stop the InternalLbVm when the VPC VR is in Running State
 | |
|         # 7. Start the InternalLbVm when the VPC VR is in Running state
 | |
|         # Verify the above restarts of VPC networks by performing (wget) traffic tests within a VPC.
 | |
| 
 | |
|         # Creating VPC networks in the VPC, and deploying VMs
 | |
|         self.debug("Creating a VPC network with Internal LB service...")
 | |
|         internal_tier = self.create_Network(self.net_off_1, gateway='10.1.1.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         internal_vm = self.create_VM(internal_tier)
 | |
| 
 | |
|         self.debug("Creating a VPC network without Internal LB service...")
 | |
|         public_tier = self.create_Network(self.net_off_2, gateway='10.1.2.1')
 | |
| 
 | |
|         self.debug("Deploying a VM in the created VPC network...")
 | |
|         public_vm = self.create_VM(public_tier)
 | |
| 
 | |
|         # Stopping the VPC VR
 | |
|         # VPC VR has no effect on the InternalLbVm functionality
 | |
|         vpc_vr = self.get_Router(internal_tier)
 | |
|         Router.stop(self.api_client, id=vpc_vr.id)
 | |
| 
 | |
|         # Creating Internal LB Rules in the Internal tiers
 | |
|         self.debug("Creating three Internal LB Rules (SSH & HTTP) using the same Load Balancing source IP Address...")
 | |
|         int_lb_rule_1 = self.create_Internal_LB_Rule(internal_tier, vm_array=[internal_vm])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active", vm_array=[internal_vm])
 | |
|         int_lb_rule_2 = self.create_Internal_LB_Rule(internal_tier,
 | |
|                                                      vm_array=[internal_vm],
 | |
|                                                      services=self.test_data["internal_lbrule_http"],
 | |
|                                                      source_ip=int_lb_rule_1.sourceipaddress
 | |
|                                                      )
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active", vm_array=[internal_vm])
 | |
| 
 | |
|         # Validating InternalLbVm deployment and state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Deploying more VMs in the Internal tier
 | |
|         self.debug("Deploying two more VMs in network - %s" % internal_tier.name)
 | |
|         internal_vm_1 = self.create_VM(internal_tier)
 | |
|         internal_vm_2 = self.create_VM(internal_tier)
 | |
| 
 | |
|         # Adding newly deployed VMs to the created Internal LB rules
 | |
|         self.debug("Adding two more virtual machines to the created Internal LB rules...")
 | |
|         int_lb_rule_1.assign(self.api_client, [internal_vm_1, internal_vm_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_1, state="Active",
 | |
|                                        vm_array=[internal_vm, internal_vm_1, internal_vm_2])
 | |
|         int_lb_rule_2.assign(self.api_client, [internal_vm_1, internal_vm_2])
 | |
|         self.validate_Internal_LB_Rule(int_lb_rule_2, state="Active",
 | |
|                                        vm_array=[internal_vm, internal_vm_1, internal_vm_2])
 | |
| 
 | |
|         # Validating InternalLbVm state
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Adding Network ACL rules in the Internal tier
 | |
|         self.debug("Adding Network ACL rules to make the created Internal LB rules (SSH & HTTP) accessible...")
 | |
|         self.create_NetworkAclRule(self.test_data["ingress_rule"], internal_tier)
 | |
|         self.create_NetworkAclRule(self.test_data["http_rule"], internal_tier)
 | |
| 
 | |
|         # Creating Static NAT rule for the VM in the Public tier
 | |
|         public_ip = self.acquire_PublicIPAddress()
 | |
|         self.create_StaticNatRule_For_VM(public_vm, public_ip, public_tier)
 | |
| 
 | |
|         # Adding Network ACL rule in the Public tier
 | |
|         self.debug("Adding Network ACL rule to make the created NAT rule (SSH) accessible...")
 | |
|         self.create_NetworkAclRule(self.test_data["ingress_rule"], public_tier)
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         self.wget_from_vm_cmd(ssh_client,
 | |
|                               int_lb_rule_1.sourceipaddress,
 | |
|                               self.test_data["http_rule"]["publicport"]
 | |
|                               )
 | |
| 
 | |
|         # # Stopping the InternalLbVm when the VPC VR is in Stopped state
 | |
|         int_lb_vm = self.get_InternalLbVm(internal_tier, int_lb_rule_1.sourceipaddress)
 | |
|         self.stop_InternalLbVm(int_lb_vm)
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Stopped")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.wget_from_vm_cmd(ssh_client,
 | |
|                                   int_lb_rule_1.sourceipaddress,
 | |
|                                   self.test_data["http_rule"]["publicport"]
 | |
|                                   )
 | |
|         self.debug("Failed to wget file as the InternalLbVm is in stopped state")
 | |
| 
 | |
|         # # Starting the InternalLbVm when the VPC VR is in Stopped state
 | |
|         self.start_InternalLbVm(int_lb_vm)
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         tries = 0
 | |
|         while tries < 10:
 | |
|             try:
 | |
|                 self.wget_from_vm_cmd(ssh_client,
 | |
|                                       int_lb_rule_1.sourceipaddress,
 | |
|                                       self.test_data["http_rule"]["publicport"]
 | |
|                                       )
 | |
|             except Exception as e:
 | |
|                 self.debug("Failed to wget file via the InternalLbVm after re-starting the InternalLbVm appliance: %s"
 | |
|                            % e)
 | |
|                 self.debug("Waiting for the InternalLbVm to be fully resolved for (wget) traffic test...")
 | |
|                 time.sleep(30)
 | |
|                 tries += 1
 | |
|                 continue
 | |
|             self.debug("Internal LB (wget) traffic test is successful after re-starting the InternalLbVm appliance")
 | |
|             break
 | |
| 
 | |
|         # Starting the VPC VR
 | |
|         # VPC VR has no effect on the InternalLbVm functionality
 | |
|         Router.start(self.api_client, id=vpc_vr.id)
 | |
| 
 | |
|         # # Stopping the InternalLbVm when the VPC VR is in Running state
 | |
|         self.stop_InternalLbVm(int_lb_vm)
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Stopped")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.wget_from_vm_cmd(ssh_client,
 | |
|                                   int_lb_rule_1.sourceipaddress,
 | |
|                                   self.test_data["http_rule"]["publicport"]
 | |
|                                   )
 | |
|         self.debug("Failed to wget file as the InternalLbVm is in stopped state")
 | |
| 
 | |
|         # # Starting the InternalLbVm when the VPC VR is in Running state
 | |
|         self.start_InternalLbVm(int_lb_vm)
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         tries = 0
 | |
|         while tries < 10:
 | |
|             try:
 | |
|                 self.wget_from_vm_cmd(ssh_client,
 | |
|                                       int_lb_rule_1.sourceipaddress,
 | |
|                                       self.test_data["http_rule"]["publicport"]
 | |
|                                       )
 | |
|             except Exception as e:
 | |
|                 self.debug("Failed to wget file via the InternalLbVm after re-starting the InternalLbVm appliance: %s"
 | |
|                            % e)
 | |
|                 self.debug("Waiting for the InternalLbVm to be fully resolved for (wget) traffic test...")
 | |
|                 time.sleep(30)
 | |
|                 tries += 1
 | |
|                 continue
 | |
|             self.debug("Internal LB (wget) traffic test is successful after re-starting the InternalLbVm appliance")
 | |
|             break
 | |
| 
 | |
|         # # Force Stopping the InternalLbVm when the VPC VR is in Running state
 | |
|         self.stop_InternalLbVm(int_lb_vm, force=True)
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Stopped")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         with self.assertRaises(Exception):
 | |
|             self.wget_from_vm_cmd(ssh_client,
 | |
|                                   int_lb_rule_1.sourceipaddress,
 | |
|                                   self.test_data["http_rule"]["publicport"]
 | |
|                                   )
 | |
|         self.debug("Failed to wget file as the InternalLbVm is in stopped state")
 | |
| 
 | |
|         # # Starting the InternalLbVm when the VPC VR is in Running state
 | |
|         self.start_InternalLbVm(int_lb_vm)
 | |
|         self.check_InternalLbVm_state(internal_tier, int_lb_rule_1.sourceipaddress, state="Running")
 | |
| 
 | |
|         # Internal LB (wget) traffic test
 | |
|         ssh_client = self.ssh_into_VM(public_vm, public_ip)
 | |
|         tries = 0
 | |
|         while tries < 10:
 | |
|             try:
 | |
|                 self.wget_from_vm_cmd(ssh_client,
 | |
|                                       int_lb_rule_1.sourceipaddress,
 | |
|                                       self.test_data["http_rule"]["publicport"]
 | |
|                                       )
 | |
|             except Exception as e:
 | |
|                 self.debug("Failed to wget file via the InternalLbVm after re-starting the InternalLbVm appliance: %s"
 | |
|                            % e)
 | |
|                 self.debug("Waiting for the InternalLbVm to be fully resolved for (wget) traffic test...")
 | |
|                 time.sleep(30)
 | |
|                 tries += 1
 | |
|                 continue
 | |
|             self.debug("Internal LB (wget) traffic test is successful after re-starting the InternalLbVm appliance")
 | |
|             break
 |