CLOUDSTACK-8074: Fixed maint/test_multiple_ip_ranges.py

Signed-off-by: SrikanteswaraRao Talluri <tall...@apache.org>


Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/c3508f61
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/c3508f61
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/c3508f61

Branch: refs/heads/master
Commit: c3508f61a18384e9201d3d1dc87c35c67e200039
Parents: 9fb654c
Author: Ashutosh K <ashut...@clogeny.com>
Authored: Tue Dec 16 17:13:05 2014 +0530
Committer: SrikanteswaraRao Talluri <tall...@apache.org>
Committed: Wed Dec 17 17:28:25 2014 +0530

----------------------------------------------------------------------
 .../component/maint/test_multiple_ip_ranges.py  | 972 ++++++++++---------
 1 file changed, 510 insertions(+), 462 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/c3508f61/test/integration/component/maint/test_multiple_ip_ranges.py
----------------------------------------------------------------------
diff --git a/test/integration/component/maint/test_multiple_ip_ranges.py 
b/test/integration/component/maint/test_multiple_ip_ranges.py
index 982dd7c..f73c470 100644
--- a/test/integration/component/maint/test_multiple_ip_ranges.py
+++ b/test/integration/component/maint/test_multiple_ip_ranges.py
@@ -16,117 +16,72 @@
 # under the License.
 """ Tests for Multiple IP Ranges feature
 """
-from marvin.cloudstackTestCase import *
-from marvin.cloudstackAPI import *
-from marvin.cloudstackException import CloudstackAPIException
-from marvin.lib.utils import *
-from marvin.lib.base import *
-from marvin.lib.common import *
-# from netaddr import *
+from marvin.cloudstackTestCase import cloudstackTestCase, unittest
+from marvin.lib.utils import cleanup_resources, get_process_status
+from marvin.lib.base import (Account,
+                             DiskOffering,
+                             VirtualMachine,
+                             Router,
+                             ServiceOffering,
+                             PublicIpRange)
+from marvin.lib.common import (get_domain,
+                               get_zone,
+                               list_routers,
+                               list_hosts,
+                               get_pod,
+                               get_template)
 import netaddr
 from nose.plugins.attrib import attr
+from netaddr import IPNetwork, IPAddress
+from marvin.sshClient import SshClient
+import random
 
-class Services:
-    """Test Multiple IP Ranges
-    """
-    def __init__(self):
-        self.services = {
-                        "account": {
-                                    "email": "t...@test.com",
-                                    "firstname": "Test",
-                                    "lastname": "User",
-                                    "username": "test",
-                                    # Random characters are appended for unique
-                                    # username
-                                    "password": "password",
-                        },
-                        "service_offering": {
-                                    "name": "Tiny Instance",
-                                    "displaytext": "Tiny Instance",
-                                    "cpunumber": 1,
-                                    "cpuspeed": 200,  # in MHz
-                                    "memory": 256,  # In MBs
-                        },
-                        "disk_offering": {
-                                    "displaytext": "Small Disk",
-                                    "name": "Small Disk",
-                                    "disksize": 1
-                        },
-                        "templates": {
-                                    "displaytext": 'Template',
-                                    "name": 'Template',
-                                    "ostype": "CentOS 5.3 (64-bit)",
-                                    "templatefilter": 'self',
-                        },
-                        "vlan_ip_range": {
-                                           "startip": "10.147.43.130",
-                                           "endip": "10.147.43.135",
-                                           "netmask": "255.255.255.192",
-                                           "gateway": "10.147.43.129",
-                                           "forvirtualnetwork": "false",
-                                           "vlan": "untagged",
-                        },
-                        "server_without_disk": {
-                                        "displayname": "Test VM-No Disk",
-                                        "username": "root",
-                                        "password": "password",
-                                        "hypervisor": 'XenServer',
-                        },
-                        "host": {
-                               "publicport": 22,
-                               "username": "root",    # Host creds for SSH
-                               "password": "password",
-                        },
-                       "ostype": "CentOS 5.3 (64-bit)",
-                        "sleep": 60,
-                        "timeout": 10,
-          }
 
 class TestMultipleIpRanges(cloudstackTestCase):
+
     """Test Multiple IP Ranges for guest network
     """
     @classmethod
     def setUpClass(cls):
