// Licensed to the Apache Software Foundation (ASF) under one // or more contributor license agreements. See the NOTICE file // distributed with this work for additional information // regarding copyright ownership. The ASF licenses this file // to you under the Apache License, Version 2.0 (the // "License"); you may not use this file except in compliance // with the License. You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, // software distributed under the License is distributed on an // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY // KIND, either express or implied. See the License for the // specific language governing permissions and limitations // under the License. package com.cloud.configuration; import java.lang.reflect.Field; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Random; import java.util.UUID; import org.apache.log4j.Logger; import org.junit.After; import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Mockito; import org.mockito.MockitoAnnotations; import org.apache.cloudstack.api.command.admin.vlan.DedicatePublicIpRangeCmd; import org.apache.cloudstack.api.command.admin.vlan.ReleasePublicIpRangeCmd; import org.apache.cloudstack.api.command.user.network.ListNetworkOfferingsCmd; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.engine.subsystem.api.storage.ZoneScope; import org.apache.cloudstack.framework.config.dao.ConfigurationDao; import org.apache.cloudstack.storage.datastore.db.ImageStoreDao; import org.apache.cloudstack.storage.datastore.db.ImageStoreVO; import com.cloud.configuration.Resource.ResourceType; import com.cloud.dc.AccountVlanMapVO; import com.cloud.dc.ClusterVO; import com.cloud.dc.DataCenter.NetworkType; import com.cloud.dc.DataCenterVO; import com.cloud.dc.HostPodVO; import com.cloud.dc.Vlan; import com.cloud.dc.VlanVO; import com.cloud.dc.dao.AccountVlanMapDao; import com.cloud.dc.dao.ClusterDao; import com.cloud.dc.dao.DataCenterDao; import com.cloud.dc.dao.DataCenterIpAddressDao; import com.cloud.dc.dao.DomainVlanMapDao; import com.cloud.dc.dao.HostPodDao; import com.cloud.dc.dao.VlanDao; import com.cloud.exception.InvalidParameterValueException; import com.cloud.host.HostVO; import com.cloud.host.dao.HostDao; import com.cloud.network.IpAddressManager; import com.cloud.network.Network; import com.cloud.network.Network.Capability; import com.cloud.network.NetworkModel; import com.cloud.network.Networks; import com.cloud.network.dao.FirewallRulesDao; import com.cloud.network.dao.IPAddressDao; import com.cloud.network.dao.IPAddressVO; import com.cloud.network.dao.PhysicalNetworkDao; import com.cloud.network.dao.PhysicalNetworkVO; import com.cloud.offering.NetworkOffering; import com.cloud.offerings.NetworkOfferingVO; import com.cloud.offerings.dao.NetworkOfferingDao; import com.cloud.projects.ProjectManager; import com.cloud.storage.VolumeVO; import com.cloud.storage.dao.VolumeDao; import com.cloud.user.Account; import com.cloud.user.AccountManager; import com.cloud.user.AccountVO; import com.cloud.user.ResourceLimitService; import com.cloud.user.User; import com.cloud.user.UserVO; import com.cloud.user.dao.AccountDao; import com.cloud.utils.db.Filter; import com.cloud.utils.db.SearchCriteria; import com.cloud.utils.db.TransactionLegacy; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.utils.net.Ip; import com.cloud.vm.VMInstanceVO; import com.cloud.vm.dao.VMInstanceDao; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyBoolean; import static org.mockito.Matchers.anyInt; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; public class ConfigurationManagerTest { private static final Logger s_logger = Logger.getLogger(ConfigurationManagerTest.class); @InjectMocks ConfigurationManagerImpl configurationMgr = new ConfigurationManagerImpl(); DedicatePublicIpRangeCmd dedicatePublicIpRangesCmd = new DedicatePublicIpRangeCmdExtn(); Class _dedicatePublicIpRangeClass = dedicatePublicIpRangesCmd.getClass().getSuperclass(); ReleasePublicIpRangeCmd releasePublicIpRangesCmd = new ReleasePublicIpRangeCmdExtn(); Class _releasePublicIpRangeClass = releasePublicIpRangesCmd.getClass().getSuperclass(); @Mock AccountManager _accountMgr; @Mock ProjectManager _projectMgr; @Mock ResourceLimitService _resourceLimitMgr; @Mock NetworkOrchestrationService _networkMgr; @Mock NetworkOfferingDao _networkOfferingDao; @Mock AccountDao _accountDao; @Mock VlanDao _vlanDao; @Mock AccountVlanMapDao _accountVlanMapDao; @Mock DomainVlanMapDao _domainVlanMapDao; @Mock IPAddressDao _publicIpAddressDao; @Mock DataCenterDao _zoneDao; @Mock FirewallRulesDao _firewallDao; @Mock IpAddressManager _ipAddrMgr; @Mock NetworkModel _networkModel; @Mock DataCenterIpAddressDao _privateIpAddressDao; @Mock VolumeDao _volumeDao; @Mock HostDao _hostDao; @Mock VMInstanceDao _vmInstanceDao; @Mock ClusterDao _clusterDao; @Mock HostPodDao _podDao; @Mock PhysicalNetworkDao _physicalNetworkDao; @Mock ImageStoreDao _imageStoreDao; @Mock ConfigurationDao _configDao; VlanVO vlan = new VlanVO(Vlan.VlanType.VirtualNetwork, "vlantag", "vlangateway", "vlannetmask", 1L, "iprange", 1L, 1L, null, null, null); @Mock Network network; @Mock Account account; @Before public void setup() throws Exception { MockitoAnnotations.initMocks(this); Account account = new AccountVO("testaccount", 1, "networkdomain", (short)0, UUID.randomUUID().toString()); when(configurationMgr._accountMgr.getAccount(anyLong())).thenReturn(account); when(configurationMgr._accountDao.findActiveAccount(anyString(), anyLong())).thenReturn(account); when(configurationMgr._accountMgr.getActiveAccountById(anyLong())).thenReturn(account); UserVO user = new UserVO(1, "testuser", "password", "firstname", "lastName", "email", "timezone", UUID.randomUUID().toString(), User.Source.UNKNOWN); CallContext.register(user, account); when(configurationMgr._publicIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(1); doNothing().when(configurationMgr._resourceLimitMgr).checkResourceLimit(any(Account.class), any(ResourceType.class), anyLong()); when(configurationMgr._accountVlanMapDao.persist(any(AccountVlanMapVO.class))).thenReturn(new AccountVlanMapVO()); when(configurationMgr._vlanDao.acquireInLockTable(anyLong(), anyInt())).thenReturn(vlan); Field dedicateIdField = _dedicatePublicIpRangeClass.getDeclaredField("id"); dedicateIdField.setAccessible(true); dedicateIdField.set(dedicatePublicIpRangesCmd, 1L); Field accountNameField = _dedicatePublicIpRangeClass.getDeclaredField("accountName"); accountNameField.setAccessible(true); accountNameField.set(dedicatePublicIpRangesCmd, "accountname"); Field projectIdField = _dedicatePublicIpRangeClass.getDeclaredField("projectId"); projectIdField.setAccessible(true); projectIdField.set(dedicatePublicIpRangesCmd, null); Field domainIdField = _dedicatePublicIpRangeClass.getDeclaredField("domainId"); domainIdField.setAccessible(true); domainIdField.set(dedicatePublicIpRangesCmd, 1L); Field releaseIdField = _releasePublicIpRangeClass.getDeclaredField("id"); releaseIdField.setAccessible(true); releaseIdField.set(releasePublicIpRangesCmd, 1L); } @After public void tearDown() { CallContext.unregister(); } @Test public void testDedicatePublicIpRange() throws Exception { s_logger.info("Running tests for DedicatePublicIpRange API"); /* * TEST 1: given valid parameters DedicatePublicIpRange should succeed */ runDedicatePublicIpRangePostiveTest(); /* * TEST 2: given invalid public ip range DedicatePublicIpRange should fail */ runDedicatePublicIpRangeInvalidRange(); /* * TEST 3: given public IP range that is already dedicated to a different account DedicatePublicIpRange should fail */ runDedicatePublicIpRangeDedicatedRange(); /* * TEST 4: given zone is of type Basic DedicatePublicIpRange should fail */ runDedicatePublicIpRangeInvalidZone(); /* * TEST 5: given range is already allocated to a different account DedicatePublicIpRange should fail */ runDedicatePublicIpRangeIPAdressAllocated(); } @Test public void testReleasePublicIpRange() throws Exception { s_logger.info("Running tests for DedicatePublicIpRange API"); /* * TEST 1: given valid parameters and no allocated public ip's in the range ReleasePublicIpRange should succeed */ runReleasePublicIpRangePostiveTest1(); /* * TEST 2: given valid parameters ReleasePublicIpRange should succeed */ runReleasePublicIpRangePostiveTest2(); /* * TEST 3: given range doesn't exist */ runReleasePublicIpRangeInvalidIpRange(); /* * TEST 4: given range is not dedicated to any account */ runReleaseNonDedicatedPublicIpRange(); } void runDedicatePublicIpRangePostiveTest() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runDedicatePublicIpRangePostiveTest"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan); when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByAccount(anyLong())).thenReturn(null); DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Advanced, null, null, true, true, null, null); when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc); List ipAddressList = new ArrayList(); IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false); ipAddressList.add(ipAddress); when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList); try { Vlan result = configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd); Assert.assertNotNull(result); } catch (Exception e) { s_logger.info("exception in testing runDedicatePublicIpRangePostiveTest message: " + e.toString()); } finally { txn.close("runDedicatePublicIpRangePostiveTest"); } } void runDedicatePublicIpRangeInvalidRange() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runDedicatePublicIpRangeInvalidRange"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(null); try { configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd); } catch (Exception e) { Assert.assertTrue(e.getMessage().contains("Unable to find vlan by id")); } finally { txn.close("runDedicatePublicIpRangeInvalidRange"); } } void runDedicatePublicIpRangeDedicatedRange() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runDedicatePublicIpRangeDedicatedRange"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan); // public ip range is already dedicated List accountVlanMaps = new ArrayList(); AccountVlanMapVO accountVlanMap = new AccountVlanMapVO(1, 1); accountVlanMaps.add(accountVlanMap); when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(accountVlanMaps); DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Advanced, null, null, true, true, null, null); when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc); List ipAddressList = new ArrayList(); IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false); ipAddressList.add(ipAddress); when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList); try { configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd); } catch (Exception e) { Assert.assertTrue(e.getMessage().contains("Public IP range has already been dedicated")); } finally { txn.close("runDedicatePublicIpRangePublicIpRangeDedicated"); } } void runDedicatePublicIpRangeInvalidZone() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runDedicatePublicIpRangeInvalidZone"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan); when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(null); // public ip range belongs to zone of type basic DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Basic, null, null, true, true, null, null); when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc); List ipAddressList = new ArrayList(); IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false); ipAddressList.add(ipAddress); when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList); try { configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd); } catch (Exception e) { Assert.assertTrue(e.getMessage().contains("Public IP range can be dedicated to an account only in the zone of type Advanced")); } finally { txn.close("runDedicatePublicIpRangeInvalidZone"); } } void runDedicatePublicIpRangeIPAdressAllocated() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runDedicatePublicIpRangeIPAdressAllocated"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan); when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByAccount(anyLong())).thenReturn(null); DataCenterVO dc = new DataCenterVO(UUID.randomUUID().toString(), "test", "8.8.8.8", null, "10.0.0.1", null, "10.0.0.1/24", null, null, NetworkType.Advanced, null, null, true, true, null, null); when(configurationMgr._zoneDao.findById(anyLong())).thenReturn(dc); // one of the ip addresses of the range is allocated to different account List ipAddressList = new ArrayList(); IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false); ipAddress.setAllocatedToAccountId(1L); ipAddressList.add(ipAddress); when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList); try { configurationMgr.dedicatePublicIpRange(dedicatePublicIpRangesCmd); } catch (Exception e) { Assert.assertTrue(e.getMessage().contains("Public IP address in range is allocated to another account")); } finally { txn.close("runDedicatePublicIpRangeIPAdressAllocated"); } } void runReleasePublicIpRangePostiveTest1() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runReleasePublicIpRangePostiveTest1"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan); List accountVlanMaps = new ArrayList(); AccountVlanMapVO accountVlanMap = new AccountVlanMapVO(1, 1); accountVlanMaps.add(accountVlanMap); when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(accountVlanMaps); // no allocated ip's when(configurationMgr._publicIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(0); when(configurationMgr._accountVlanMapDao.remove(anyLong())).thenReturn(true); try { Boolean result = configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd); Assert.assertTrue(result); } catch (Exception e) { s_logger.info("exception in testing runReleasePublicIpRangePostiveTest1 message: " + e.toString()); } finally { txn.close("runReleasePublicIpRangePostiveTest1"); } } void runReleasePublicIpRangePostiveTest2() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runReleasePublicIpRangePostiveTest2"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan); List accountVlanMaps = new ArrayList(); AccountVlanMapVO accountVlanMap = new AccountVlanMapVO(1, 1); accountVlanMaps.add(accountVlanMap); when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(accountVlanMaps); when(configurationMgr._publicIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(1); List ipAddressList = new ArrayList(); IPAddressVO ipAddress = new IPAddressVO(new Ip("75.75.75.75"), 1, 0xaabbccddeeffL, 10, false); ipAddressList.add(ipAddress); when(configurationMgr._publicIpAddressDao.listByVlanId(anyLong())).thenReturn(ipAddressList); when(configurationMgr._firewallDao.countRulesByIpId(anyLong())).thenReturn(0L); when(configurationMgr._ipAddrMgr.disassociatePublicIpAddress(anyLong(), anyLong(), any(Account.class))).thenReturn(true); when(configurationMgr._vlanDao.releaseFromLockTable(anyLong())).thenReturn(true); when(configurationMgr._accountVlanMapDao.remove(anyLong())).thenReturn(true); try { Boolean result = configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd); Assert.assertTrue(result); } catch (Exception e) { s_logger.info("exception in testing runReleasePublicIpRangePostiveTest2 message: " + e.toString()); } finally { txn.close("runReleasePublicIpRangePostiveTest2"); } } void runReleasePublicIpRangeInvalidIpRange() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runReleasePublicIpRangeInvalidIpRange"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(null); try { configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd); } catch (Exception e) { Assert.assertTrue(e.getMessage().contains("Please specify a valid IP range id")); } finally { txn.close("runReleasePublicIpRangeInvalidIpRange"); } } void runReleaseNonDedicatedPublicIpRange() throws Exception { TransactionLegacy txn = TransactionLegacy.open("runReleaseNonDedicatedPublicIpRange"); when(configurationMgr._vlanDao.findById(anyLong())).thenReturn(vlan); when(configurationMgr._accountVlanMapDao.listAccountVlanMapsByVlan(anyLong())).thenReturn(null); when(configurationMgr._domainVlanMapDao.listDomainVlanMapsByVlan(anyLong())).thenReturn(null); try { configurationMgr.releasePublicIpRange(releasePublicIpRangesCmd); } catch (Exception e) { Assert.assertTrue(e.getMessage().contains("as it not dedicated to any domain and any account")); } finally { txn.close("runReleaseNonDedicatedPublicIpRange"); } } @Test public void searchForNetworkOfferingsTest() { List offerings = Arrays.asList( new NetworkOfferingVO("off1", "off1", Networks.TrafficType.Guest, false, false, null, null, false, NetworkOffering.Availability.Optional, null, Network.GuestType.Isolated, true, false, false, false, false, false), new NetworkOfferingVO("off2", "off2", Networks.TrafficType.Guest, false, false, null, null, false, NetworkOffering.Availability.Optional, null, Network.GuestType.Isolated, true, false, false, false, false, false), new NetworkOfferingVO("off3", "off3", Networks.TrafficType.Guest, false, false, null, null, false, NetworkOffering.Availability.Optional, null, Network.GuestType.Isolated, true, false, false, false, false, true) ); Mockito.when(_networkOfferingDao.createSearchCriteria()).thenReturn(Mockito.mock(SearchCriteria.class)); Mockito.when(_networkOfferingDao.search(Mockito.any(SearchCriteria.class), Mockito.any(Filter.class))).thenReturn(offerings); ListNetworkOfferingsCmd cmd = Mockito.spy(ListNetworkOfferingsCmd.class); Mockito.when(cmd.getPageSize()).thenReturn(10); assertThat(configurationMgr.searchForNetworkOfferings(cmd).second(), is(3)); Mockito.when(cmd.getForVpc()).thenReturn(Boolean.FALSE); assertThat(configurationMgr.searchForNetworkOfferings(cmd).second(), is(2)); } @Test public void validateEmptyStaticNatServiceCapablitiesTest() { Map staticNatServiceCapabilityMap = new HashMap(); configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); } @Test public void validateInvalidStaticNatServiceCapablitiesTest() { Map staticNatServiceCapabilityMap = new HashMap(); staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "Frue and Talse"); boolean caught = false; try { configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); } catch (InvalidParameterValueException e) { Assert.assertTrue(e.getMessage(), e.getMessage().contains("(frue and talse)")); caught = true; } Assert.assertTrue("should not be accepted", caught); } @Test public void validateTTStaticNatServiceCapablitiesTest() { Map staticNatServiceCapabilityMap = new HashMap(); staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "true and Talse"); staticNatServiceCapabilityMap.put(Capability.ElasticIp, "True"); configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); } @Test public void validateFTStaticNatServiceCapablitiesTest() { Map staticNatServiceCapabilityMap = new HashMap(); staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "false"); staticNatServiceCapabilityMap.put(Capability.ElasticIp, "True"); configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); } @Test public void validateTFStaticNatServiceCapablitiesTest() { Map staticNatServiceCapabilityMap = new HashMap(); staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "true and Talse"); staticNatServiceCapabilityMap.put(Capability.ElasticIp, "false"); boolean caught = false; try { configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); } catch (InvalidParameterValueException e) { Assert.assertTrue( e.getMessage(), e.getMessage().contains( "Capability " + Capability.AssociatePublicIP.getName() + " can only be set when capability " + Capability.ElasticIp.getName() + " is true")); caught = true; } Assert.assertTrue("should not be accepted", caught); } @Test public void validateFFStaticNatServiceCapablitiesTest() { Map staticNatServiceCapabilityMap = new HashMap(); staticNatServiceCapabilityMap.put(Capability.AssociatePublicIP, "false"); staticNatServiceCapabilityMap.put(Capability.ElasticIp, "False"); configurationMgr.validateStaticNatServiceCapablities(staticNatServiceCapabilityMap); } public class DedicatePublicIpRangeCmdExtn extends DedicatePublicIpRangeCmd { @Override public long getEntityOwnerId() { return 1; } } public class ReleasePublicIpRangeCmdExtn extends ReleasePublicIpRangeCmd { @Override public long getEntityOwnerId() { return 1; } } @Test public void checkIfPodIsDeletableSuccessTest() { HostPodVO hostPodVO = Mockito.mock(HostPodVO.class); Mockito.when(hostPodVO.getDataCenterId()).thenReturn(new Random().nextLong()); Mockito.when(_podDao.findById(anyLong())).thenReturn(hostPodVO); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_volumeDao.findByPod(anyLong())).thenReturn(new ArrayList()); Mockito.when(_hostDao.findByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_vmInstanceDao.listByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_clusterDao.listByPodId(anyLong())).thenReturn(new ArrayList()); configurationMgr.checkIfPodIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfPodIsDeletableFailureOnPrivateIpAddressTest() { HostPodVO hostPodVO = Mockito.mock(HostPodVO.class); Mockito.when(hostPodVO.getDataCenterId()).thenReturn(new Random().nextLong()); Mockito.when(_podDao.findById(anyLong())).thenReturn(hostPodVO); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(1); Mockito.when(_volumeDao.findByPod(anyLong())).thenReturn(new ArrayList()); Mockito.when(_hostDao.findByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_vmInstanceDao.listByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_clusterDao.listByPodId(anyLong())).thenReturn(new ArrayList()); configurationMgr.checkIfPodIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfPodIsDeletableFailureOnVolumeTest() { HostPodVO hostPodVO = Mockito.mock(HostPodVO.class); Mockito.when(hostPodVO.getDataCenterId()).thenReturn(new Random().nextLong()); Mockito.when(_podDao.findById(anyLong())).thenReturn(hostPodVO); VolumeVO volumeVO = Mockito.mock(VolumeVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(volumeVO); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_volumeDao.findByPod(anyLong())).thenReturn(arrayList); Mockito.when(_hostDao.findByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_vmInstanceDao.listByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_clusterDao.listByPodId(anyLong())).thenReturn(new ArrayList()); configurationMgr.checkIfPodIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfPodIsDeletableFailureOnHostTest() { HostPodVO hostPodVO = Mockito.mock(HostPodVO.class); Mockito.when(hostPodVO.getDataCenterId()).thenReturn(new Random().nextLong()); Mockito.when(_podDao.findById(anyLong())).thenReturn(hostPodVO); HostVO hostVO = Mockito.mock(HostVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(hostVO); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_volumeDao.findByPod(anyLong())).thenReturn(new ArrayList()); Mockito.when(_hostDao.findByPodId(anyLong())).thenReturn(arrayList); Mockito.when(_vmInstanceDao.listByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_clusterDao.listByPodId(anyLong())).thenReturn(new ArrayList()); configurationMgr.checkIfPodIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfPodIsDeletableFailureOnVmInstanceTest() { HostPodVO hostPodVO = Mockito.mock(HostPodVO.class); Mockito.when(hostPodVO.getDataCenterId()).thenReturn(new Random().nextLong()); Mockito.when(_podDao.findById(anyLong())).thenReturn(hostPodVO); VMInstanceVO vMInstanceVO = Mockito.mock(VMInstanceVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(vMInstanceVO); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_volumeDao.findByPod(anyLong())).thenReturn(new ArrayList()); Mockito.when(_hostDao.findByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_vmInstanceDao.listByPodId(anyLong())).thenReturn(arrayList); Mockito.when(_clusterDao.listByPodId(anyLong())).thenReturn(new ArrayList()); configurationMgr.checkIfPodIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfPodIsDeletableFailureOnClusterTest() { HostPodVO hostPodVO = Mockito.mock(HostPodVO.class); Mockito.when(hostPodVO.getDataCenterId()).thenReturn(new Random().nextLong()); Mockito.when(_podDao.findById(anyLong())).thenReturn(hostPodVO); ClusterVO clusterVO = Mockito.mock(ClusterVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(clusterVO); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_volumeDao.findByPod(anyLong())).thenReturn(new ArrayList()); Mockito.when(_hostDao.findByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_vmInstanceDao.listByPodId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_clusterDao.listByPodId(anyLong())).thenReturn(arrayList); configurationMgr.checkIfPodIsDeletable(new Random().nextLong()); } @Test public void checkIfZoneIsDeletableSuccessTest() { Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(new ArrayList()); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(new ArrayList()); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfZoneIsDeletableFailureOnHostTest() { HostVO hostVO = Mockito.mock(HostVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(hostVO); Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(arrayList); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(new ArrayList()); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(new ArrayList()); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfZoneIsDeletableFailureOnPodTest() { HostPodVO hostPodVO = Mockito.mock(HostPodVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(hostPodVO); Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(arrayList); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(new ArrayList()); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(new ArrayList()); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfZoneIsDeletableFailureOnPrivateIpAddressTest() { Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(1); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(new ArrayList()); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(new ArrayList()); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfZoneIsDeletableFailureOnPublicIpAddressTest() { Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(1); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(new ArrayList()); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(new ArrayList()); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfZoneIsDeletableFailureOnVmInstanceTest() { VMInstanceVO vMInstanceVO = Mockito.mock(VMInstanceVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(vMInstanceVO); Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(arrayList); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(new ArrayList()); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(new ArrayList()); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfZoneIsDeletableFailureOnVolumeTest() { VolumeVO volumeVO = Mockito.mock(VolumeVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(volumeVO); Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(arrayList); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(new ArrayList()); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test(expected = CloudRuntimeException.class) public void checkIfZoneIsDeletableFailureOnPhysicalNetworkTest() { PhysicalNetworkVO physicalNetworkVO = Mockito.mock(PhysicalNetworkVO.class); ArrayList arrayList = new ArrayList(); arrayList.add(physicalNetworkVO); Mockito.when(_hostDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_podDao.listByDataCenterId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_privateIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_publicIpAddressDao.countIPs(anyLong(), anyBoolean())).thenReturn(0); Mockito.when(_vmInstanceDao.listByZoneId(anyLong())).thenReturn(new ArrayList()); Mockito.when(_volumeDao.findByDc(anyLong())).thenReturn(new ArrayList()); Mockito.when(_physicalNetworkDao.listByZone(anyLong())).thenReturn(arrayList); Mockito.when(_imageStoreDao.findByScope(any(ZoneScope.class))).thenReturn(new ArrayList()); configurationMgr.checkIfZoneIsDeletable(new Random().nextLong()); } @Test public void hasSameSubnetTest() { //Ipv4 Test boolean result; result = configurationMgr.hasSameSubnet(false, null, null, null, null, null, null, false, null, null, null, null, null); Assert.assertFalse(result); try { configurationMgr.hasSameSubnet(true, "10.0.0.1", "255.255.255.0", "10.0.0.2", "255.255.255.0", "10.0.0.2", "10.0.0.10", false, null, null, null, null, null); Assert.fail(); } catch (InvalidParameterValueException e) { Assert.assertEquals(e.getMessage(), "The gateway of the subnet should be unique. The subnet already has a gateway 10.0.0.1"); } try { configurationMgr.hasSameSubnet(true, "10.0.0.1", "255.255.0.0", "10.0.0.2", "255.255.255.0", "10.0.0.2", "10.0.0.10", false, null, null, null, null, null); Assert.fail(); } catch (InvalidParameterValueException e){ Assert.assertEquals(e.getMessage(), "The subnet you are trying to add is a subset of the existing subnet having gateway 10.0.0.1 and netmask 255.255.0.0"); } try { configurationMgr.hasSameSubnet(true, "10.0.0.1", "255.255.255.0", "10.0.0.2", "255.255.0.0", "10.0.0.2", "10.0.0.10", false, null, null, null, null, null); Assert.fail(); } catch (InvalidParameterValueException e) { Assert.assertEquals(e.getMessage(), "The subnet you are trying to add is a superset of the existing subnet having gateway 10.0.0.1 and netmask 255.255.255.0"); } result = configurationMgr.hasSameSubnet(true, "10.0.0.1", "255.255.255.0", "10.0.0.1", "255.255.255.0", "10.0.0.2", "10.0.0.10", false, null, null, null, null, null); Assert.assertTrue(result); //Ipv6 Test Network ipV6Network = mock(Network.class); when(ipV6Network.getIp6Gateway()).thenReturn("2001:db8:0:f101::1"); when(ipV6Network.getIp6Cidr()).thenReturn("2001:db8:0:f101::0/64"); doThrow(new InvalidParameterValueException("Exception from Mock: startIPv6 is not in ip6cidr indicated network!")).when(configurationMgr._networkModel).checkIp6Parameters("2001:db9:0:f101::2", "2001:db9:0:f101::a", "2001:db8:0:f101::1", "2001:db8:0:f101::0/64"); doThrow(new InvalidParameterValueException("Exception from Mock: endIPv6 is not in ip6cidr indicated network!")).when(configurationMgr._networkModel).checkIp6Parameters("2001:db8:0:f101::a", "2001:db9:0:f101::2", "2001:db8:0:f101::1", "2001:db8:0:f101::0/64"); doThrow(new InvalidParameterValueException("ip6Gateway and ip6Cidr should be defined when startIPv6/endIPv6 are passed in")).when(configurationMgr._networkModel).checkIp6Parameters(Mockito.anyString(), Mockito.anyString(), Mockito.isNull(String.class), Mockito.isNull(String.class)); configurationMgr.hasSameSubnet(false, null, null, null, null, null, null, true, "2001:db8:0:f101::1", "2001:db8:0:f101::0/64", "2001:db8:0:f101::2", "2001:db8:0:f101::a", ipV6Network); Assert.assertTrue(result); try { configurationMgr.hasSameSubnet(false, null, null, null, null, null, null, true, "2001:db8:0:f101::2", "2001:db8:0:f101::0/64", "2001:db8:0:f101::2", "2001:db8:0:f101::a", ipV6Network); Assert.fail(); } catch (InvalidParameterValueException e){ Assert.assertEquals(e.getMessage(), "The input gateway 2001:db8:0:f101::2 is not same as network gateway 2001:db8:0:f101::1"); } try { configurationMgr.hasSameSubnet(false, null, null, null, null, null, null, true, "2001:db8:0:f101::1", "2001:db8:0:f101::0/63", "2001:db8:0:f101::2", "2001:db8:0:f101::a", ipV6Network); Assert.fail(); } catch (InvalidParameterValueException e){ Assert.assertEquals(e.getMessage(), "The input cidr 2001:db8:0:f101::0/63 is not same as network cidr 2001:db8:0:f101::0/64"); } try { configurationMgr.hasSameSubnet(false, null, null, null, null, null, null, true, "2001:db8:0:f101::1", "2001:db8:0:f101::0/64", "2001:db9:0:f101::2", "2001:db9:0:f101::a", ipV6Network); Assert.fail(); } catch (InvalidParameterValueException e) { Assert.assertEquals(e.getMessage(), "Exception from Mock: startIPv6 is not in ip6cidr indicated network!"); } try { configurationMgr.hasSameSubnet(false, null, null, null, null, null, null, true, "2001:db8:0:f101::1", "2001:db8:0:f101::0/64", "2001:db8:0:f101::a", "2001:db9:0:f101::2", ipV6Network); Assert.fail(); } catch(InvalidParameterValueException e){ Assert.assertEquals(e.getMessage(), "Exception from Mock: endIPv6 is not in ip6cidr indicated network!"); } result = configurationMgr.hasSameSubnet(false, null, null, null, null, null, null, true, null, null, "2001:db8:0:f101::2", "2001:db8:0:f101::a", ipV6Network); Assert.assertTrue(result); } }