def test_add_static_nat_rule(self, value): """ Add secondary IP to NIC of a VM""" # Steps: # 1. Create Account and create network in it (isoalted/ shared/ vpc) # 2. Deploy a VM in this network and account # 3. Add 2 secondary IPs to the default nic of VM # 4. Acquire public IP, open firewall for it, and # create static NAT rule for this public IP to the 1st secondary IP # 5. Repeat step 4 for another public IP # 6. Repeat step 4 for 2nd secondary IP # 7. Repeat step 4 for invalid secondary IP # 8. Try to remove 1st secondary IP (with active static nat rule) # Validations: # 1. Step 4 should succeed # 2. Step 5 should succeed # 3. Step 6 should succeed # 4. Step 7 should fail # 5. Step 8 should succeed self.account = Account.create(self.apiclient,self.services["account"],domainid=self.domain.id) self.cleanup.append(self.account) network = createNetwork(self, value) try: virtual_machine = VirtualMachine.create(self.apiclient,self.services["virtual_machine"], networkids=[network.id],serviceofferingid=self.service_offering.id, accountid=self.account.name,domainid=self.account.domainid) except Exception as e: self.fail("vm creation failed: %s" % e) try: ipaddress_1 = NIC.addIp(self.apiclient, id=virtual_machine.nic[0].id) except Exception as e: self.fail("Failed while adding secondary IP to NIC of vm %s" % virtual_machine.id) try: ipaddress_2 = NIC.addIp(self.apiclient, id=virtual_machine.nic[0].id) except Exception as e: self.fail("Failed while adding secondary IP to NIC of vm %s" % virtual_machine.id) self.assertEqual(createNetworkRules(self, virtual_machine, network, ipaddress_1.ipaddress, value, ruletype="staticnat"), PASS, "Failure in creating NAT rule") self.assertEqual(createNetworkRules(self, virtual_machine, network, ipaddress_1.ipaddress, value, ruletype="staticnat"), FAIL, "Failure in creating NAT rule") self.assertEqual(createNetworkRules(self, virtual_machine, network, ipaddress_2.ipaddress, value, ruletype="staticnat"), PASS, "Failure in creating NAT rule") self.assertEqual(createNetworkRules(self, virtual_machine, network, "255.255.255.300", value, ruletype="staticnat"), FAIL, "Failure in NAT rule creation") try: NIC.removeIp(self.apiclient, ipaddress_1.id) self.fail("Ip address should not get removed when active static NAT rule is defined for it") except Exception as e: self.debug("Exception while removing secondary ip address as expected because static nat rule is present for it") return
def test_operations_non_root_admin_api_client(self, value): """Test basic operations using non root admin apii client""" # Steps: # 1. Create Domain and Account in it # 2. Create network in it (isoalted/ shared/ vpc) # 3. Create User API client of this account # 4. Deploy a VM in this network and account # 5. Add secondary IP to the default nic of VM using non root admin api client # 6. List secondary IPs using non root admin api client # 7. Remove secondary IP using non root admin api client # Validations: # 1. All the operations should be successful child_domain = Domain.create(self.apiclient,services=self.services["domain"], parentdomainid=self.domain.id) self.account = Account.create(self.apiclient,self.services["account"],domainid=child_domain.id) self.cleanup.append(self.account) self.cleanup.append(child_domain) apiclient = self.testClient.createUserApiClient(UserName=self.account.name, DomainName=self.account.domain) if(shouldTestBeSkipped(networkType=value, zoneType=self.mode)): self.skipTest("Skipping test as %s network is not supported in basic zone" % value) network = createNetwork(self, value) try: virtual_machine = VirtualMachine.create(self.apiclient,self.services["virtual_machine"], networkids=[network.id],serviceofferingid=self.service_offering.id, accountid=self.account.name,domainid=self.account.domainid) except Exception as e: self.fail("vm creation failed: %s" % e) try: ipaddress_1 = NIC.addIp(apiclient, id=virtual_machine.nic[0].id) except Exception as e: self.fail("Failed while adding secondary IP to NIC of vm %s" % virtual_machine.id) try: NIC.list(apiclient, virtualmachineid=virtual_machine.id) except Exception as e: self.fail("Listing NICs for virtual machine %s failed with Exception %s" % (virtual_machine.id, e)) try: NIC.list(apiclient, virtualmachineid=virtual_machine.id, nicid=virtual_machine.nic[0].id) except Exception as e: self.fail("Listing NICs for virtual machine %s and nic id %s failed with Exception %s" % (virtual_machine.id, virtual_machine.nic[0].id, e)) try: NIC.removeIp(apiclient, ipaddressid=ipaddress_1.id) except Exception as e: self.fail("Removing seondary IP %s from NIC failed as expected with Exception %s" % (ipaddress_1.id,e)) return
def test_remove_invalid_ip(self): """ Remove invalid ip""" # Steps: # 1. Try to remove secondary ip without passing ip address id # Validations: # 1. Step 1 should fail try: NIC.removeIp(self.apiclient, ipaddressid="") self.fail("Removing IP address without passing IP succeeded, it should have failed") except Exception as e: self.debug("Removing IP from NIC without passing ipaddressid failed as expected with Exception %s" % e) return
def test_remove_ip_from_nic(self, value): """ Remove secondary IP from NIC of a VM""" # Steps: # 1. Create Account and create network in it (isoalted/ shared/ vpc) # 2. Deploy a VM in this network and account # 3. Add secondary IP to the default nic of VM # 4. Remove the secondary IP # 5. Try to remove secondary ip by giving incorrect ipaddress id # Validations: # 1. Step 4 should succeed # 2. Step 5 should fail self.account = Account.create(self.apiclient,self.services["account"],domainid=self.domain.id) self.cleanup.append(self.account) if(shouldTestBeSkipped(networkType=value, zoneType=self.mode)): self.skipTest("Skipping test as %s network is not supported in basic zone" % value) network = createNetwork(self, value) try: virtual_machine = VirtualMachine.create(self.apiclient,self.services["virtual_machine"], networkids=[network.id],serviceofferingid=self.service_offering.id, accountid=self.account.name,domainid=self.account.domainid) except Exception as e: self.fail("vm creation failed: %s" % e) try: ipaddress_1 = NIC.addIp(self.apiclient, id=virtual_machine.nic[0].id) except Exception as e: self.fail("Failed while adding secondary IP to NIC of vm %s" % virtual_machine.id) try: NIC.removeIp(self.apiclient, ipaddressid=ipaddress_1.id) except Exception as e: self.fail("Removing seondary IP %s from NIC failed as expected with Exception %s" % (ipaddress_1.id,e)) try: NIC.removeIp(self.apiclient, ipaddressid=(ipaddress_1.id + random_gen())) self.fail("Removing invalid IP address, it should have failed") except Exception as e: self.debug("Removing invalid IP failed as expected with Exception %s" % e) return
def test_delete_PF_nat_rule(self, value): """ Add secondary IP to NIC of a VM""" # Steps: # 1. Create Account and create network in it (isoalted/ shared/ vpc) # 2. Deploy a VM in this network and account # 3. Add secondary IP to the default nic of VM # 4. Acquire public IP, open firewall for it, and # create NAT rule for this public IP to the 1st secondary IP # 5. Try to delete secondary IP when NAT rule exists for it # 6. Delete firewall rule and NAT rule # Validations: # 1. Step 5 should fail # 2. Step 6 should succeed self.account = Account.create(self.apiclient,self.services["account"],domainid=self.domain.id) self.cleanup.append(self.account) network = createNetwork(self, value) firewallrule = None try: virtual_machine = VirtualMachine.create(self.apiclient,self.services["virtual_machine"], networkids=[network.id],serviceofferingid=self.service_offering.id, accountid=self.account.name,domainid=self.account.domainid) except Exception as e: self.fail("vm creation failed: %s" % e) try: ipaddress_1 = NIC.addIp(self.apiclient, id=virtual_machine.nic[0].id) except Exception as e: self.fail("Failed while adding secondary IP to NIC of vm %s" % virtual_machine.id) public_ip = PublicIPAddress.create(self.api_client,accountid=self.account.name, zoneid=self.zone.id,domainid=self.account.domainid, networkid=network.id, vpcid = network.vpcid if value == VPC_NETWORK else None) if value != VPC_NETWORK: firewallrule = FireWallRule.create(self.apiclient,ipaddressid=public_ip.ipaddress.id, protocol='TCP', cidrlist=[self.services["fwrule"]["cidr"]], startport=self.services["fwrule"]["startport"],endport=self.services["fwrule"]["endport"]) # Create NAT rule natrule = NATRule.create(self.api_client, virtual_machine, self.services["natrule"],ipaddressid=public_ip.ipaddress.id, networkid=network.id, vmguestip = ipaddress_1.ipaddress) try: NIC.removeIp(self.apiclient, ipaddressid=ipaddress_1.id) self.fail("Removing secondary IP succeeded while it had active NAT rule on it, should have failed") except Exception as e: self.debug("Removing secondary IP with active NAT rule failed as expected") if firewallrule: try: firewallrule.delete(self.apiclient) except Exception as e: self.fail("Exception while deleting firewall rule %s: %s" % (firewallrule.id, e)) try: natrule.delete(self.apiclient) except Exception as e: self.fail("Exception while deleting nat rule %s: %s" % (natrule.id, e)) return