-        cls.testClient = super(TestEgressAfterHostMaintenance, 
cls).getClsTestClient()
+        cls.testClient = super(TestMultipleIpRanges, cls).getClsTestClient()
         cls.api_client = cls.testClient.getApiClient()
         cls.dbclient = cls.testClient.getDbConnection()
 
-        cls.services = Services().services
+        cls.testdata = cls.testClient.getParsedTestDataConfig()
         # Get Zone, Domain and templates
         cls.domain = get_domain(cls.api_client)
         cls.zone = get_zone(cls.api_client, cls.testClient.getZoneForTests())
         cls.pod = get_pod(cls.api_client, cls.zone.id)
-        cls.services['mode'] = cls.zone.networktype
-        cls.services["domainid"] = cls.domain.id
-        cls.services["zoneid"] = cls.zone.id
+        cls.testdata['mode'] = cls.zone.networktype
+        cls.testdata["domainid"] = cls.domain.id
+        cls.testdata["zoneid"] = cls.zone.id
         cls.account = Account.create(
-                            cls.api_client,
-                            cls.services["account"],
-                            domainid=cls.domain.id
-                            )
-        cls.services["account"] = cls.account.name
+            cls.api_client,
+            cls.testdata["account"],
+            domainid=cls.domain.id
+        )
+        cls.testdata["account"] = cls.account.name
         cls.disk_offering = DiskOffering.create(
-                                    cls.api_client,
-                                    cls.services["disk_offering"]
-                                    )
+            cls.api_client,
+            cls.testdata["disk_offering"]
+        )
         cls.service_offering = ServiceOffering.create(
-                                            cls.api_client,
-                                            cls.services["service_offering"]
-                                            )
+            cls.api_client,
+            cls.testdata["service_offering"]
+        )
         cls.template = get_template(
-                            cls.api_client,
-                            cls.zone.id,
-                            cls.services["ostype"]
-                            )
-        cls.services["templates"]["ostypeid"] = cls.template.ostypeid
-        cls.services["diskoffering"] = cls.disk_offering.id
+            cls.api_client,
+            cls.zone.id,
+            cls.testdata["ostype"]
+        )
+        cls.testdata["diskoffering"] = cls.disk_offering.id
         cls.dc_id = cls.dbclient.execute(
-                                      "select id from data_center where uuid = 
'%s';" % str(cls.services["zoneid"])
-                                      )
+            "select id from data_center where uuid = '%s';" % str(
+                cls.testdata["zoneid"]))
         cls.dc_id = cls.dc_id[0][0]
         cls.ids = cls.dbclient.execute(
-                            "select id from user_ip_address where allocated is 
null and data_center_id = '%s';" % str(cls.dc_id)
-                            )
+            "select id from user_ip_address where allocated is null and 
data_center_id = '%s';" % str(
+                cls.dc_id))
         cls.id_list = []
         for i in range(len(cls.ids)):
             cls.id_list.append(cls.ids[i][0])
@@ -142,45 +97,76 @@ class TestMultipleIpRanges(cloudstackTestCase):
             cls.id_list = cls.id_list[:-2]
         for id in cls.id_list:
             cls.dbclient.execute(
-                                 "update user_ip_address set allocated=now() 
where id = '%s';" % str(id)
-                                 )
-        # Add IP range in the new CIDR
-        cls.services["vlan_ip_range"]["zoneid"] = cls.zone.id
-        cls.services["vlan_ip_range"]["podid"] = cls.pod.id
+                "update user_ip_address set allocated=now() where id = '%s';" %
+                str(id))
         # create new vlan ip range
         # Before creating ip range check the zone's network type
-        if cls.zone.networktype == 'Basic':
-            cls.new_vlan = PublicIpRange.create(cls.api_client, 
cls.services["vlan_ip_range"])
+        if cls.zone.networktype.lower() == 'basic':
+            cls.new_vlan = cls.createNewVlanRange()
         else:
