You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by gi...@apache.org on 2014/05/15 16:58:57 UTC

git commit: updated refs/heads/4.4-forward to 77460e9

Repository: cloudstack
Updated Branches:
  refs/heads/4.4-forward 14968daea -> 77460e955


CLOUDSTACK-6687: Fixed IP reservation test case failures with code re-factoring


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

Branch: refs/heads/4.4-forward
Commit: 77460e9556f7d1b9d6cac6c8ece199bf3b83cd9c
Parents: 14968da
Author: Gaurav Aradhye <ga...@clogeny.com>
Authored: Thu May 15 03:45:22 2014 -0400
Committer: Girish Shilamkar <gi...@clogeny.com>
Committed: Thu May 15 04:06:36 2014 -0400

----------------------------------------------------------------------
 .../component/test_ip_reservation.py            | 121 ++++++++++++++-----
 tools/marvin/marvin/codes.py                    |   1 +
 tools/marvin/marvin/lib/common.py               |  28 +++--
 3 files changed, 106 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/cloudstack/blob/77460e95/test/integration/component/test_ip_reservation.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_ip_reservation.py b/test/integration/component/test_ip_reservation.py
index 390a959..c84f63c 100644
--- a/test/integration/component/test_ip_reservation.py
+++ b/test/integration/component/test_ip_reservation.py
@@ -35,9 +35,10 @@ from marvin.lib.common import (get_zone,
                                get_domain,
                                wait_for_cleanup,
                                createEnabledNetworkOffering,
-                               createNetworkRulesForVM)
+                               createNetworkRulesForVM,
+                               verifyNetworkState)
 from marvin.codes import (PASS, FAIL, FAILED, UNKNOWN, FAULT, MASTER,
-                          NAT_RULE, STATIC_NAT_RULE)
+                          NAT_RULE, STATIC_NAT_RULE, ERROR_CODE_530)
 import netaddr
 
 import random
@@ -1067,19 +1068,6 @@ class TestFailureScnarios(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    def create_virtual_machine(self, network_id=None, ip_address=None):
-        virtual_machine = VirtualMachine.create(self.apiclient,
-                                                          self.services["virtual_machine"],
-                                                          networkids=network_id,
-                                                          serviceofferingid=self.service_offering.id,
-                                                          accountid=self.account.name,
-                                                          domainid=self.domain.id,
-                                                          ipaddress=ip_address
-                                                          )
-        self.debug("Virtual Machine is created: " + virtual_machine.id)
-        self.cleanup.append(virtual_machine)
-        return virtual_machine
-
     @attr(tags=["advanced", "selfservice"])
     def test_network_not_implemented(self):
         # steps
@@ -1087,8 +1075,18 @@ class TestFailureScnarios(cloudstackTestCase):
         #
         # validation
         # should throw exception as network is not in implemented state as no vm is created
-        with self.assertRaises(Exception):
-            self.isolated_network.update(self.apiclient, guestvmcidr="10.1.1.0/26")
+
+        networkOffering = self.isolated_network_offering
+        resultSet = createIsolatedNetwork(self, networkOffering.id)
+        if resultSet[0] == FAIL:
+            self.fail("Failed to create isolated network")
+        else:
+            isolated_network = resultSet[1]
+
+        response = isolated_network.update(self.apiclient, guestvmcidr="10.1.1.0/26")
+        self.assertEqual(response.errorcode, ERROR_CODE_530, "Job should \
+                         have failed with error code %s, instead got response \
+                         %s" % (ERROR_CODE_530, response))
         return
 
     @attr(tags=["advanced", "selfservice"])
@@ -1102,14 +1100,31 @@ class TestFailureScnarios(cloudstackTestCase):
         # 1. guest vm cidr should be successfully updated with correct value
         # 2. existing guest vm ip should not be changed after reservation
         # 3. newly created VM should get ip in guestvmcidr
-        guest_vm_cidr = u"10.1.1.0/29"
+
+        networkOffering = self.isolated_persistent_network_offering
+        subnet = "10.1."+str(random.randrange(1,254))
+        gateway = subnet + ".1"
+        isolated_persistent_network = None
+        resultSet = createIsolatedNetwork(self, networkOffering.id, gateway=gateway)
+        if resultSet[0] == FAIL:
+            self.fail("Failed to create isolated network")
+        else:
+            isolated_persistent_network = resultSet[1]
+        guest_vm_cidr = subnet +".0/29"
         virtual_machine_1 = None
         try:
-            virtual_machine_1 = self.create_virtual_machine(network_id=self.isolated_persistent_network.id, ip_address=u"10.1.1.3")
+            virtual_machine_1 = VirtualMachine.create(self.apiclient,
+                                                          self.testData["virtual_machine"],
+                                                          networkids=isolated_persistent_network.id,
+                                                          serviceofferingid=self.service_offering.id,
+                                                          accountid=self.account.name,
+                                                          domainid=self.domain.id,
+                                                          ipaddress=subnet+".3"
+                                                          )
         except Exception as e:
-            self.skipTest("VM creation fails in network ")
+            self.fail("VM creation fails in network: %s" % e)
 
-        update_response = Network.update(self.isolated_persistent_network, self.apiclient, id=self.isolated_persistent_network.id, guestvmcidr=guest_vm_cidr)
+        update_response = Network.update(isolated_persistent_network, self.apiclient, id=isolated_persistent_network.id, guestvmcidr=guest_vm_cidr)
         self.assertEqual(guest_vm_cidr, update_response.cidr, "cidr in response is not as expected")
         vm_list = VirtualMachine.list(self.apiclient,
                                        id=virtual_machine_1.id)
@@ -1120,11 +1135,18 @@ class TestFailureScnarios(cloudstackTestCase):
                           virtual_machine_1.ipaddress,
                            "VM IP should not change after reservation")
         try:
