You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by sw...@apache.org on 2016/05/12 15:05:33 UTC

[05/18] git commit: updated refs/heads/master to 103d62e

CLOUDSTACK-9287 - Add integration test to cover the private gw interface/mac address issues


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

Branch: refs/heads/master
Commit: 250be376e879b6c43792fdb5af0f5c49747689da
Parents: d93b008
Author: Wilder Rodrigues <wr...@schubergphilis.com>
Authored: Sat Feb 13 17:29:14 2016 +0100
Committer: Remi Bergsma <gi...@remi.nl>
Committed: Sat Apr 9 21:13:41 2016 +0200

----------------------------------------------------------------------
 test/integration/smoke/test_privategw_acl.py | 115 +++++++++++++++++++++-
 1 file changed, 113 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/250be376/test/integration/smoke/test_privategw_acl.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_privategw_acl.py b/test/integration/smoke/test_privategw_acl.py
index 754738b..56cc923 100644
--- a/test/integration/smoke/test_privategw_acl.py
+++ b/test/integration/smoke/test_privategw_acl.py
@@ -33,6 +33,13 @@ class Services:
 
     def __init__(self):
         self.services = {
+            "configurableData": {
+                "host": {
+                    "password": "password",
+                    "username": "root",
+                    "port": 22
+                }
+            },
             "account": {
                 "email": "test@test.com",
                 "firstname": "Test",
@@ -262,7 +269,7 @@ class TestPrivateGwACL(cloudstackTestCase):
         self.logger.debug("Enabling the VPC offering created")
         vpc_off.update(self.apiclient, state='Enabled')
 
-        self.performVPCTests(vpc_off, True)
+        self.performVPCTests(vpc_off, restart_with_cleanup = True)
 
     @attr(tags=["advanced"], required_hardware="true")
     def test_04_rvpc_privategw_static_routes(self):
@@ -276,6 +283,18 @@ class TestPrivateGwACL(cloudstackTestCase):
 
         self.performVPCTests(vpc_off)
 
+    @attr(tags=["advanced"], required_hardware="true")
+    def test_05_rvpc_privategw_check_interface(self):
+        self.logger.debug("Creating a Redundant VPC offering..")
+        vpc_off = VpcOffering.create(
+            self.apiclient,
+            self.services["redundant_vpc_offering"])
+
+        self.logger.debug("Enabling the Redundant VPC offering created")
+        vpc_off.update(self.apiclient, state='Enabled')
+
+        self.performPrivateGWInterfaceTests(vpc_off)
+
     def performVPCTests(self, vpc_off, restart_with_cleanup = False):
         self.logger.debug("Creating VPCs with  offering ID %s" % vpc_off.id)
         vpc_1 = self.createVPC(vpc_off, cidr = '10.0.1.0/24')
@@ -331,6 +350,99 @@ class TestPrivateGwACL(cloudstackTestCase):
             self.check_pvt_gw_connectivity(vm1, public_ip_1, vm2.nic[0].ipaddress)
             self.check_pvt_gw_connectivity(vm2, public_ip_2, vm1.nic[0].ipaddress)
 
+    def performPrivateGWInterfaceTests(self, vpc_off):
+        self.logger.debug("Creating VPCs with  offering ID %s" % vpc_off.id)
+        vpc_1 = self.createVPC(vpc_off, cidr = '10.0.1.0/24')
+
+        self.cleanup = [vpc_1, vpc_off, self.account]
+
+        physical_networks = get_physical_networks(self.apiclient, self.zone.id)
+        if not physical_networks:
+            self.fail("No Physical Networks found!")
+
+        vlans = physical_networks[0].vlan.split('-')
+        vlan_1 = int(vlans[0])
+
+        network_1 = self.createNetwork(vpc_1, gateway = '10.0.1.1')
+
+        vm1 = self.createVM(network_1)
+
+        self.cleanup.insert(0, vm1)
+        
+        acl1 = self.createACL(vpc_1)
+        self.createACLItem(acl1.id, cidr = "0.0.0.0/0")
+        privateGw_1 = self.createPvtGw(vpc_1, "10.0.3.100", "10.0.3.101", acl1.id, vlan_1)
+        self.replacePvtGwACL(acl1.id, privateGw_1.id)
+
+        self.replaceNetworkAcl(acl1.id, network_1)
+
+        staticRoute_1 = self.createStaticRoute(privateGw_1.id, cidr = '10.0.2.0/24')
+
+        public_ip_1 = self.acquire_publicip(vpc_1, network_1)
+
+        nat_rule_1 = self.create_natrule(vpc_1, vm1, public_ip_1, network_1)
+
+        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.assertEqual(len(routers), 2,
+            "Check for list routers size returned '%s' instead of 2" % len(routers))
+
+        state_holder = {routers[0].linklocalip : {"state" : None, "mac" : None},
+                        routers[1].linklocalip : {"state" : None, "mac" : None}}
+        state = None
+        mac = None
+        for router in routers:
+            if router.isredundantrouter and router.vpcid:
+                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"]
+                host.port = self.services["configurableData"]["host"]["port"]
+
+                try:
+                    state = get_process_status(
+                        host.ipaddress,
+                        host.port,
+                        host.user,
+                        host.passwd,
+                        router.linklocalip,
+                        "ip addr | grep eth3 | grep state | awk '{print $9;}'")
+
+                    mac = get_process_status(
+                        host.ipaddress,
+                        host.port,
+                        host.user,
+                        host.passwd,
+                        router.linklocalip,
+                        "ip addr | grep link/ether | awk '{print $2;}' | sed -n 4p")
+                except KeyError:
+                    self.skipTest(
+                        "Provide a marvin config file with host\
+                                credentials to run %s" %
+                        self._testMethodName)
+
+                self.logger.debug("Result from the Router on IP '%s' is -> state: '%s', mac: '%s'" % (router.linklocalip, state, mac))
+                state_holder[router.linklocalip]["state"] = str(state)
+                state_holder[router.linklocalip]["mac"] = str(mac)
+
+        check_state = state_holder[routers[0].linklocalip]["state"].count(state_holder[routers[1].linklocalip]["state"])
+        check_mac = state_holder[routers[0].linklocalip]["mac"].count(state_holder[routers[1].linklocalip]["mac"])
+
+        self.assertTrue(check_state == 0, "Routers private gateway interface should not be on the same state!")
+        self.assertTrue(check_mac == 0, "Routers private gateway interface should not have the same mac address!")
+
     def createVPC(self, vpc_offering, cidr = '10.1.1.1/16'):
         try:
             self.logger.debug("Creating a VPC network in the account: %s" % self.account.name)
@@ -568,4 +680,3 @@ class TestPrivateGwACL(cloudstackTestCase):
         cmd.cleanup = cleanup
         cmd.makeredundant = False
         self.api_client.restartVPC(cmd)
-