-            raise unittest.SkipTest("These tests can be run only on basic 
zone. So skipping the tests")
+            raise unittest.SkipTest(
+                "These tests can be run only on basic zone.\
+                        So skipping the tests")
         # Deploy vm in existing subnet if VR is not present
-        if cls.vr_state is False :
+        if cls.vr_state is False:
             cls.vm_res = VirtualMachine.create(
-                                            cls.api_client,
-                                            
cls.services["server_without_disk"],
-                                            templateid=cls.template.id,
-                                            accountid=cls.account.name,
-                                            domainid=cls.services["domainid"],
-                                            zoneid=cls.services["zoneid"],
-                                            
serviceofferingid=cls.service_offering.id,
-                                            mode=cls.services["mode"],
-                                            )
+                cls.api_client,
+                cls.testdata["server_without_disk"],
+                templateid=cls.template.id,
+                accountid=cls.account.name,
+                domainid=cls.testdata["domainid"],
+                zoneid=cls.testdata["zoneid"],
+                serviceofferingid=cls.service_offering.id,
+                mode=cls.testdata["mode"],
+            )
         cls._cleanup = [
-                        cls.new_vlan,
-                        cls.account,
-                        ]
+            cls.new_vlan,
+            cls.account,
+        ]
         return
 
     @classmethod
+    def createNewVlanRange(cls):
+        """ Increment current cidr of vlan range present in network
+            and create new range
+        """
+        publicIpRange = PublicIpRange.list(cls.api_client)
+        cls.startIp = publicIpRange[0].startip
+        cls.endIp = publicIpRange[0].endip
+        cls.gateway = publicIpRange[0].gateway
+        cls.netmask = publicIpRange[0].netmask
+        # Pass ip address and mask length to IPNetwork to findout the CIDR
+        ip = IPNetwork(cls.startIp + "/" + cls.netmask)
+        # Take random increment factor to avoid adding the same vlan ip range
+        # in each test case
+        networkIncrementFactor = random.randint(1,255)
+        new_cidr = ip.__iadd__(networkIncrementFactor)
+        ip2 = IPNetwork(new_cidr)
+        test_nw = ip2.network
+        ip = IPAddress(test_nw)
+        # Add IP range(5 IPs) in the new CIDR
+        test_gateway = ip.__add__(1)
+        test_startIp = ip.__add__(3)
+        test_endIp = ip.__add__(10)
+        # Populating services with new IP range
+        cls.testdata["vlan_ip_range"]["startip"] = test_startIp
+        cls.testdata["vlan_ip_range"]["endip"] = test_endIp
+        cls.testdata["vlan_ip_range"]["gateway"] = test_gateway
+        cls.testdata["vlan_ip_range"]["netmask"] = cls.netmask
+        cls.testdata["vlan_ip_range"]["zoneid"] = cls.zone.id
+        cls.testdata["vlan_ip_range"]["podid"] = cls.pod.id
+
+        return PublicIpRange.create(
+                cls.api_client,
+                cls.testdata["vlan_ip_range"])
+
+    @classmethod
     def tearDownClass(cls):
         try:
             for id in cls.id_list:
                 cls.dbclient.execute(
-                                     "update user_ip_address set 
allocated=default where id = '%s';" % str(id)
-                                     )
-            # Wait for expunge interval to cleanup VMs
-            wait_for_cleanup(cls.api_client, ["expunge.delay", 
"expunge.interval"])
-            time.sleep(30)
+                    "update user_ip_address set allocated=default where id = 
'%s';" %
+                    str(id))
             # Cleanup resources used
             cleanup_resources(cls.api_client, cls._cleanup)
         except Exception as e:
@@ -190,48 +176,55 @@ class TestMultipleIpRanges(cloudstackTestCase):
     def setUp(self):
         self.apiclient = self.testClient.getApiClient()
         self.dbclient = self.testClient.getDbConnection()
-        self.cleanup = [ ]
+        self.cleanup = []
         # Deploy guest vm