-            virtual_machine_2 = self.create_virtual_machine(network_id=self.isolated_persistent_network.id)
+            virtual_machine_2 = VirtualMachine.create(self.apiclient,
+                                                          self.testData["virtual_machine"],
+                                                          networkids=isolated_persistent_network.id,
+                                                          serviceofferingid=self.service_offering.id,
+                                                          accountid=self.account.name,
+                                                          domainid=self.domain.id
+                                                          )
             if netaddr.IPAddress(virtual_machine_2.ipaddress) not in netaddr.IPNetwork(guest_vm_cidr):
                 self.fail("Newly created VM doesn't get IP from reserverd CIDR")
         except Exception as e:
             self.skipTest("VM creation fails, cannot validate the condition: %s" % e)
+        return
 
     @attr(tags=["advanced", "selfservice"])
     def test_reservation_after_router_restart(self):
@@ -1135,24 +1157,43 @@ class TestFailureScnarios(cloudstackTestCase):
         # validation
         # 1. guest vm cidr should be successfully updated with correct value
         # 2. network cidr should remain same after router restart
-        guest_vm_cidr = u"10.1.1.0/29"
+        networkOffering = self.isolated_persistent_network_offering
+        subnet = "10.1."+str(random.randrange(1,254))
+        gateway = subnet + ".1"
+        isolated_persistent_network = None
+        resultSet = createIsolatedNetwork(self, networkOffering.id, gateway=gateway)
+        if resultSet[0] == FAIL:
+            self.fail("Failed to create isolated network")
+        else:
+            isolated_persistent_network = resultSet[1]
+
+        response = verifyNetworkState(self.apiclient, isolated_persistent_network.id,\
+                        "implemented")
+        exceptionOccured = response[0]
+        isNetworkInDesiredState = response[1]
+        exceptionMessage = response[2]
 
-        update_response = Network.update(self.isolated_persistent_network, self.apiclient, id=self.isolated_persistent_network.id, guestvmcidr=guest_vm_cidr)
+        if (exceptionOccured or (not isNetworkInDesiredState)):
+            self.fail(exceptionMessage)
+        guest_vm_cidr = subnet +".0/29"
+
+        update_response = Network.update(isolated_persistent_network, self.apiclient, id=isolated_persistent_network.id, guestvmcidr=guest_vm_cidr)
         self.assertEqual(guest_vm_cidr, update_response.cidr, "cidr in response is not as expected")
 
         routers = Router.list(self.apiclient,
-                             networkid=self.isolated_persistent_network.id,
+                             networkid=isolated_persistent_network.id,
                              listall=True)
         self.assertEqual(validateList(routers)[0], PASS,
                     "routers list validation failed")
 
         Router.reboot(self.apiclient, routers[0].id)
-        networks = Network.list(self.apiclient, id=self.isolated_persistent_network.id)
+        networks = Network.list(self.apiclient, id=isolated_persistent_network.id)
         self.assertEqual(
                     validateList(networks)[0], PASS,
                     "list Networks should return valid response"
                     )
         self.assertEqual(networks[0].cidr, guest_vm_cidr, "guestvmcidr should match after router reboot")
