diff --git a/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java b/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java index 302e05dcaa2a..4283f81ffe2a 100644 --- a/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java +++ b/server/src/main/java/com/cloud/network/lb/LoadBalancingRulesManagerImpl.java @@ -1706,7 +1706,7 @@ public LoadBalancer createPublicLoadBalancerRule(String xId, String name, String IpAddress systemIp = null; NetworkOffering off = _entityMgr.findById(NetworkOffering.class, network.getNetworkOfferingId()); - if (srcPortStart == DNS_PORT && ipVO.isSourceNat()) { + if (srcPortStart == DNS_PORT && ipVO != null && ipVO.isSourceNat()) { List offeringServices = _networkOfferingServiceDao.listByNetworkOfferingId(network.getNetworkOfferingId()); for (NetworkOfferingServiceMapVO serviceMapVo: offeringServices) { if (serviceMapVo.getService().equals(Service.Dns.getName())) { diff --git a/server/src/test/java/com/cloud/network/lb/LoadBalancingRulesManagerImplTest.java b/server/src/test/java/com/cloud/network/lb/LoadBalancingRulesManagerImplTest.java index 184c853637b6..055d3fc663ba 100644 --- a/server/src/test/java/com/cloud/network/lb/LoadBalancingRulesManagerImplTest.java +++ b/server/src/test/java/com/cloud/network/lb/LoadBalancingRulesManagerImplTest.java @@ -17,10 +17,16 @@ package com.cloud.network.lb; +import com.cloud.exception.InvalidParameterValueException; import com.cloud.network.Network; +import com.cloud.network.NetworkModel; import com.cloud.network.dao.LoadBalancerVO; import com.cloud.network.dao.NetworkDao; import com.cloud.network.dao.NetworkVO; +import com.cloud.offering.NetworkOffering; +import com.cloud.user.Account; +import com.cloud.user.AccountManager; +import com.cloud.utils.db.EntityManager; import com.cloud.utils.exception.CloudRuntimeException; import org.apache.cloudstack.api.ServerApiException; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; @@ -48,6 +54,21 @@ public class LoadBalancingRulesManagerImplTest{ @Mock NetworkOrchestrationService _networkMgr; + @Mock + EntityManager _entityMgr; + + @Mock + AccountManager _accountMgr; + + @Mock + NetworkModel _networkModel; + + @Mock + NetworkVO networkMock; + + private long accountId = 10L; + private long networkId = 4L; + @Spy @InjectMocks LoadBalancingRulesManagerImpl lbr = new LoadBalancingRulesManagerImpl(); @@ -101,4 +122,19 @@ public void testGetLoadBalancerServiceProviderFail() { Network.Provider provider = lbr.getLoadBalancerServiceProvider(loadBalancerMock); } + + @Test(expected = InvalidParameterValueException.class) + public void createPublicLoadBalancerRuleWithDnsPortAndNoIpDoesNotNpe() throws Exception { + long lbOwnerId = accountId; + long networkOfferingId = 7L; + when(_accountMgr.getAccount(lbOwnerId)).thenReturn(Mockito.mock(Account.class)); + when(_networkModel.getNetwork(networkId)).thenReturn(networkMock); + when(networkMock.getNetworkOfferingId()).thenReturn(networkOfferingId); + NetworkOffering off = Mockito.mock(NetworkOffering.class); + when(_entityMgr.findById(NetworkOffering.class, networkOfferingId)).thenReturn(off); + when(off.isElasticLb()).thenReturn(false); + + lbr.createPublicLoadBalancerRule("xid", "name", "desc", 53, 53, 53, 53, + null, "tcp", "roundrobin", networkId, lbOwnerId, false, "tcp", null, null); + } }