-        try :
+        try:
             self.virtual_machine = VirtualMachine.create(
-                                            self.apiclient,
-                                            
self.services["server_without_disk"],
-                                            templateid=self.template.id,
-                                            accountid=self.account.name,
-                                            domainid=self.services["domainid"],
-                                            zoneid=self.services["zoneid"],
-                                            
serviceofferingid=self.service_offering.id,
-                                            mode=self.services["mode"],
-                                            )
-        except Exception as e :
-            raise Exception("Warning: Exception during vm deployment: 
{}".format(e))
+                self.apiclient,
+                self.testdata["server_without_disk"],
+                templateid=self.template.id,
+                accountid=self.account.name,
+                domainid=self.testdata["domainid"],
+                zoneid=self.testdata["zoneid"],
+                serviceofferingid=self.service_offering.id,
+                mode=self.testdata["mode"],
+            )
+        except Exception as e:
+            raise Exception(
+                "Warning: Exception during vm deployment: {}".format(e))
         self.vm_response = VirtualMachine.list(
-                                               self.apiclient,
-                                               id=self.virtual_machine.id
-                                               )
+            self.apiclient,
+            id=self.virtual_machine.id
+        )
         self.assertEqual(
             isinstance(self.vm_response, list),
             True,
             "Check VM list response returned a valid list"
-            )
-        self.ip_range = 
list(netaddr.iter_iprange(unicode(self.services["vlan_ip_range"]["startip"]), 
unicode(self.services["vlan_ip_range"]["endip"])))
-        self.nic_ip = 
netaddr.IPAddress(unicode(self.vm_response[0].nic[0].ipaddress))
+        )
+        self.ip_range = list(
+            netaddr.iter_iprange(
+                unicode(
+                    self.testdata["vlan_ip_range"]["startip"]), unicode(
+                    self.testdata["vlan_ip_range"]["endip"])))
+        self.nic_ip = netaddr.IPAddress(
+            unicode(
+                self.vm_response[0].nic[0].ipaddress))
         self.debug("vm got {} as ip address".format(self.nic_ip))
         self.assertIn(
-              self.nic_ip,
-              self.ip_range,
-              "VM did not get the ip address from the new ip range"
-              )
+            self.nic_ip,
+            self.ip_range,
+            "VM did not get the ip address from the new ip range"
+        )
         ip_alias = self.dbclient.execute(
-                              "select ip4_address from nic_ip_alias;"
-                              )
+            "select ip4_address from nic_ip_alias;"
+        )
         self.alias_ip = str(ip_alias[0][0])
         self.debug("alias ip : %s" % self.alias_ip)
         self.assertNotEqual(
-                            self.alias_ip,
-                            None,
-                            "Error in creating ip alias. Please check MS logs"
-                           )
+            self.alias_ip,
+            None,
+            "Error in creating ip alias. Please check MS logs"
+        )
         self.cleanup.append(self.virtual_machine)
         return
 
@@ -246,35 +239,38 @@ class TestMultipleIpRanges(cloudstackTestCase):
     def verify_vlan_range(self, vlan, services):
         # compare vlan_list response with configured values
         self.assertEqual(
-                         isinstance(vlan, list),
-                         True,
-                         "Check list response returned a valid list"
-                         )
+            isinstance(vlan, list),
+            True,
+            "Check list response returned a valid list"
+        )
         self.assertNotEqual(
-                             len(vlan),
-                             0,
-                             "check list vlan response"
-                             )
+            len(vlan),
+            0,
+            "check list vlan response"
+        )
         self.assertEqual(
-                         str(vlan[0].startip),
-                         str(services["startip"]),
-                         "Start IP in vlan ip range is not matched with the 
configured start ip"
-                         )
+            str(vlan[0].startip),
+            str(services["startip"]),
+            "Start IP in vlan ip range is not matched with the\
+                    configured start ip"
+        )
         self.assertEqual(
-                         str(vlan[0].endip),
-                         str(services["endip"]),
-                         "End IP in vlan ip range is not matched with the 
configured end ip"
-                        )
+            str(vlan[0].endip),
+            str(services["endip"]),
+            "End IP in vlan ip range is not matched with the configured end ip"
+        )
         self.assertEqual(
-                         str(vlan[0].gateway),
-                         str(services["gateway"]),
-                         "gateway in vlan ip range is not matched with the 
configured gateway"
-                         )
+            str(vlan[0].gateway),
+            str(services["gateway"]),
+            "gateway in vlan ip range is not matched with the\
+                    configured gateway"
+        )
         self.assertEqual(
-                         str(vlan[0].netmask),
-                         str(services["netmask"]),
-                         "netmask in vlan ip range is not matched with the 
configured netmask"
-                         )
+            str(vlan[0].netmask),
+            str(services["netmask"]),
+            "netmask in vlan ip range is not matched with\
+                    the configured netmask"
+        )
         return
 
     @attr(tags=["sg"])