+        return
 
     @attr(tags=["advanced", "selfservice"])
     def test_vm_create_outside_cidr_after_reservation(self):
@@ -1163,11 +1204,25 @@ class TestFailureScnarios(cloudstackTestCase):
         # validation
         # 1. guest vm cidr should be successfully updated with correct value
         # 2  newly created VM should not be created and result in exception
-        guest_vm_cidr = u"10.1.1.0/29"
-        update_response = Network.update(self.isolated_persistent_network, self.apiclient, id=self.isolated_persistent_network.id, guestvmcidr=guest_vm_cidr)
+        networkOffering = self.isolated_persistent_network_offering
+        subnet = "10.1."+str(random.randrange(1,254))
+        gateway = subnet + ".1"
+        isolated_persistent_network = None
+        resultSet = createIsolatedNetwork(self, networkOffering.id, gateway=gateway)
+        if resultSet[0] == FAIL:
+            self.fail("Failed to create isolated network")
+        else:
+            isolated_persistent_network = resultSet[1]
+        guest_vm_cidr = subnet +".0/29"
+        update_response = Network.update(isolated_persistent_network, self.apiclient, id=isolated_persistent_network.id, guestvmcidr=guest_vm_cidr)
         self.assertEqual(guest_vm_cidr, update_response.cidr, "cidr in response is not as expected")
-        try:
-            self.create_virtual_machine(network_id=self.isolated_persistent_network.id, ip_address=u"10.1.1.9")
-            self.fail("vm should not be created ")
-        except Exception as e:
-            self.debug("exception as IP is outside of guestvmcidr: %s" % e)
+        with self.assertRaises(Exception):
+            VirtualMachine.create(self.apiclient,
+                                  self.testData["virtual_machine"],
+                                  networkids=isolated_persistent_network.id,
+                                  serviceofferingid=self.service_offering.id,
+                                  accountid=self.account.name,
+                                  domainid=self.domain.id,
+                                  ipaddress="10.1.1.9"
+                                  )
+        return

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/77460e95/tools/marvin/marvin/codes.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/codes.py b/tools/marvin/marvin/codes.py
index ef49c0c..c72a6bd 100644
--- a/tools/marvin/marvin/codes.py
+++ b/tools/marvin/marvin/codes.py
@@ -60,6 +60,7 @@ JOB_INPROGRESS = 0
 JOB_SUCCEEDED = 1
 JOB_FAILED = 2
 JOB_CANCELLED = 3
+ERROR_CODE_530 = 530
 '''
 User Related Codes
 '''

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/77460e95/tools/marvin/marvin/lib/common.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/lib/common.py b/tools/marvin/marvin/lib/common.py
index ad79588..b946b92 100644
--- a/tools/marvin/marvin/lib/common.py
+++ b/tools/marvin/marvin/lib/common.py
@@ -1112,19 +1112,25 @@ def shouldTestBeSkipped(networkType, zoneType):
 
 def verifyNetworkState(apiclient, networkid, state):
     """List networks and check if the network state matches the given state"""
+    retriesCount = 10
+    isNetworkInDesiredState = False
+    exceptionOccured = False
+    exceptionMessage = ""
     try:
-        networks = Network.list(apiclient, id=networkid)
+        while retriesCount >= 0:
+            networks = Network.list(apiclient, id=networkid)
+            assert validateList(
+                networks)[0] == PASS, "Networks list validation failed"
+            if str(networks[0].state).lower() == state:
+                isNetworkInDesiredState = True
+                break
+            retriesCount -= 1
+            time.sleep(60)
     except Exception as e:
-        raise Exception(
-            "Failed while fetching network list with error: %s" %
-            e)
-    assert validateList(
-        networks)[0] == PASS, "Networks list validation failed, list is %s"\
-                              % networks
-    assert str(networks[0].state).lower(
-    ) == state, "network state should be %s, it is %s" \
-                % (state, networks[0].state)
-    return
+        exceptionOccured = True
+        exceptionMessage = e
+        return [exceptionOccured, isNetworkInDesiredState, exceptionMessage]
+    return [exceptionOccured, isNetworkInDesiredState, exceptionMessage]
 
 
 def verifyComputeOfferingCreation(apiclient, computeofferingid):