def stop_master_router(self, vpc): self.logger.debug("Stopping Master Router of VPC '%s'...", vpc.name) routers = list_routers(self.api_client, domainid=self.domain.id, account=self.account.name, vpcid=vpc.id) for router in routers: if router.redundantstate == 'MASTER': cmd = stopRouter.stopRouterCmd() cmd.id = router.id # This will not fail-over gracefully and cause a ~3.6sec downtime # cmd.forced = 'true' self.api_client.stopRouter(cmd) break for router in routers: if router.state == 'Running': hosts = list_hosts(self.api_client, zoneid=router.zoneid, type='Routing', state='Up', id=router.hostid) self.assertTrue(isinstance(hosts, list)) host = next(iter(hosts or []), None) try: host.user, host.passwd = get_host_credentials(self.config, host.name) get_process_status(host.ipaddress, 22, host.user, host.passwd, router.linklocalip, "sh /opt/cosmic/router/scripts/checkrouter.sh ") except KeyError as e: raise Exception("Exception: %s" % e) self.logger.debug("Master Router of VPC '%s' stopped", vpc.name)
def test_07_stop_router(self): """Test stop router """ # Validate the following # 1. listRouter should report the router for the account as stopped list_router_response = list_routers(self.apiclient, account=self.account.name, domainid=self.account.domainid) self.assertEqual(isinstance(list_router_response, list), True, "Check list response returns a valid list") router = list_router_response[0] self.debug("Stopping the router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) # List routers to check state of router router_response = list_routers(self.apiclient, id=router.id) self.assertEqual(isinstance(router_response, list), True, "Check list response returns a valid list") # List router should have router in stopped state self.assertEqual(router_response[0].state, 'Stopped', "Check list router response for router state") return
def test_04_change_service_offerring_vpc(self): """ Tests to change service offering of the Router after creating a vpc """ # Validate the following # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Change the service offerings of the VPC Virtual Router which is # created as a result of VPC creation. self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) routers = Router.list( self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True ) self.assertEqual( isinstance(routers, list), True, "List Routers should return a valid list" ) # Stop the router router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) service_offering = ServiceOffering.create( self.api_client, self.services["service_offering_new"] ) self.debug("Changing service offering for the Router %s" % router.id) try: router = Router.change_service_offering(self.api_client, router.id, service_offering.id ) except: self.fail("Changing service offering failed") self.debug("Router %s" % router) routers = Router.list( self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True ) router = routers[0] self.assertEqual( router.serviceofferingid, service_offering.id, "Changing service offering failed as id is %s and expected" "is %s" % (router.serviceofferingid, service_offering.id) ) return
def test_04_chg_srv_off_router_after_addition_of_one_guest_network(self): """ Test to change service offering of router after addition of one guest network """ # Validations # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Add network1(10.1.1.1/24) to this VPC. # 3. Deploy vm1,vm2 and vm3 such that they are part of network1. # 4. Create a PF /Static Nat/LB rule for vms in network1. # 5. Create ingress network ACL for allowing all the above rules from a public ip range on network1. # 6. Create egress network ACL for network1 to access google.com. # 7. Create a private gateway for this VPC and add a static route to this gateway. # 8. Create a VPN gateway for this VPC and add a static route to this gateway. # 9. Make sure that all the PF,LB and Static NAT rules work as expected. # 10. Make sure that we are able to access google.com from all the user Vms. # 11. Make sure that the newly added private gateway's and VPN # gateway's static routes work as expected self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) self.assertEqual( isinstance(self.gateways, list), True, "List private gateways should return a valid response") self.assertEqual(isinstance(self.static_routes, list), True, "List static route should return a valid response") routers = Router.list(self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True) self.assertEqual(isinstance(routers, list), True, "List Routers should return a valid list") # Stop the router router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) service_offering = ServiceOffering.create( self.api_client, self.services["service_offering_new"]) self.debug("Changing service offering for the Router %s" % router.id) try: router = Router.change_service_offering(self.api_client, router.id, service_offering.id) except: self.fail("Changing service offering failed") self.debug("Router %s" % router) routers = Router.list(self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True) router = routers[0] self.assertEqual( router.serviceofferingid, service_offering.id, "Changing service offering failed as id is %s and expected" "is %s" % (router.serviceofferingid, service_offering.id)) return
def test_01_stop_start_router_after_creating_vpc(self): """ Test to stop and start router after creation of VPC """ # Validate following: # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Stop the VPC Virtual Router which is created as a result of VPC creation. # 3. Start the Stopped VPC Virtual Router self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) # Stop the VPC Router routers = Router.list(self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True) self.assertEqual(isinstance(routers, list), True, "List Routers should return a valid list") router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) # List routers to check state of router router_response = list_routers(self.api_client, id=router.id) self.assertEqual(isinstance(router_response, list), True, "Check list response returns a valid list") # List router should have router in stopped state self.assertEqual(router_response[0].state, 'Stopped', "Check list router response for router state") self.debug("Stopped the router with ID: %s" % router.id) # Start The Router self.debug("Starting the router with ID: %s" % router.id) cmd = startRouter.startRouterCmd() cmd.id = router.id self.api_client.startRouter(cmd) # List routers to check state of router router_response = list_routers(self.api_client, id=router.id) self.assertEqual(isinstance(router_response, list), True, "Check list response returns a valid list") # List router should have router in running state self.assertEqual(router_response[0].state, 'Running', "Check list router response for router state") self.debug("Started the router with ID: %s" % router.id) return
def test_04_change_service_offerring_vpc(self): """ Tests to change service offering of the Router after creating a vpc """ # Validate the following # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Change the service offerings of the VPC Virtual Router which is # created as a result of VPC creation. self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) routers = Router.list(self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True) self.assertEqual(isinstance(routers, list), True, "List Routers should return a valid list") # Stop the router router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) service_offering = ServiceOffering.create( self.api_client, self.services["service_offering_new"]) self.debug("Changing service offering for the Router %s" % router.id) try: router = Router.change_service_offering(self.api_client, router.id, service_offering.id) except: self.fail("Changing service offering failed") self.debug("Router %s" % router) routers = Router.list(self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True) router = routers[0] self.assertEqual( router.serviceofferingid, service_offering.id, "Changing service offering failed as id is %s and expected" "is %s" % (router.serviceofferingid, service_offering.id)) return
def stop_VPC_VRouter(self): router = self.get_Router_For_VPC() self.debug("Stopping router ID: %s" % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") router = routers[0] self.assertEqual(router.state, 'Stopped', "Check list router response for router state") return router
def test_07_stop_router(self): """Test stop router """ # Validate the following # 1. listRouter should report the router for the account as stopped list_router_response = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid ) self.assertEqual( isinstance(list_router_response, list), True, "Check list response returns a valid list" ) router = list_router_response[0] self.debug("Stopping the router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) # List routers to check state of router router_response = list_routers( self.apiclient, id=router.id ) self.assertEqual( isinstance(router_response, list), True, "Check list response returns a valid list" ) # List router should have router in stopped state self.assertEqual( router_response[0].state, 'Stopped', "Check list router response for router state" ) return
def stop_VPC_VRouter(self): router = self.get_Router_For_VPC() self.debug("Stopping router ID: %s" % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers(self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual(router.state, 'Stopped', "Check list router response for router state" ) return router
def test_01_stop_start_router_after_creating_vpc(self): """ Test to stop and start router after creation of VPC """ # Validate following: # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Stop the VPC Virtual Router which is created as a result of VPC creation. # 3. Start the Stopped VPC Virtual Router self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) # Stop the VPC Router routers = Router.list( self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True ) self.assertEqual( isinstance(routers, list), True, "List Routers should return a valid list" ) router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) # List routers to check state of router router_response = list_routers( self.api_client, id=router.id ) self.assertEqual( isinstance(router_response, list), True, "Check list response returns a valid list" ) # List router should have router in stopped state self.assertEqual( router_response[0].state, 'Stopped', "Check list router response for router state" ) self.debug("Stopped the router with ID: %s" % router.id) # Start The Router self.debug("Starting the router with ID: %s" % router.id) cmd = startRouter.startRouterCmd() cmd.id = router.id self.api_client.startRouter(cmd) # List routers to check state of router router_response = list_routers( self.api_client, id=router.id ) self.assertEqual( isinstance(router_response, list), True, "Check list response returns a valid list" ) # List router should have router in running state self.assertEqual( router_response[0].state, 'Running', "Check list router response for router state" ) self.debug("Started the router with ID: %s" % router.id) return
def test_01_start_stop_router_after_addition_of_one_guest_network(self): """ Test start/stop of router after addition of one guest network """ # Validations # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Add network1(10.1.1.1/24) to this VPC. # 3. Deploy vm1,vm2 and vm3 such that they are part of network1. # 4. Create a PF /Static Nat/LB rule for vms in network1. # 5. Create ingress network ACL for allowing all the above rules from a public ip range on network1. # 6. Create egress network ACL for network1 to access google.com. # 7. Create a private gateway for this VPC and add a static route to this gateway. # 8. Create a VPN gateway for this VPC and add a static route to this gateway. # 9. Make sure that all the PF,LB and Static NAT rules work as expected. # 10. Make sure that we are able to access google.com from all the user Vms. # 11. Make sure that the newly added private gateway's and VPN # gateway's static routes work as expected self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) self.assertEqual( isinstance(self.gateways, list), True, "List private gateways should return a valid response") self.assertEqual(isinstance(self.static_routes, list), True, "List static route should return a valid response") # Stop the VPC Router routers = Router.list(self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True) self.assertEqual(isinstance(routers, list), True, "List Routers should return a valid list") router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) # List routers to check state of router router_response = list_routers(self.api_client, id=router.id) self.assertEqual(isinstance(router_response, list), True, "Check list response returns a valid list") # List router should have router in stopped state self.assertEqual(router_response[0].state, 'Stopped', "Check list router response for router state") self.debug("Stopped the router with ID: %s" % router.id) # Start The Router self.debug("Starting the router with ID: %s" % router.id) cmd = startRouter.startRouterCmd() cmd.id = router.id self.api_client.startRouter(cmd) # List routers to check state of router router_response = list_routers(self.api_client, id=router.id) self.assertEqual(isinstance(router_response, list), True, "Check list response returns a valid list") # List router should have router in running state self.assertEqual(router_response[0].state, 'Running', "Check list router response for router state") self.debug("Started the router with ID: %s" % router.id) return
def stop_router(self, router): self.logger.debug('Stopping router') cmd = stopRouter.stopRouterCmd() cmd.id = router.id cmd.forced = "true" self.apiclient.stopRouter(cmd)
def test_01_start_stop_router_after_addition_of_one_guest_network(self): """ Test start/stop of router after addition of one guest network """ # Validations # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Add network1(10.1.1.1/24) to this VPC. # 3. Deploy vm1,vm2 and vm3 such that they are part of network1. # 4. Create a PF /Static Nat/LB rule for vms in network1. # 5. Create ingress network ACL for allowing all the above rules from a public ip range on network1. # 6. Create egress network ACL for network1 to access google.com. # 7. Create a private gateway for this VPC and add a static route to this gateway. # 8. Create a VPN gateway for this VPC and add a static route to this gateway. # 9. Make sure that all the PF,LB and Static NAT rules work as expected. # 10. Make sure that we are able to access google.com from all the user Vms. # 11. Make sure that the newly added private gateway's and VPN # gateway's static routes work as expected self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) self.assertEqual( isinstance(self.gateways, list), True, "List private gateways should return a valid response" ) self.assertEqual( isinstance(self.static_routes, list), True, "List static route should return a valid response" ) # Stop the VPC Router routers = Router.list( self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True ) self.assertEqual( isinstance(routers, list), True, "List Routers should return a valid list" ) router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) # List routers to check state of router router_response = list_routers( self.api_client, id=router.id ) self.assertEqual( isinstance(router_response, list), True, "Check list response returns a valid list" ) # List router should have router in stopped state self.assertEqual( router_response[0].state, 'Stopped', "Check list router response for router state" ) self.debug("Stopped the router with ID: %s" % router.id) # Start The Router self.debug("Starting the router with ID: %s" % router.id) cmd = startRouter.startRouterCmd() cmd.id = router.id self.api_client.startRouter(cmd) # List routers to check state of router router_response = list_routers( self.api_client, id=router.id ) self.assertEqual( isinstance(router_response, list), True, "Check list response returns a valid list" ) # List router should have router in running state self.assertEqual( router_response[0].state, 'Running', "Check list router response for router state" ) self.debug("Started the router with ID: %s" % router.id) return
def stop_network_router(self, router): self.debug("Stopping Router with ID: %s" % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd)
def test_01_RouterStopCreateLB(self): """Test router stop create Load balancing """ # validate the following # 1. listLoadBalancerRules (publicipid=ipaddressid of source NAT) # 2. rule should be for port 22 as applied and # should be in state=Active # 3. ssh access should be allowed to the userVMs over the source NAT IP # and port 22 # Get router details associated for that account routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) self.assertNotEqual( len(routers), 0, "Check list router response" ) router = routers[0] self.debug("Stopping router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Stopped', "Check list router response for router state" ) public_ips = list_publicIP( self.apiclient, account=self.account.name, domainid=self.account.domainid ) self.assertEqual( isinstance(public_ips, list), True, "Check for list public IPs response return valid data" ) public_ip = public_ips[0] # Open up firewall port for SSH FireWallRule.create( self.apiclient, ipaddressid=public_ip.id, protocol=self.services["lbrule"]["protocol"], cidrlist=['0.0.0.0/0'], startport=self.services["lbrule"]["publicport"], endport=self.services["lbrule"]["publicport"] ) self.debug("Creating LB rule for public IP: %s" % public_ip.id) # Create Load Balancer rule and assign VMs to rule lb_rule = LoadBalancerRule.create( self.apiclient, self.services["lbrule"], public_ip.id, accountid=self.account.name ) self.debug("Assigning VM %s to LB rule: %s" % ( self.vm_1.id, lb_rule.id )) lb_rule.assign(self.apiclient, [self.vm_1]) # Start the router cmd = startRouter.startRouterCmd() cmd.id = router.id self.apiclient.startRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Running', "Check list router response for router state" ) # After router start, LB RUle should be in Active state lb_rules = list_lb_rules( self.apiclient, id=lb_rule.id ) self.assertEqual( isinstance(lb_rules, list), True, "Check for list LB rules response return valid data" ) self.assertEqual( lb_rules[0].state, 'Active', "Check list load balancing rules" ) self.assertEqual( lb_rules[0].publicport, str(self.services["lbrule"]["publicport"]), "Check list load balancing rules" ) try: self.debug("SSH into VM with IP: %s" % public_ip.ipaddress) self.vm_1.ssh_port = self.services["lbrule"]["publicport"] self.vm_1.get_ssh_client(public_ip.ipaddress) except Exception as e: self.fail( "SSH Access failed for %s: %s" % (self.vm_1.ipaddress, e) ) return
def test_01_CreatePFOnStoppedRouter(self): """Stop existing router, add a PF rule and check we can access the VM """ # Get router details associated for that account routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) self.assertNotEqual( len(routers), 0, "Check list router response" ) router = routers[0] self.logger.debug("Stopping router ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Stopped', "Check list router response for router state" ) public_ips = list_publicIP( self.apiclient, account=self.account.name, domainid=self.account.domainid, zoneid=self.zone.id ) self.assertEqual( isinstance(public_ips, list), True, "Check for list public IPs response return valid data" ) public_ip = public_ips[0] # Open up firewall port for SSH FireWallRule.create( self.apiclient, ipaddressid=public_ip.id, protocol=self.services["natrule"]["protocol"], cidrlist=['0.0.0.0/0'], startport=self.services["natrule"]["publicport"], endport=self.services["natrule"]["publicport"] ) self.logger.debug("Creating NAT rule for VM ID: %s" % self.vm_1.id) # Create NAT rule nat_rule = NATRule.create( self.apiclient, self.vm_1, self.services["natrule"], public_ip.id ) self.logger.debug("Starting router ID: %s" % router.id) # Start the router cmd = startRouter.startRouterCmd() cmd.id = router.id self.apiclient.startRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, zoneid=self.zone.id ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Running', "Check list router response for router state" ) # NAT Rule should be in Active state after router start nat_rules = list_nat_rules( self.apiclient, id=nat_rule.id ) self.assertEqual( isinstance(nat_rules, list), True, "Check for list NAT rules response return valid data" ) self.assertEqual( nat_rules[0].state, 'Active', "Check list port forwarding rules" ) try: self.logger.debug("SSH into VM with ID: %s" % nat_rule.ipaddress) self.vm_1.get_ssh_client( ipaddress=nat_rule.ipaddress, port=self.services["natrule"]["publicport"]) except Exception as e: self.fail( "SSH Access failed for %s: %s" % (nat_rule.ipaddress, e) ) return
def test_01_RouterStopCreateLB(self): """Test router stop create Load balancing """ # validate the following # 1. listLoadBalancerRules (publicipid=ipaddressid of source NAT) # 2. rule should be for port 22 as applied and # should be in state=Active # 3. ssh access should be allowed to the userVMs over the source NAT IP # and port 22 # Get router details associated for that account routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") self.assertNotEqual(len(routers), 0, "Check list router response") router = routers[0] self.debug("Stopping router with ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") router = routers[0] self.assertEqual(router.state, 'Stopped', "Check list router response for router state") public_ips = list_publicIP(self.apiclient, account=self.account.name, domainid=self.account.domainid) self.assertEqual( isinstance(public_ips, list), True, "Check for list public IPs response return valid data") public_ip = public_ips[0] # Open up firewall port for SSH FireWallRule.create(self.apiclient, ipaddressid=public_ip.id, protocol=self.services["lbrule"]["protocol"], cidrlist=['0.0.0.0/0'], startport=self.services["lbrule"]["publicport"], endport=self.services["lbrule"]["publicport"]) self.debug("Creating LB rule for public IP: %s" % public_ip.id) # Create Load Balancer rule and assign VMs to rule lb_rule = LoadBalancerRule.create(self.apiclient, self.services["lbrule"], public_ip.id, accountid=self.account.name) self.debug("Assigning VM %s to LB rule: %s" % (self.vm_1.id, lb_rule.id)) lb_rule.assign(self.apiclient, [self.vm_1]) # Start the router cmd = startRouter.startRouterCmd() cmd.id = router.id self.apiclient.startRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") router = routers[0] self.assertEqual(router.state, 'Running', "Check list router response for router state") # After router start, LB RUle should be in Active state lb_rules = list_lb_rules(self.apiclient, id=lb_rule.id) self.assertEqual(isinstance(lb_rules, list), True, "Check for list LB rules response return valid data") self.assertEqual(lb_rules[0].state, 'Active', "Check list load balancing rules") self.assertEqual(lb_rules[0].publicport, str(self.services["lbrule"]["publicport"]), "Check list load balancing rules") try: self.debug("SSH into VM with IP: %s" % public_ip.ipaddress) self.vm_1.ssh_port = self.services["lbrule"]["publicport"] self.vm_1.get_ssh_client(public_ip.ipaddress) except Exception as e: self.fail("SSH Access failed for %s: %s" % (self.vm_1.ipaddress, e)) return
def test_04_chg_srv_off_router_after_addition_of_one_guest_network(self): """ Test to change service offering of router after addition of one guest network """ # Validations # 1. Create a VPC with cidr - 10.1.1.1/16 # 2. Add network1(10.1.1.1/24) to this VPC. # 3. Deploy vm1,vm2 and vm3 such that they are part of network1. # 4. Create a PF /Static Nat/LB rule for vms in network1. # 5. Create ingress network ACL for allowing all the above rules from a public ip range on network1. # 6. Create egress network ACL for network1 to access google.com. # 7. Create a private gateway for this VPC and add a static route to this gateway. # 8. Create a VPN gateway for this VPC and add a static route to this gateway. # 9. Make sure that all the PF,LB and Static NAT rules work as expected. # 10. Make sure that we are able to access google.com from all the user Vms. # 11. Make sure that the newly added private gateway's and VPN # gateway's static routes work as expected self.validate_vpc_offering(self.vpc_off) self.validate_vpc_network(self.vpc) self.assertEqual( isinstance(self.gateways, list), True, "List private gateways should return a valid response" ) self.assertEqual( isinstance(self.static_routes, list), True, "List static route should return a valid response" ) routers = Router.list( self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True ) self.assertEqual( isinstance(routers, list), True, "List Routers should return a valid list" ) # Stop the router router = routers[0] self.debug("Stopping the router with ID: %s" % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.api_client.stopRouter(cmd) service_offering = ServiceOffering.create( self.api_client, self.services["service_offering_new"] ) self.debug("Changing service offering for the Router %s" % router.id) try: router = Router.change_service_offering(self.api_client, router.id, service_offering.id ) except: self.fail("Changing service offering failed") self.debug("Router %s" % router) routers = Router.list( self.api_client, account=self.account.name, domainid=self.account.domainid, listall=True ) router = routers[0] self.assertEqual( router.serviceofferingid, service_offering.id, "Changing service offering failed as id is %s and expected" "is %s" % (router.serviceofferingid, service_offering.id) ) return
def stop_router(self, router): self.logger.debug('Stopping router %s' % router.id) cmd = stopRouter.stopRouterCmd() cmd.id = router.id cmd.forced = "true" self.apiclient.stopRouter(cmd)
def stop_router(self, router): self.logger.debug('Stopping router') cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd)
def test_01_RouterStopCreateFW(self): """Test router stop create Firewall rule """ # validate the following # 1. 1. listFirewallRules (filter by ipaddressid of sourcenat) # 2. rule should be for ports 1-600 and in state=Active # (optional backend) # 3. verify on router using iptables -t nat -nvx if rules are applied # Get the router details associated with account routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) self.assertNotEqual( len(routers), 0, "Check list router response" ) router = routers[0] self.debug("Stopping the router: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Stopped', "Check list router response for router state" ) public_ips = list_publicIP( self.apiclient, account=self.account.name, domainid=self.account.domainid ) self.assertEqual( isinstance(public_ips, list), True, "Check for list public IP response return valid data" ) public_ip = public_ips[0] # Create Firewall rule with configurations from settings file fw_rule = FireWallRule.create( self.apiclient, ipaddressid=public_ip.id, protocol='TCP', cidrlist=[self.services["fwrule"]["cidr"]], startport=self.services["fwrule"]["startport"], endport=self.services["fwrule"]["endport"] ) self.debug("Created firewall rule: %s" % fw_rule.id) self.debug("Starting the router: %s" % router.id) # Start the router cmd = startRouter.startRouterCmd() cmd.id = router.id self.apiclient.startRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Running', "Check list router response for router state" ) # After Router start, FW rule should be in Active state fw_rules = list_firewall_rules( self.apiclient, id=fw_rule.id, ) self.assertEqual( isinstance(fw_rules, list), True, "Check for list FW rules response return valid data" ) self.assertEqual( fw_rules[0].state, 'Active', "Check list load balancing rules" ) self.assertEqual( fw_rules[0].startport, self.services["fwrule"]["startport"], "Check start port of firewall rule" ) self.assertEqual( fw_rules[0].endport, self.services["fwrule"]["endport"], "Check end port of firewall rule" ) # For DNS and DHCP check 'dnsmasq' process status if (self.hypervisor.lower() == 'vmware' or self.hypervisor.lower() == 'hyperv'): result = get_process_status( self.apiclient.connection.mgtSvr, 22, self.apiclient.connection.user, self.apiclient.connection.passwd, router.linklocalip, 'iptables -t nat -L', hypervisor=self.hypervisor ) else: hosts = list_hosts( self.apiclient, id=router.hostid, ) self.assertEqual( isinstance(hosts, list), True, "Check for list hosts response return valid data" ) host = hosts[0] try: result = get_process_status( host.ipaddress, 22, self.hostConfig['username'], self.hostConfig['password'], router.linklocalip, 'iptables -t nat -L' ) except KeyError: self.skipTest( "Provide a marvin config file with host\ credentials to run %s" % self._testMethodName) self.debug("iptables -t nat -L: %s" % result) self.debug("Public IP: %s" % public_ip.ipaddress) res = str(result) self.assertEqual( res.count(str(public_ip.ipaddress)), 1, "Check public IP address" ) return
def test_01_RouterStopCreatePF(self): """Test router stop create port forwarding """ # validate the following # 1. wait for router to start, guest network to be implemented and # VM to report Running # 2. stopRouter for this account # 3. wait for listRouters to report Router as 'Stopped' # 4. listPublicIpAddresses account=user, domainid=1 - pick ipaddressid # 5. createPortForwardingRule (ipaddressid from step 5.) # a. for port 22 (ssh) for user VM deployed in step 1. # b. public port 22 , private port 22 # 6. startRouter stopped for this account # 7. wait for listRouters to show router as Running # Get router details associated for that account routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") self.assertNotEqual(len(routers), 0, "Check list router response") router = routers[0] self.debug("Stopping router ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") router = routers[0] self.assertEqual(router.state, 'Stopped', "Check list router response for router state") public_ips = list_publicIP(self.apiclient, account=self.account.name, domainid=self.account.domainid, zoneid=self.zone.id) self.assertEqual( isinstance(public_ips, list), True, "Check for list public IPs response return valid data") public_ip = public_ips[0] # Open up firewall port for SSH FireWallRule.create(self.apiclient, ipaddressid=public_ip.id, protocol=self.services["natrule"]["protocol"], cidrlist=['0.0.0.0/0'], startport=self.services["natrule"]["publicport"], endport=self.services["natrule"]["publicport"]) self.debug("Creating NAT rule for VM ID: %s" % self.vm_1.id) # Create NAT rule nat_rule = NATRule.create(self.apiclient, self.vm_1, self.services["natrule"], public_ip.id) self.debug("Starting router ID: %s" % router.id) # Start the router cmd = startRouter.startRouterCmd() cmd.id = router.id self.apiclient.startRouter(cmd) routers = list_routers(self.apiclient, account=self.account.name, domainid=self.account.domainid, zoneid=self.zone.id) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") router = routers[0] self.assertEqual(router.state, 'Running', "Check list router response for router state") # NAT Rule should be in Active state after router start nat_rules = list_nat_rules(self.apiclient, id=nat_rule.id) self.assertEqual( isinstance(nat_rules, list), True, "Check for list NAT rules response return valid data") self.assertEqual(nat_rules[0].state, 'Active', "Check list port forwarding rules") try: self.debug("SSH into VM with ID: %s" % nat_rule.ipaddress) self.vm_1.get_ssh_client( ipaddress=nat_rule.ipaddress, port=self.services["natrule"]["publicport"]) except Exception as e: self.fail("SSH Access failed for %s: %s" % (nat_rule.ipaddress, e)) return
def test_01_RouterStopCreatePF(self): """Test router stop create port forwarding """ # validate the following # 1. wait for router to start, guest network to be implemented and # VM to report Running # 2. stopRouter for this account # 3. wait for listRouters to report Router as 'Stopped' # 4. listPublicIpAddresses account=user, domainid=1 - pick ipaddressid # 5. createPortForwardingRule (ipaddressid from step 5.) # a. for port 22 (ssh) for user VM deployed in step 1. # b. public port 22 , private port 22 # 6. startRouter stopped for this account # 7. wait for listRouters to show router as Running # Get router details associated for that account routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) self.assertNotEqual( len(routers), 0, "Check list router response" ) router = routers[0] self.debug("Stopping router ID: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Stopped', "Check list router response for router state" ) public_ips = list_publicIP( self.apiclient, account=self.account.name, domainid=self.account.domainid, zoneid=self.zone.id ) self.assertEqual( isinstance(public_ips, list), True, "Check for list public IPs response return valid data" ) public_ip = public_ips[0] # Open up firewall port for SSH FireWallRule.create( self.apiclient, ipaddressid=public_ip.id, protocol=self.services["natrule"]["protocol"], cidrlist=['0.0.0.0/0'], startport=self.services["natrule"]["publicport"], endport=self.services["natrule"]["publicport"] ) self.debug("Creating NAT rule for VM ID: %s" % self.vm_1.id) # Create NAT rule nat_rule = NATRule.create( self.apiclient, self.vm_1, self.services["natrule"], public_ip.id ) self.debug("Starting router ID: %s" % router.id) # Start the router cmd = startRouter.startRouterCmd() cmd.id = router.id self.apiclient.startRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, zoneid=self.zone.id ) self.assertEqual( isinstance(routers, list), True, "Check for list routers response return valid data" ) router = routers[0] self.assertEqual( router.state, 'Running', "Check list router response for router state" ) # NAT Rule should be in Active state after router start nat_rules = list_nat_rules( self.apiclient, id=nat_rule.id ) self.assertEqual( isinstance(nat_rules, list), True, "Check for list NAT rules response return valid data" ) self.assertEqual( nat_rules[0].state, 'Active', "Check list port forwarding rules" ) try: self.debug("SSH into VM with ID: %s" % nat_rule.ipaddress) self.vm_1.get_ssh_client( ipaddress=nat_rule.ipaddress, port=self.services["natrule"]["publicport"]) except Exception as e: self.fail( "SSH Access failed for %s: %s" % (nat_rule.ipaddress, e) ) return
def test_01_RouterStopCreateFW(self): """Test router stop create Firewall rule """ # validate the following # 1. 1. listFirewallRules (filter by ipaddressid of sourcenat) # 2. rule should be for ports 1-600 and in state=Active # (optional backend) # 3. verify on router using iptables -t nat -nvx if rules are applied # Get the router details associated with account routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") self.assertNotEqual(len(routers), 0, "Check list router response") router = routers[0] self.debug("Stopping the router: %s" % router.id) # Stop the router cmd = stopRouter.stopRouterCmd() cmd.id = router.id self.apiclient.stopRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") router = routers[0] self.assertEqual(router.state, 'Stopped', "Check list router response for router state") public_ips = list_publicIP(self.apiclient, account=self.account.name, domainid=self.account.domainid) self.assertEqual( isinstance(public_ips, list), True, "Check for list public IP response return valid data") public_ip = public_ips[0] # Create Firewall rule with configurations from settings file fw_rule = FireWallRule.create( self.apiclient, ipaddressid=public_ip.id, protocol='TCP', cidrlist=[self.services["fwrule"]["cidr"]], startport=self.services["fwrule"]["startport"], endport=self.services["fwrule"]["endport"]) self.debug("Created firewall rule: %s" % fw_rule.id) self.debug("Starting the router: %s" % router.id) # Start the router cmd = startRouter.startRouterCmd() cmd.id = router.id self.apiclient.startRouter(cmd) routers = list_routers( self.apiclient, account=self.account.name, domainid=self.account.domainid, ) self.assertEqual(isinstance(routers, list), True, "Check for list routers response return valid data") router = routers[0] self.assertEqual(router.state, 'Running', "Check list router response for router state") # After Router start, FW rule should be in Active state fw_rules = list_firewall_rules( self.apiclient, id=fw_rule.id, ) self.assertEqual(isinstance(fw_rules, list), True, "Check for list FW rules response return valid data") self.assertEqual(fw_rules[0].state, 'Active', "Check list load balancing rules") self.assertEqual(fw_rules[0].startport, str(self.services["fwrule"]["startport"]), "Check start port of firewall rule") self.assertEqual(fw_rules[0].endport, str(self.services["fwrule"]["endport"]), "Check end port of firewall rule") # For DNS and DHCP check 'dnsmasq' process status if (self.hypervisor.lower() == 'vmware' or self.hypervisor.lower() == 'hyperv'): result = get_process_status(self.apiclient.connection.mgtSvr, 22, self.apiclient.connection.user, self.apiclient.connection.passwd, router.linklocalip, 'iptables -t nat -L', hypervisor=self.hypervisor) else: hosts = list_hosts( self.apiclient, id=router.hostid, ) self.assertEqual( isinstance(hosts, list), True, "Check for list hosts response return valid data") host = hosts[0] host.user = self.services["configurableData"]["host"]["username"] host.passwd = self.services["configurableData"]["host"]["password"] try: result = get_process_status(host.ipaddress, 22, host.user, host.passwd, router.linklocalip, 'iptables -t nat -L') except KeyError: self.skipTest("Provide a marvin config file with host\ credentials to run %s" % self._testMethodName) self.debug("iptables -t nat -L: %s" % result) self.debug("Public IP: %s" % public_ip.ipaddress) res = str(result) self.assertEqual(res.count(str(public_ip.ipaddress)), 1, "Check public IP address") return