@@ -283,14 +279,20 @@ class TestMultipleIpRanges(cloudstackTestCase):
             1.Deploy guest vm
             2.Verify vm gets the ip address from new cidr
         """
-        self.ip_range = 
list(netaddr.iter_iprange(unicode(self.services["vlan_ip_range"]["startip"]), 
unicode(self.services["vlan_ip_range"]["endip"])))
-        self.nic_ip = 
netaddr.IPAddress(unicode(self.vm_response[0].nic[0].ipaddress))
+        self.ip_range = list(
+            netaddr.iter_iprange(
+                unicode(
+                    self.testdata["vlan_ip_range"]["startip"]), unicode(
+                    self.testdata["vlan_ip_range"]["endip"])))
+        self.nic_ip = netaddr.IPAddress(
+            unicode(
+                self.vm_response[0].nic[0].ipaddress))
         self.debug("vm got {} as ip address".format(self.nic_ip))
         self.assertIn(
-              self.nic_ip,
-              self.ip_range,
-              "VM did not get the ip address from the new ip range"
-              )
+            self.nic_ip,
+            self.ip_range,
+            "VM did not get the ip address from the new ip range"
+        )
         return
 
     @attr(tags=["sg"])
@@ -300,51 +302,60 @@ class TestMultipleIpRanges(cloudstackTestCase):
             2.Verify dns service listens on alias ip in VR
         """
         list_router_response = list_routers(
-                                    self.apiclient,
-                                    zoneid=self.zone.id,
-                                    listall=True
-                                    )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         hosts = list_hosts(
-                           self.apiclient,
-                           zoneid=router.zoneid,
-                           type='Routing',
-                           state='Up',
-                           id=router.hostid
-                           )
+            self.apiclient,
+            zoneid=router.zoneid,
+            type='Routing',
+            state='Up',
+            id=router.hostid
+        )
         self.assertEqual(
-                            isinstance(hosts, list),
-                            True,
-                            "Check list host returns a valid list"
-                        )
+            isinstance(hosts, list),
+            True,
+            "Check list host returns a valid list"
+        )
         host = hosts[0]
         self.debug("Router ID: %s, state: %s" % (router.id, router.state))
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Check list router response for router state"
-                        )
+            router.state,
+            'Running',
+            "Check list router response for router state"
+        )
+
+        port = self.testdata['configurableData']['host']["publicport"]
+        username = self.testdata['configurableData']['host']["username"]
+        password = self.testdata['configurableData']['host']["password"]
+
+        # SSH to host so that host key is saved in first
+        # attempt
+        SshClient(host.ipaddress, port, username, password)
+
         proc = self.alias_ip + ":53"
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                "netstat -atnp | grep %s" % proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            "netstat -atnp | grep %s" % proc
+        )
         res = str(result)
         self.debug("Dns process status on alias ip: %s" % res)
         self.assertNotEqual(
-                         res.find(proc)
-                         - 1,
-                         "dnsmasq service is not running on alias ip"
-                        )
+            res.find(proc)
+            - 1,
+            "dnsmasq service is not running on alias ip"
+        )
         return
 
     @attr(tags=["sg"])
