From 78fbaf7d4da995c0cdb0ae84606e66f72c6cf289 Mon Sep 17 00:00:00 2001 From: Boris Schrijver Date: Mon, 11 Jan 2016 09:57:35 +0100 Subject: [PATCH 1/2] Nullpointer Exception in NicProfileHelperImpl --- .../src/com/cloud/network/router/NicProfileHelperImpl.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/server/src/com/cloud/network/router/NicProfileHelperImpl.java b/server/src/com/cloud/network/router/NicProfileHelperImpl.java index 7d8c19ab09b..4a0faa90ace 100644 --- a/server/src/com/cloud/network/router/NicProfileHelperImpl.java +++ b/server/src/com/cloud/network/router/NicProfileHelperImpl.java @@ -63,6 +63,7 @@ public class NicProfileHelperImpl implements NicProfileHelper { @DB public NicProfile createPrivateNicProfileForGateway(final VpcGateway privateGateway, final VirtualRouter router) { final Network privateNetwork = _networkModel.getNetwork(privateGateway.getNetworkId()); + PrivateIpVO ipVO = _privateIpDao.allocateIpAddress(privateNetwork.getDataCenterId(), privateNetwork.getId(), privateGateway.getIp4Address()); final Long vpcId = privateGateway.getVpcId(); @@ -71,7 +72,11 @@ public class NicProfileHelperImpl implements NicProfileHelper { ipVO = _privateIpDao.findByIpAndVpcId(vpcId, privateGateway.getIp4Address()); } - final Nic privateNic = _nicDao.findByIp4AddressAndNetworkId(ipVO.getIpAddress(), privateNetwork.getId()); + Nic privateNic = null; + + if (ipVO != null) { + privateNic = _nicDao.findByIp4AddressAndNetworkId(ipVO.getIpAddress(), privateNetwork.getId()); + } NicProfile privateNicProfile = new NicProfile(); From de11b7307c2058959918ebc0eb22a55705d177b9 Mon Sep 17 00:00:00 2001 From: Boris Schrijver Date: Mon, 11 Jan 2016 14:34:08 +0100 Subject: [PATCH 2/2] Add integration test for restartVPC with cleanup, and Private Gateway enabled. --- test/integration/smoke/test_privategw_acl.py | 34 ++++++++++++++++++-- 1 file changed, 32 insertions(+), 2 deletions(-) diff --git a/test/integration/smoke/test_privategw_acl.py b/test/integration/smoke/test_privategw_acl.py index 7231a4b630b..754738b1923 100644 --- a/test/integration/smoke/test_privategw_acl.py +++ b/test/integration/smoke/test_privategw_acl.py @@ -253,7 +253,19 @@ class TestPrivateGwACL(cloudstackTestCase): self.performVPCTests(vpc_off) @attr(tags=["advanced"], required_hardware="true") - def test_03_rvpc_privategw_static_routes(self): + def test_03_vpc_privategw_restart_vpc_cleanup(self): + self.logger.debug("Creating a VPC offering..") + vpc_off = VpcOffering.create( + self.apiclient, + self.services["vpc_offering"]) + + self.logger.debug("Enabling the VPC offering created") + vpc_off.update(self.apiclient, state='Enabled') + + self.performVPCTests(vpc_off, True) + + @attr(tags=["advanced"], required_hardware="true") + def test_04_rvpc_privategw_static_routes(self): self.logger.debug("Creating a Redundant VPC offering..") vpc_off = VpcOffering.create( self.apiclient, @@ -264,7 +276,7 @@ class TestPrivateGwACL(cloudstackTestCase): self.performVPCTests(vpc_off) - def performVPCTests(self, 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') vpc_2 = self.createVPC(vpc_off, cidr = '10.0.2.0/24') @@ -312,6 +324,13 @@ 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) + if restart_with_cleanup: + self.reboot_vpc_with_cleanup(vpc_1, True) + self.reboot_vpc_with_cleanup(vpc_2, True) + + 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 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) @@ -539,3 +558,14 @@ class TestPrivateGwACL(cloudstackTestCase): 1, "Ping to outside world from VM should be successful" ) + + def reboot_vpc_with_cleanup(self, vpc, cleanup = True): + self.logger.debug("Restarting VPC %s with cleanup" % vpc.id) + + # Reboot the router + cmd = restartVPC.restartVPCCmd() + cmd.id = vpc.id + cmd.cleanup = cleanup + cmd.makeredundant = False + self.api_client.restartVPC(cmd) +