@@ -354,51 +365,60 @@ class TestMultipleIpRanges(cloudstackTestCase):
             2.Verify password service(socat) listens on alias ip in VR
         """
         list_router_response = list_routers(
-                                    self.apiclient,
-                                    zoneid=self.zone.id,
-                                    listall=True
-                                    )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         hosts = list_hosts(
-                           self.apiclient,
-                           zoneid=router.zoneid,
-                           type='Routing',
-                           state='Up',
-                           id=router.hostid
-                           )
+            self.apiclient,
+            zoneid=router.zoneid,
+            type='Routing',
+            state='Up',
+            id=router.hostid
+        )
         self.assertEqual(
-                            isinstance(hosts, list),
-                            True,
-                            "Check list host returns a valid list"
-                        )
+            isinstance(hosts, list),
+            True,
+            "Check list host returns a valid list"
+        )
         host = hosts[0]
         self.debug("Router ID: %s, state: %s" % (router.id, router.state))
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Check list router response for router state"
-                        )
+            router.state,
+            'Running',
+            "Check list router response for router state"
+        )
+
+        port = self.testdata['configurableData']['host']["publicport"]
+        username = self.testdata['configurableData']['host']["username"]
+        password = self.testdata['configurableData']['host']["password"]
+
+        # SSH to host so that host key is saved in first
+        # attempt
+        SshClient(host.ipaddress, port, username, password)
+
         proc = "socat"
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                "netstat -atnp | grep %s" % proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            "netstat -atnp | grep %s" % proc
+        )
         res = str(result)
         self.debug("password process status on VR: %s" % res)
         self.assertNotEqual(
-                         res.find(self.alias_ip)
-                         - 1,
-                         "password service is not running on alias ip"
-                        )
+            res.find(self.alias_ip)
+            - 1,
+            "password service is not running on alias ip"
+        )
         return
 
     @attr(tags=["sg"])
@@ -408,51 +428,60 @@ class TestMultipleIpRanges(cloudstackTestCase):
             2.Verify userdata service(apache2) listens on alias ip in VR
         """
         list_router_response = list_routers(
-                                    self.apiclient,
-                                    zoneid=self.zone.id,
-                                    listall=True
-                                    )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         hosts = list_hosts(
-                           self.apiclient,
-                           zoneid=router.zoneid,
-                           type='Routing',
-                           state='Up',
-                           id=router.hostid
-                           )
+            self.apiclient,
+            zoneid=router.zoneid,
+            type='Routing',
+            state='Up',
+            id=router.hostid
+        )
         self.assertEqual(
-                            isinstance(hosts, list),
-                            True,
-                            "Check list host returns a valid list"
-                        )
+            isinstance(hosts, list),
+            True,
+            "Check list host returns a valid list"
+        )
         host = hosts[0]
         self.debug("Router ID: %s, state: %s" % (router.id, router.state))
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Check list router response for router state"
-                        )
+            router.state,
+            'Running',
+            "Check list router response for router state"
+        )
+
+        port = self.testdata['configurableData']['host']["publicport"]
+        username = self.testdata['configurableData']['host']["username"]
+        password = self.testdata['configurableData']['host']["password"]
+
+        # SSH to host so that host key is saved in first
+        # attempt
+        SshClient(host.ipaddress, port, username, password)
+
         proc = "apache2"
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                "netstat -atnp | grep %s" % proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            "netstat -atnp | grep %s" % proc
+        )
         res = str(result)
         self.debug("userdata process status on VR: %s" % res)
         self.assertNotEqual(
-                         res.find(self.alias_ip + ":80 ")
-                         - 1,
-                         "password service is not running on alias ip"
-                        )
+            res.find(self.alias_ip + ":80 ")
+            - 1,
+            "password service is not running on alias ip"
+        )
         return
 
     @attr(tags=["sg"])
@@ -464,93 +493,94 @@ class TestMultipleIpRanges(cloudstackTestCase):
             4.Verify ip alias removal after vm expunge
         """
         list_router_response = list_routers(
-                                    self.apiclient,
-                                    zoneid=self.zone.id,
-                                    listall=True
-                                    )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         hosts = list_hosts(
-                           self.apiclient,
-                           zoneid=router.zoneid,
-                           type='Routing',
-                           state='Up',
-                           id=router.hostid
-                           )
+            self.apiclient,
+            zoneid=router.zoneid,
+            type='Routing',
+            state='Up',
+            id=router.hostid
+        )
         self.assertEqual(
-                            isinstance(hosts, list),
-                            True,
-                            "Check list host returns a valid list"
-                        )
+            isinstance(hosts, list),
+            True,
+            "Check list host returns a valid list"
+        )
         host = hosts[0]
         self.debug("Router ID: %s, state: %s" % (router.id, router.state))
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Check list router response for router state"
-                        )
+            router.state,
+            'Running',
+            "Check list router response for router state"
+        )
+
+        port = self.testdata['configurableData']['host']["publicport"]
+        username = self.testdata['configurableData']['host']["username"]
+        password = self.testdata['configurableData']['host']["password"]
+
+        # SSH to host so that host key is saved in first
+        # attempt
+        SshClient(host.ipaddress, port, username, password)
+
         proc = "ip addr show eth0"
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            proc
+        )
         res = str(result)
         self.debug("ip alias configuration on VR: %s" % res)
         self.assertNotEqual(
-                         res.find(self.alias_ip)
-                         - 1,
-                         "ip alias is not created on VR eth0"
-                        )
+            res.find(self.alias_ip)
+            - 1,
+            "ip alias is not created on VR eth0"
+        )
         self.virtual_machine.delete(self.apiclient)
-        expunge_del = Configurations.list(
-                                          self.apiclient,
-                                          name='expunge.delay'
-                                         )
-        expunge_int = Configurations.list(
-                                          self.apiclient,
-                                          name='expunge.interval'
-                                         )
-        wait_time = int(expunge_del[0].value) + int(expunge_int[0].value) + 
int(30)
-        self.debug("Waiting for {} seconds for the vm to 
expunge".format(wait_time))
-        # wait for the vm to expunge
-        time.sleep(wait_time)
-        self.debug("Verify that expunging the last vm in the CIDR should 
delete the ip alias from VR")
+        self.debug(
+            "Verify that expunging the last vm in the CIDR should\
+                    delete the ip alias from VR")
         ip_alias2 = self.dbclient.execute(
-                              "select ip4_address from nic_ip_alias;"
-                              )
+            "select ip4_address from nic_ip_alias;"
+        )
         self.assertEqual(
-                         isinstance(ip_alias2, list),
-                         True,
-                         "Error in sql query"
-                         )
+            isinstance(ip_alias2, list),
+            True,
+            "Error in sql query"
+        )
         self.assertEqual(
-                         len(ip_alias2),
-                         0,
-                         "Failure in clearing ip alias entry from cloud db"
-                       )
+            len(ip_alias2),
+            0,
+            "Failure in clearing ip alias entry from cloud db"
+        )
+
         proc = "ip addr show eth0"
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            proc
+        )
         res = str(result)
         self.assertEqual(
-                         res.find(self.alias_ip),
-                         - 1,
-                         "Failed to clean up ip alias from VR even after last 
vm expunge in the CIDR"
-                         )
+            res.find(
+                self.alias_ip),
+            - 1,
+            "Failed to clean up ip alias from VR even after\
+                    last vm expunge in the CIDR")
         self.debug("IP alias got deleted from VR successfully.")
         self.cleanup.remove(self.virtual_machine)
         return
@@ -564,86 +594,95 @@ class TestMultipleIpRanges(cloudstackTestCase):
             4.Verify ip alias on VR
         """
         list_router_response = list_routers(
-                                    self.apiclient,
-                                    zoneid=self.zone.id,
-                                    listall=True
-                                    )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         hosts = list_hosts(
-                           self.apiclient,
-                           zoneid=router.zoneid,
-                           type='Routing',
-                           state='Up',
-                           id=router.hostid
-                           )
+            self.apiclient,
+            zoneid=router.zoneid,
+            type='Routing',
+            state='Up',
+            id=router.hostid
+        )
         self.assertEqual(
-                            isinstance(hosts, list),
-                            True,
-                            "Check list host returns a valid list"
-                        )
+            isinstance(hosts, list),
+            True,
+            "Check list host returns a valid list"
+        )
         host = hosts[0]
         self.debug("Router ID: %s, state: %s" % (router.id, router.state))
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Check list router response for router state"
-                        )
+            router.state,
+            'Running',
+            "Check list router response for router state"
+        )
+
+        port = self.testdata['configurableData']['host']["publicport"]
+        username = self.testdata['configurableData']['host']["username"]
+        password = self.testdata['configurableData']['host']["password"]
+
+        # SSH to host so that host key is saved in first
+        # attempt
+        SshClient(host.ipaddress, port, username, password)
+
         proc = "ip addr show eth0"
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            proc
+        )
         res = str(result)
         self.debug("ip alias configuration on VR: %s" % res)
         self.assertNotEqual(
-                         res.find(self.alias_ip)
-                         - 1,
-                         "ip alias is not created on VR eth0"
-                        )
+            res.find(self.alias_ip)
+            - 1,
+            "ip alias is not created on VR eth0"
+        )
         resp = Router.reboot(
-                             self.apiclient,
-                             router.id
-                             )
+            self.apiclient,
+            router.id
+        )
         self.debug("Reboot router api response: %s" % resp)
         list_router_response = list_routers(
-                                            self.apiclient,
-                                            zoneid=self.zone.id,
-                                            listall=True
-                                            )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Router is not in running state after reboot"
-                        )
+            router.state,
+            'Running',
+            "Router is not in running state after reboot"
+        )
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            proc
+        )
         res = str(result)
         self.assertNotEqual(
-                         res.find(self.alias_ip),
-                         - 1,
-                         "IP alias not present on VR after VR reboot"
-                         )
+            res.find(self.alias_ip),
+            - 1,
+            "IP alias not present on VR after VR reboot"
+        )
         return
 
     @attr(tags=["sg"])
@@ -655,90 +694,99 @@ class TestMultipleIpRanges(cloudstackTestCase):
             4.Verify ip alias on VR
         """
         list_router_response = list_routers(
-                                    self.apiclient,
-                                    zoneid=self.zone.id,
-                                    listall=True
-                                    )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         hosts = list_hosts(
-                           self.apiclient,
-                           zoneid=router.zoneid,
-                           type='Routing',
-                           state='Up',
-                           id=router.hostid
-                           )
+            self.apiclient,
+            zoneid=router.zoneid,
+            type='Routing',
+            state='Up',
+            id=router.hostid
+        )
         self.assertEqual(
-                            isinstance(hosts, list),
-                            True,
-                            "Check list host returns a valid list"
-                        )
+            isinstance(hosts, list),
+            True,
+            "Check list host returns a valid list"
+        )
         host = hosts[0]
         self.debug("Router ID: %s, state: %s" % (router.id, router.state))
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Check list router response for router state"
-                        )
+            router.state,
+            'Running',
+            "Check list router response for router state"
+        )
+
+        port = self.testdata['configurableData']['host']["publicport"]
+        username = self.testdata['configurableData']['host']["username"]
+        password = self.testdata['configurableData']['host']["password"]
+
+        # SSH to host so that host key is saved in first
+        # attempt
+        SshClient(host.ipaddress, port, username, password)
+
         proc = "ip addr show eth0"
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            proc
+        )
         res = str(result)
         self.debug("ip alias configuration on VR: %s" % res)
         self.assertNotEqual(
-                         res.find(self.alias_ip)
-                         - 1,
-                         "ip alias is not created on VR eth0"
-                        )
+            res.find(self.alias_ip)
+            - 1,
+            "ip alias is not created on VR eth0"
+        )
         self.debug("Stopping VR")
-        stop_res = Router.stop(
-                           self.apiclient,
-                           router.id,
-                           )
+        Router.stop(
+            self.apiclient,
+            router.id,
+        )
         self.debug("Starting VR")
-        start_res = Router.start(
-                                 self.apiclient,
-                                 router.id
-                                 )
+        Router.start(
+            self.apiclient,
+            router.id
+        )
         list_router_response = list_routers(
-                                            self.apiclient,
-                                            zoneid=self.zone.id,
-                                            listall=True
-                                            )
+            self.apiclient,
+            zoneid=self.zone.id,
+            listall=True
+        )
         self.assertEqual(
-                            isinstance(list_router_response, list),
-                            True,
-                            "Check list response returns a valid list"
-                        )
+            isinstance(list_router_response, list),
+            True,
+            "Check list response returns a valid list"
+        )
         router = list_router_response[0]
         self.assertEqual(
-                            router.state,
-                            'Running',
-                            "Router is not in running state after reboot"
-                        )
+            router.state,
+            'Running',
+            "Router is not in running state after reboot"
+        )
         self.debug("VR is up and Running")
         result = get_process_status(
-                                host.ipaddress,
-                                self.services['host']["publicport"],
-                                self.services['host']["username"],
-                                self.services['host']["password"],
-                                router.linklocalip,
-                                proc
-                                )
+            host.ipaddress,
+            port,
+            username,
+            password,
+            router.linklocalip,
+            proc
+        )
         res = str(result)
         self.assertNotEqual(
-                         res.find(self.alias_ip),
-                         - 1,
-                         "IP alias not present on VR after VR stop and start"
-                         )
+            res.find(self.alias_ip),
+            - 1,
+            "IP alias not present on VR after VR stop and start"
+        )
         return

Reply via email to