mirror of https://github.com/apache/cloudstack.git
1055 lines
55 KiB
Java
1055 lines
55 KiB
Java
// 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 com.cloud.dc.dao.DataCenterDao;
|
|
import com.cloud.domain.Domain;
|
|
import com.cloud.domain.DomainVO;
|
|
import com.cloud.domain.dao.DomainDao;
|
|
import com.cloud.exception.InvalidParameterValueException;
|
|
import com.cloud.network.Network;
|
|
import com.cloud.network.Networks;
|
|
import com.cloud.offering.DiskOffering;
|
|
import com.cloud.offering.NetworkOffering;
|
|
import com.cloud.offering.ServiceOffering;
|
|
import com.cloud.offerings.NetworkOfferingVO;
|
|
import com.cloud.offerings.dao.NetworkOfferingDao;
|
|
import com.cloud.offerings.dao.NetworkOfferingServiceMapDao;
|
|
import com.cloud.service.ServiceOfferingVO;
|
|
import com.cloud.service.dao.ServiceOfferingDao;
|
|
import com.cloud.service.dao.ServiceOfferingDetailsDao;
|
|
import com.cloud.storage.DiskOfferingVO;
|
|
import com.cloud.storage.Storage;
|
|
import com.cloud.storage.dao.DiskOfferingDao;
|
|
import com.cloud.user.Account;
|
|
import com.cloud.user.AccountVO;
|
|
import com.cloud.user.User;
|
|
import com.cloud.user.UserVO;
|
|
import com.cloud.user.dao.AccountDao;
|
|
import com.cloud.user.dao.UserDao;
|
|
import com.cloud.utils.DomainHelper;
|
|
import com.cloud.utils.db.EntityManager;
|
|
import com.cloud.vm.VirtualMachine;
|
|
import com.cloud.gpu.dao.VgpuProfileDao;
|
|
import org.apache.cloudstack.api.ApiConstants;
|
|
import org.apache.cloudstack.api.command.admin.network.CloneNetworkOfferingCmd;
|
|
import org.apache.cloudstack.api.command.admin.offering.CloneDiskOfferingCmd;
|
|
import org.apache.cloudstack.api.command.admin.offering.CloneServiceOfferingCmd;
|
|
import org.apache.cloudstack.context.CallContext;
|
|
import org.apache.cloudstack.resourcedetail.dao.DiskOfferingDetailsDao;
|
|
import org.apache.cloudstack.vm.lease.VMLeaseManager;
|
|
import org.junit.After;
|
|
import org.junit.Assert;
|
|
import org.junit.Before;
|
|
import org.junit.Test;
|
|
import org.junit.runner.RunWith;
|
|
import org.mockito.InjectMocks;
|
|
import org.mockito.Mock;
|
|
import org.mockito.MockedStatic;
|
|
import org.mockito.Mockito;
|
|
import org.mockito.Spy;
|
|
import org.mockito.junit.MockitoJUnitRunner;
|
|
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
|
|
import static org.mockito.ArgumentMatchers.any;
|
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
|
import static org.mockito.ArgumentMatchers.anyInt;
|
|
import static org.mockito.ArgumentMatchers.anyList;
|
|
import static org.mockito.ArgumentMatchers.anyLong;
|
|
import static org.mockito.ArgumentMatchers.anyMap;
|
|
import static org.mockito.ArgumentMatchers.anyString;
|
|
import static org.mockito.ArgumentMatchers.eq;
|
|
import static org.mockito.Mockito.mock;
|
|
import static org.mockito.Mockito.verify;
|
|
import static org.mockito.Mockito.when;
|
|
|
|
@RunWith(MockitoJUnitRunner.Silent.class)
|
|
public class ConfigurationManagerCloneIntegrationTest {
|
|
|
|
@InjectMocks
|
|
@Spy
|
|
private ConfigurationManagerImpl configurationManager;
|
|
|
|
@Mock
|
|
private ServiceOfferingDao serviceOfferingDao;
|
|
|
|
@Mock
|
|
private ServiceOfferingDetailsDao serviceOfferingDetailsDao;
|
|
|
|
@Mock
|
|
private DiskOfferingDao diskOfferingDao;
|
|
|
|
@Mock
|
|
private DiskOfferingDetailsDao diskOfferingDetailsDao;
|
|
|
|
@Mock
|
|
private NetworkOfferingDao networkOfferingDao;
|
|
|
|
@Mock
|
|
private NetworkOfferingServiceMapDao networkOfferingServiceMapDao;
|
|
|
|
@Mock
|
|
private DomainDao domainDao;
|
|
|
|
@Mock
|
|
private DataCenterDao dataCenterDao;
|
|
|
|
@Mock
|
|
private EntityManager entityManager;
|
|
|
|
@Mock
|
|
private com.cloud.network.NetworkModel _networkModel;
|
|
|
|
@Mock
|
|
private com.cloud.offerings.dao.NetworkOfferingDetailsDao networkOfferingDetailsDao;
|
|
|
|
@Mock
|
|
private VgpuProfileDao vgpuProfileDao;
|
|
|
|
@Mock
|
|
private AccountDao accountDao;
|
|
|
|
@Mock
|
|
private UserDao userDao;
|
|
|
|
@Mock
|
|
private DomainHelper domainHelper;
|
|
|
|
private MockedStatic<CallContext> callContextMock;
|
|
|
|
@Before
|
|
public void setUp() {
|
|
callContextMock = Mockito.mockStatic(CallContext.class);
|
|
CallContext callContext = mock(CallContext.class);
|
|
callContextMock.when(CallContext::current).thenReturn(callContext);
|
|
|
|
AccountVO account = mock(AccountVO.class);
|
|
User user = mock(User.class);
|
|
Domain domain = mock(DomainVO.class);
|
|
UserVO userVO = mock(UserVO.class);
|
|
|
|
Mockito.lenient().when(callContext.getCallingAccount()).thenReturn(account);
|
|
Mockito.lenient().when(callContext.getCallingUser()).thenReturn(user);
|
|
Mockito.lenient().when(callContext.getCallingUserId()).thenReturn(1L);
|
|
Mockito.lenient().when(account.getDomainId()).thenReturn(1L);
|
|
Mockito.lenient().when(account.getId()).thenReturn(1L);
|
|
Mockito.lenient().when(user.getId()).thenReturn(1L);
|
|
Mockito.lenient().when(entityManager.findById(eq(Domain.class), anyLong())).thenReturn(domain);
|
|
|
|
Mockito.doAnswer(invocation -> {
|
|
DiskOfferingVO d = mock(DiskOfferingVO.class);
|
|
when(d.getId()).thenReturn(999L);
|
|
return d;
|
|
}).when(configurationManager).createDiskOffering(
|
|
anyLong(), anyList(), anyList(), anyString(), anyString(), anyString(),
|
|
anyLong(), anyString(), anyBoolean(), anyBoolean(), anyBoolean(), any(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyInt(), anyString(), any(), anyLong(), anyBoolean(), anyBoolean());
|
|
|
|
|
|
// User/Account DAO stubs used by createDiskOffering
|
|
Mockito.lenient().when(userDao.findById(anyLong())).thenReturn(userVO);
|
|
Mockito.lenient().when(userVO.getAccountId()).thenReturn(1L);
|
|
Mockito.lenient().when(userVO.getRemoved()).thenReturn(null);
|
|
Mockito.lenient().when(accountDao.findById(anyLong())).thenReturn(account);
|
|
Mockito.lenient().when(account.getType()).thenReturn(Account.Type.ADMIN);
|
|
}
|
|
|
|
@After
|
|
public void tearDown() {
|
|
if (callContextMock != null) {
|
|
callContextMock.close();
|
|
}
|
|
}
|
|
|
|
@Test(expected = InvalidParameterValueException.class)
|
|
public void testCloneServiceOfferingFailsWhenSourceNotFound() {
|
|
CloneServiceOfferingCmd cmd = mock(CloneServiceOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(999L);
|
|
when(cmd.getServiceOfferingName()).thenReturn("cloned-offering");
|
|
when(serviceOfferingDao.findById(999L)).thenReturn(null);
|
|
|
|
configurationManager.cloneServiceOffering(cmd);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneServiceOfferingInheritsAllPropertiesFromSource() {
|
|
Long sourceId = 1L;
|
|
|
|
ServiceOfferingVO sourceOffering = mock(ServiceOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Display Text");
|
|
when(sourceOffering.getCpu()).thenReturn(2);
|
|
when(sourceOffering.getSpeed()).thenReturn(1000);
|
|
when(sourceOffering.getRamSize()).thenReturn(2048);
|
|
when(sourceOffering.isOfferHA()).thenReturn(true);
|
|
when(sourceOffering.getLimitCpuUse()).thenReturn(false);
|
|
when(sourceOffering.isVolatileVm()).thenReturn(false);
|
|
when(sourceOffering.isCustomized()).thenReturn(false);
|
|
when(sourceOffering.isDynamicScalingEnabled()).thenReturn(true);
|
|
when(sourceOffering.getDiskOfferingStrictness()).thenReturn(false);
|
|
when(sourceOffering.getHostTag()).thenReturn("host-tag");
|
|
when(sourceOffering.getRateMbps()).thenReturn(100);
|
|
when(sourceOffering.getDeploymentPlanner()).thenReturn("FirstFitPlanner");
|
|
when(sourceOffering.isSystemUse()).thenReturn(false);
|
|
when(sourceOffering.getVmType()).thenReturn(VirtualMachine.Type.User.toString());
|
|
when(sourceOffering.getDiskOfferingId()).thenReturn(null);
|
|
when(sourceOffering.getVgpuProfileId()).thenReturn(null);
|
|
when(sourceOffering.getGpuCount()).thenReturn(null);
|
|
when(sourceOffering.getGpuDisplay()).thenReturn(false);
|
|
|
|
CloneServiceOfferingCmd cmd = mock(CloneServiceOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getServiceOfferingName()).thenReturn("cloned-offering");
|
|
when(cmd.getFullUrlParams()).thenReturn(new HashMap<>());
|
|
// Ensure no vGPU is specified in the command (explicitly stub to null)
|
|
when(cmd.getVgpuProfileId()).thenReturn(null);
|
|
when(cmd.getGpuCount()).thenReturn(null);
|
|
|
|
when(serviceOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
|
|
ServiceOfferingVO clonedOffering = mock(ServiceOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-offering");
|
|
when(clonedOffering.getCpu()).thenReturn(2);
|
|
when(clonedOffering.getSpeed()).thenReturn(1000);
|
|
when(clonedOffering.getRamSize()).thenReturn(2048);
|
|
|
|
when(serviceOfferingDao.persist(any(ServiceOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
DiskOfferingVO persistedDisk = mock(DiskOfferingVO.class);
|
|
when(persistedDisk.getId()).thenReturn(999L);
|
|
when(diskOfferingDao.findById(anyLong())).thenReturn(persistedDisk);
|
|
when(persistedDisk.getProvisioningType()).thenReturn(Storage.ProvisioningType.THIN);
|
|
when(diskOfferingDao.persist(any(DiskOfferingVO.class))).thenReturn(persistedDisk);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createServiceOffering(
|
|
anyLong(), anyBoolean(), any(VirtualMachine.Type.class), anyString(),
|
|
any(Integer.class), any(Integer.class), any(Integer.class), anyString(), anyString(), anyBoolean(),
|
|
anyBoolean(), anyBoolean(), anyBoolean(), anyString(), anyList(), anyList(), anyString(), any(Integer.class),
|
|
anyString(), anyMap(), anyLong(), any(Boolean.class),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
any(Integer.class), anyString(), anyLong(), anyBoolean(), anyLong(), anyBoolean(), anyBoolean(), anyBoolean(),
|
|
anyLong(), any(Integer.class), any(Boolean.class), anyBoolean(), any(Integer.class), any(VMLeaseManager.ExpiryAction.class), anyLong()
|
|
);
|
|
|
|
ServiceOffering result = configurationManager.cloneServiceOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned offering should not be null", result);
|
|
verify(serviceOfferingDao).findById(sourceId);
|
|
Assert.assertEquals("Cloned offering should have correct name", "cloned-offering", result.getName());
|
|
Assert.assertEquals("Cloned offering should inherit CPU count", Integer.valueOf(2), result.getCpu());
|
|
Assert.assertEquals("Cloned offering should inherit CPU speed", Integer.valueOf(1000), result.getSpeed());
|
|
Assert.assertEquals("Cloned offering should inherit RAM", Integer.valueOf(2048), result.getRamSize());
|
|
}
|
|
|
|
@Test
|
|
public void testCloneServiceOfferingOverridesProvidedParameters() {
|
|
Long sourceId = 1L;
|
|
|
|
ServiceOfferingVO sourceOffering = mock(ServiceOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Display Text");
|
|
when(sourceOffering.getCpu()).thenReturn(2);
|
|
when(sourceOffering.getSpeed()).thenReturn(1000);
|
|
when(sourceOffering.getRamSize()).thenReturn(2048);
|
|
when(sourceOffering.isOfferHA()).thenReturn(true);
|
|
when(sourceOffering.getLimitCpuUse()).thenReturn(false);
|
|
when(sourceOffering.isVolatileVm()).thenReturn(false);
|
|
when(sourceOffering.isCustomized()).thenReturn(false);
|
|
when(sourceOffering.isDynamicScalingEnabled()).thenReturn(true);
|
|
when(sourceOffering.getDiskOfferingStrictness()).thenReturn(false);
|
|
when(sourceOffering.isSystemUse()).thenReturn(false);
|
|
when(sourceOffering.getVmType()).thenReturn(VirtualMachine.Type.User.toString());
|
|
when(sourceOffering.getDiskOfferingId()).thenReturn(1L);
|
|
when(sourceOffering.getVgpuProfileId()).thenReturn(null);
|
|
when(sourceOffering.getGpuCount()).thenReturn(null);
|
|
|
|
CloneServiceOfferingCmd cmd = mock(CloneServiceOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getServiceOfferingName()).thenReturn("cloned-offering");
|
|
when(cmd.getDisplayText()).thenReturn("New Display Text");
|
|
when(cmd.getCpuNumber()).thenReturn(4);
|
|
when(cmd.getCpuSpeed()).thenReturn(2000);
|
|
when(cmd.getMemory()).thenReturn(4096);
|
|
when(cmd.getVgpuProfileId()).thenReturn(null);
|
|
when(cmd.getGpuCount()).thenReturn(null);
|
|
when(cmd.getDiskOfferingId()).thenReturn(null);
|
|
|
|
DiskOfferingVO diskOffering = mock(DiskOfferingVO.class);
|
|
when(diskOfferingDao.findById(1L)).thenReturn(diskOffering);
|
|
when(diskOffering.getProvisioningType()).thenReturn(Storage.ProvisioningType.THIN);
|
|
|
|
Map<String, String> params = new HashMap<>();
|
|
params.put(ApiConstants.OFFER_HA, "false");
|
|
when(cmd.getFullUrlParams()).thenReturn(params);
|
|
when(cmd.isOfferHa()).thenReturn(false);
|
|
|
|
when(serviceOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
|
|
ServiceOfferingVO clonedOffering = mock(ServiceOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-offering");
|
|
when(clonedOffering.getDisplayText()).thenReturn("New Display Text");
|
|
when(clonedOffering.getCpu()).thenReturn(4);
|
|
when(clonedOffering.getSpeed()).thenReturn(2000);
|
|
when(clonedOffering.getRamSize()).thenReturn(4096);
|
|
when(clonedOffering.isOfferHA()).thenReturn(false);
|
|
|
|
when(serviceOfferingDao.persist(any(ServiceOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createServiceOffering(
|
|
anyLong(), anyBoolean(), any(), anyString(), eq(4), eq(4096), eq(2000),
|
|
anyString(), anyString(), anyBoolean(), eq(false), anyBoolean(), anyBoolean(),
|
|
anyString(), anyList(), anyList(), anyString(), anyInt(), anyString(), any(),
|
|
anyLong(), anyBoolean(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyInt(), anyString(), anyLong(), anyBoolean(), anyLong(),
|
|
anyBoolean(), anyBoolean(), anyBoolean(), anyLong(), anyInt(), anyBoolean(),
|
|
anyBoolean(), anyInt(), any(), anyLong());
|
|
|
|
ServiceOffering result = configurationManager.cloneServiceOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned offering should not be null", result);
|
|
verify(serviceOfferingDao).findById(sourceId);
|
|
Assert.assertEquals("Cloned offering should override display text", "New Display Text", result.getDisplayText());
|
|
Assert.assertEquals("Cloned offering should override CPU count", Integer.valueOf(4), result.getCpu());
|
|
Assert.assertEquals("Cloned offering should override CPU speed", Integer.valueOf(2000), result.getSpeed());
|
|
Assert.assertEquals("Cloned offering should override RAM", Integer.valueOf(4096), result.getRamSize());
|
|
Assert.assertEquals("Cloned offering should override HA", Boolean.FALSE, result.isOfferHA());
|
|
}
|
|
|
|
@Test(expected = InvalidParameterValueException.class)
|
|
public void testCloneDiskOfferingFailsWhenSourceNotFound() {
|
|
CloneDiskOfferingCmd cmd = mock(CloneDiskOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(999L);
|
|
when(cmd.getOfferingName()).thenReturn("cloned-disk-offering");
|
|
when(diskOfferingDao.findById(999L)).thenReturn(null);
|
|
|
|
configurationManager.cloneDiskOffering(cmd);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneDiskOfferingInheritsAllPropertiesFromSource() {
|
|
Long sourceId = 1L;
|
|
|
|
DiskOfferingVO sourceOffering = mock(DiskOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-disk");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Disk Display");
|
|
when(sourceOffering.getDiskSize()).thenReturn(10L);
|
|
when(sourceOffering.getTags()).thenReturn("tag1");
|
|
when(sourceOffering.isCustomized()).thenReturn(false);
|
|
when(sourceOffering.getDisplayOffering()).thenReturn(true);
|
|
when(sourceOffering.isCustomizedIops()).thenReturn(false);
|
|
when(sourceOffering.getDiskSizeStrictness()).thenReturn(false);
|
|
when(sourceOffering.getEncrypt()).thenReturn(false);
|
|
when(sourceOffering.isUseLocalStorage()).thenReturn(false);
|
|
when(sourceOffering.getProvisioningType()).thenReturn(Storage.ProvisioningType.THIN);
|
|
when(sourceOffering.getMinIops()).thenReturn(1000L);
|
|
when(sourceOffering.getMaxIops()).thenReturn(2000L);
|
|
|
|
CloneDiskOfferingCmd cmd = mock(CloneDiskOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getOfferingName()).thenReturn("cloned-disk-offering");
|
|
when(cmd.getDiskSize()).thenReturn(null);
|
|
when(diskOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(diskOfferingDetailsDao.findDomainIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.findZoneIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.getDetail(eq(sourceId), anyString())).thenReturn(null);
|
|
when(cmd.getMinIops()).thenReturn(null);
|
|
when(cmd.getMaxIops()).thenReturn(null);
|
|
|
|
DiskOfferingVO clonedOffering = mock(DiskOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-disk-offering");
|
|
when(clonedOffering.getDisplayText()).thenReturn("Source Disk Display");
|
|
when(clonedOffering.getDiskSize()).thenReturn(10L);
|
|
when(clonedOffering.getTags()).thenReturn("tag1");
|
|
when(diskOfferingDao.persist(any(DiskOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createDiskOffering(
|
|
anyLong(), anyList(), anyList(), anyString(), anyString(), anyString(),
|
|
anyLong(), anyString(), anyBoolean(), anyBoolean(), anyBoolean(), any(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyInt(), anyString(), any(), anyLong(), anyBoolean(), anyBoolean());
|
|
|
|
DiskOffering result = configurationManager.cloneDiskOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned disk offering should not be null", result);
|
|
verify(diskOfferingDao).findById(sourceId);
|
|
Assert.assertEquals("Cloned offering should have correct name", "cloned-disk-offering", result.getName());
|
|
Assert.assertEquals("Cloned offering should inherit display text", "Source Disk Display", result.getDisplayText());
|
|
Assert.assertEquals("Cloned offering should inherit disk size", 10L, result.getDiskSize());
|
|
Assert.assertEquals("Cloned offering should inherit tags", "tag1", result.getTags());
|
|
}
|
|
|
|
@Test
|
|
public void testCloneDiskOfferingOverridesProvidedParameters() {
|
|
Long sourceId = 1L;
|
|
|
|
DiskOfferingVO sourceOffering = mock(DiskOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-disk");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Disk Display");
|
|
when(sourceOffering.getDiskSize()).thenReturn(100L);
|
|
when(sourceOffering.getTags()).thenReturn("tag1");
|
|
when(sourceOffering.isCustomized()).thenReturn(false);
|
|
when(sourceOffering.getProvisioningType()).thenReturn(Storage.ProvisioningType.THIN);
|
|
when(sourceOffering.isUseLocalStorage()).thenReturn(false);
|
|
|
|
CloneDiskOfferingCmd cmd = mock(CloneDiskOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getOfferingName()).thenReturn("cloned-disk-offering");
|
|
when(cmd.getDisplayText()).thenReturn("New Disk Display");
|
|
when(cmd.getDiskSize()).thenReturn(20L);
|
|
when(cmd.getTags()).thenReturn("tag1,tag2");
|
|
when(cmd.getFullUrlParams()).thenReturn(new HashMap<>());
|
|
when(cmd.getMinIops()).thenReturn(100L);
|
|
when(cmd.getMaxIops()).thenReturn(200L);
|
|
|
|
when(diskOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(diskOfferingDetailsDao.findDomainIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.findZoneIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.getDetail(eq(sourceId), anyString())).thenReturn(null);
|
|
|
|
DiskOfferingVO clonedOffering = mock(DiskOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-disk-offering");
|
|
when(clonedOffering.getDisplayText()).thenReturn("New Disk Display");
|
|
when(clonedOffering.getDiskSize()).thenReturn(21L);
|
|
when(clonedOffering.getTags()).thenReturn("tag1,tag2");
|
|
|
|
// Ensure the real createDiskOffering path will return our mocked offering when it calls persist
|
|
when(diskOfferingDao.persist(any(DiskOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createDiskOffering(
|
|
anyLong(), anyList(), anyList(), eq("cloned-disk-offering"), eq("New Disk Display"), anyString(),
|
|
anyLong(), eq("tag1,tag2"), anyBoolean(), anyBoolean(), anyBoolean(), any(),
|
|
eq(100L), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyInt(), anyString(), any(), anyLong(), anyBoolean(), anyBoolean());
|
|
|
|
DiskOffering result = configurationManager.cloneDiskOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned disk offering should not be null", result);
|
|
verify(diskOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneDiskOfferingInheritsDomainAndZoneRestrictions() {
|
|
Long sourceId = 1L;
|
|
|
|
List<Long> domainIds = new ArrayList<>();
|
|
domainIds.add(1L);
|
|
domainIds.add(2L);
|
|
|
|
List<Long> zoneIds = new ArrayList<>();
|
|
zoneIds.add(1L);
|
|
|
|
DiskOfferingVO sourceOffering = mock(DiskOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-disk");
|
|
when(sourceOffering.getProvisioningType()).thenReturn(Storage.ProvisioningType.THIN);
|
|
when(sourceOffering.isUseLocalStorage()).thenReturn(false);
|
|
when(sourceOffering.getDiskSize()).thenReturn(10L);
|
|
when(sourceOffering.getMinIops()).thenReturn(1000L);
|
|
when(sourceOffering.getMaxIops()).thenReturn(2000L);
|
|
|
|
CloneDiskOfferingCmd cmd = mock(CloneDiskOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getOfferingName()).thenReturn("cloned-disk-offering");
|
|
when(cmd.getFullUrlParams()).thenReturn(new HashMap<>());
|
|
when(cmd.getDomainIds()).thenReturn(null);
|
|
when(cmd.getZoneIds()).thenReturn(null);
|
|
when(cmd.getDiskSize()).thenReturn(null);
|
|
when(cmd.getMinIops()).thenReturn(null);
|
|
when(cmd.getMaxIops()).thenReturn(null);
|
|
|
|
|
|
when(diskOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(diskOfferingDetailsDao.findDomainIds(sourceId)).thenReturn(domainIds);
|
|
when(diskOfferingDetailsDao.findZoneIds(sourceId)).thenReturn(zoneIds);
|
|
when(diskOfferingDetailsDao.getDetail(eq(sourceId), anyString())).thenReturn(null);
|
|
|
|
DiskOfferingVO clonedOffering = mock(DiskOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(diskOfferingDao.persist(any(DiskOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createDiskOffering(
|
|
anyLong(), eq(domainIds), eq(zoneIds), anyString(), anyString(), anyString(),
|
|
anyLong(), anyString(), anyBoolean(), anyBoolean(), anyBoolean(), any(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyInt(), anyString(), any(), anyLong(), anyBoolean(), anyBoolean());
|
|
|
|
DiskOffering result = configurationManager.cloneDiskOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned disk offering should not be null", result);
|
|
verify(diskOfferingDao).findById(sourceId);
|
|
verify(diskOfferingDetailsDao).findDomainIds(sourceId);
|
|
verify(diskOfferingDetailsDao).findZoneIds(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneServiceOfferingCanInheritDetailsFromSource() {
|
|
Long sourceId = 1L;
|
|
|
|
ServiceOfferingVO sourceOffering = mock(ServiceOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getCpu()).thenReturn(2);
|
|
when(sourceOffering.getSpeed()).thenReturn(1000);
|
|
when(sourceOffering.getRamSize()).thenReturn(2048);
|
|
when(sourceOffering.isSystemUse()).thenReturn(false);
|
|
when(sourceOffering.getVmType()).thenReturn(VirtualMachine.Type.User.toString());
|
|
when(sourceOffering.getVgpuProfileId()).thenReturn(null);
|
|
when(sourceOffering.getGpuCount()).thenReturn(null);
|
|
|
|
CloneServiceOfferingCmd cmd = mock(CloneServiceOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getServiceOfferingName()).thenReturn("cloned-offering");
|
|
when(cmd.getFullUrlParams()).thenReturn(new HashMap<>());
|
|
when(cmd.getDetails()).thenReturn(null);
|
|
when(cmd.getVgpuProfileId()).thenReturn(null);
|
|
when(cmd.getGpuCount()).thenReturn(null);
|
|
|
|
when(serviceOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
DiskOfferingVO diskOfferingVO = mock(DiskOfferingVO.class);
|
|
when(diskOfferingDao.findById(anyLong())).thenReturn(diskOfferingVO);
|
|
when(diskOfferingVO.getProvisioningType()).thenReturn(Storage.ProvisioningType.THIN);
|
|
|
|
ServiceOfferingVO clonedOffering = mock(ServiceOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(serviceOfferingDao.persist(any(ServiceOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createServiceOffering(
|
|
anyLong(), anyBoolean(), any(), anyString(), anyInt(), anyInt(), anyInt(),
|
|
anyString(), anyString(), anyBoolean(), anyBoolean(), anyBoolean(), anyBoolean(),
|
|
anyString(), anyList(), anyList(), anyString(), anyInt(), anyString(), any(),
|
|
anyLong(), anyBoolean(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyInt(), anyString(), anyLong(), anyBoolean(), anyLong(),
|
|
anyBoolean(), anyBoolean(), anyBoolean(), anyLong(), anyInt(), anyBoolean(),
|
|
anyBoolean(), anyInt(), any(), anyLong());
|
|
|
|
ServiceOffering result = configurationManager.cloneServiceOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned offering should not be null", result);
|
|
verify(serviceOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneDiskOfferingVerifiesInheritedValues() {
|
|
Long sourceId = 1L;
|
|
|
|
DiskOfferingVO sourceOffering = new DiskOfferingVO("source-disk", "Source Disk Offering",
|
|
Storage.ProvisioningType.THIN, 50L, "production,ssd", false, false, 1000L, 5000L);
|
|
sourceOffering.setDisplayOffering(true);
|
|
sourceOffering.setDiskSizeStrictness(false);
|
|
sourceOffering.setEncrypt(true);
|
|
sourceOffering.setUseLocalStorage(false);
|
|
sourceOffering.setHypervisorSnapshotReserve(20);
|
|
|
|
CloneDiskOfferingCmd cmd = mock(CloneDiskOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getOfferingName()).thenReturn("cloned-disk-offering");
|
|
when(cmd.getFullUrlParams()).thenReturn(new HashMap<>());
|
|
when(cmd.getDiskSize()).thenReturn(null);
|
|
when(cmd.getMinIops()).thenReturn(null);
|
|
when(cmd.getMaxIops()).thenReturn(null);
|
|
|
|
when(diskOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(diskOfferingDetailsDao.findDomainIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.findZoneIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.getDetail(eq(sourceId), anyString())).thenReturn(null);
|
|
|
|
DiskOfferingVO clonedOffering = new DiskOfferingVO("cloned-disk-offering", "Source Disk Offering",
|
|
Storage.ProvisioningType.THIN, 50L, "production,ssd", false, false, 1000L, 5000L);
|
|
clonedOffering.setEncrypt(true);
|
|
clonedOffering.setHypervisorSnapshotReserve(20);
|
|
when(diskOfferingDao.persist(any(DiskOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createDiskOffering(
|
|
anyLong(), anyList(), anyList(), eq("cloned-disk-offering"), eq("Source Disk Offering"),
|
|
anyString(), eq(50L), eq("production,ssd"), anyBoolean(), anyBoolean(),
|
|
anyBoolean(), any(), eq(1000L), eq(5000L), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), eq(20), anyString(), any(), anyLong(), anyBoolean(),
|
|
eq(true));
|
|
|
|
DiskOffering result = configurationManager.cloneDiskOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned disk offering should not be null", result);
|
|
Assert.assertEquals("Should inherit display text", "Source Disk Offering", result.getDisplayText());
|
|
Assert.assertEquals("Should inherit disk size", 50L, result.getDiskSize());
|
|
Assert.assertEquals("Should inherit tags", "production,ssd", result.getTags());
|
|
Assert.assertEquals("Should inherit min IOPS", Long.valueOf(1000L), result.getMinIops());
|
|
Assert.assertEquals("Should inherit max IOPS", Long.valueOf(5000L), result.getMaxIops());
|
|
Assert.assertEquals("Should inherit hypervisor snapshot reserve", Integer.valueOf(20), result.getHypervisorSnapshotReserve());
|
|
verify(diskOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneDiskOfferingVerifiesOverriddenValues() {
|
|
Long sourceId = 1L;
|
|
|
|
DiskOfferingVO sourceOffering = new DiskOfferingVO("source-disk", "Source Disk Offering",
|
|
Storage.ProvisioningType.THIN, 5L, "production", false, false, 1000L, 5000L);
|
|
sourceOffering.setEncrypt(false);
|
|
|
|
CloneDiskOfferingCmd cmd = mock(CloneDiskOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getOfferingName()).thenReturn("cloned-disk-offering");
|
|
when(cmd.getDisplayText()).thenReturn("Cloned Disk Offering - Updated");
|
|
when(cmd.getDiskSize()).thenReturn(10L);
|
|
when(cmd.getTags()).thenReturn("production,high-performance");
|
|
when(cmd.getMinIops()).thenReturn(2000L);
|
|
when(cmd.getMaxIops()).thenReturn(10000L);
|
|
|
|
Map<String, String> params = new HashMap<>();
|
|
params.put(ApiConstants.ENCRYPT, "true");
|
|
when(cmd.getFullUrlParams()).thenReturn(params);
|
|
when(cmd.getEncrypt()).thenReturn(true);
|
|
|
|
when(diskOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(diskOfferingDetailsDao.findDomainIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.findZoneIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.getDetail(eq(sourceId), anyString())).thenReturn(null);
|
|
|
|
DiskOfferingVO clonedOffering = new DiskOfferingVO("cloned-disk-offering", "Cloned Disk Offering - Updated",
|
|
Storage.ProvisioningType.THIN, 10L, "production,high-performance", false, false, 2000L, 10000L);
|
|
clonedOffering.setEncrypt(true);
|
|
|
|
when(diskOfferingDao.persist(any(DiskOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createDiskOffering(
|
|
anyLong(), anyList(), anyList(), eq("cloned-disk-offering"),
|
|
eq("Cloned Disk Offering - Updated"), anyString(), eq(10L),
|
|
eq("production,high-performance"), anyBoolean(), anyBoolean(), anyBoolean(),
|
|
any(), eq(2000L), eq(10000L), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyInt(), anyString(), any(), anyLong(), anyBoolean(), eq(true));
|
|
|
|
DiskOffering result = configurationManager.cloneDiskOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned disk offering should not be null", result);
|
|
Assert.assertEquals("Should override display text", "Cloned Disk Offering - Updated", result.getDisplayText());
|
|
Assert.assertEquals("Should override disk size", 10L, result.getDiskSize());
|
|
Assert.assertEquals("Should override tags", "production,high-performance", result.getTags());
|
|
Assert.assertEquals("Should override min IOPS", Long.valueOf(2000L), result.getMinIops());
|
|
Assert.assertEquals("Should override max IOPS", Long.valueOf(10000L), result.getMaxIops());
|
|
Assert.assertTrue("Should override encrypt flag", result.getEncrypt());
|
|
verify(diskOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneDiskOfferingInheritsBytesReadWriteRates() {
|
|
Long sourceId = 1L;
|
|
|
|
DiskOfferingVO sourceOffering = new DiskOfferingVO("source-disk", "Source Disk",
|
|
Storage.ProvisioningType.THIN, 53L, "tag1", false, false, null, null);
|
|
sourceOffering.setBytesReadRate(10485760L);
|
|
sourceOffering.setBytesReadRateMax(20971520L);
|
|
sourceOffering.setBytesReadRateMaxLength(60L);
|
|
sourceOffering.setBytesWriteRate(10485760L);
|
|
sourceOffering.setBytesWriteRateMax(20971520L);
|
|
sourceOffering.setBytesWriteRateMaxLength(60L);
|
|
|
|
CloneDiskOfferingCmd cmd = mock(CloneDiskOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getOfferingName()).thenReturn("cloned-disk");
|
|
when(cmd.getFullUrlParams()).thenReturn(new HashMap<>());
|
|
when(cmd.getDiskSize()).thenReturn(null);
|
|
when(cmd.getMinIops()).thenReturn(null);
|
|
when(cmd.getMaxIops()).thenReturn(null);
|
|
|
|
when(diskOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(diskOfferingDetailsDao.findDomainIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.findZoneIds(sourceId)).thenReturn(Collections.emptyList());
|
|
when(diskOfferingDetailsDao.getDetail(eq(sourceId), anyString())).thenReturn(null);
|
|
|
|
DiskOfferingVO clonedOffering = new DiskOfferingVO("cloned-disk", "Source Disk",
|
|
Storage.ProvisioningType.THIN, 53L, "tag1", false, false, null, null);
|
|
clonedOffering.setBytesReadRate(10485760L);
|
|
clonedOffering.setBytesReadRateMax(20971520L);
|
|
clonedOffering.setBytesReadRateMaxLength(60L);
|
|
clonedOffering.setBytesWriteRate(10485760L);
|
|
clonedOffering.setBytesWriteRateMax(20971520L);
|
|
clonedOffering.setBytesWriteRateMaxLength(60L);
|
|
when(diskOfferingDao.persist(any(DiskOfferingVO.class))).thenReturn(clonedOffering);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createDiskOffering(
|
|
anyLong(), anyList(), anyList(), anyString(), anyString(), anyString(),
|
|
anyLong(), anyString(), anyBoolean(), anyBoolean(), anyBoolean(), any(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(), anyLong(),
|
|
anyInt(), anyString(), any(), anyLong(), anyBoolean(), anyBoolean());
|
|
|
|
DiskOffering result = configurationManager.cloneDiskOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned disk offering should not be null", result);
|
|
Assert.assertEquals("Should inherit bytes read rate", Long.valueOf(10485760L), result.getBytesReadRate());
|
|
Assert.assertEquals("Should inherit bytes read rate max", Long.valueOf(20971520L), result.getBytesReadRateMax());
|
|
Assert.assertEquals("Should inherit bytes read rate max length", Long.valueOf(60L), result.getBytesReadRateMaxLength());
|
|
Assert.assertEquals("Should inherit bytes write rate", Long.valueOf(10485760L), result.getBytesWriteRate());
|
|
Assert.assertEquals("Should inherit bytes write rate max", Long.valueOf(20971520L), result.getBytesWriteRateMax());
|
|
Assert.assertEquals("Should inherit bytes write rate max length", Long.valueOf(60L), result.getBytesWriteRateMaxLength());
|
|
verify(diskOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test(expected = InvalidParameterValueException.class)
|
|
public void testCloneNetworkOfferingFailsWhenSourceNotFound() {
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(999L);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
when(networkOfferingDao.findById(999L)).thenReturn(null);
|
|
|
|
configurationManager.cloneNetworkOffering(cmd);
|
|
}
|
|
|
|
@Test(expected = InvalidParameterValueException.class)
|
|
public void testCloneNetworkOfferingFailsWhenNameIsNull() {
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(1L);
|
|
when(cmd.getNetworkOfferingName()).thenReturn(null);
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(1L);
|
|
when(networkOfferingDao.findById(1L)).thenReturn(sourceOffering);
|
|
|
|
configurationManager.cloneNetworkOffering(cmd);
|
|
}
|
|
|
|
@Test(expected = InvalidParameterValueException.class)
|
|
public void testCloneNetworkOfferingFailsWhenNameAlreadyExists() {
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(1L);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("existing-offering");
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(1L);
|
|
when(sourceOffering.getName()).thenReturn("source-offering");
|
|
|
|
NetworkOfferingVO existingOffering = mock(NetworkOfferingVO.class);
|
|
when(existingOffering.getId()).thenReturn(2L);
|
|
|
|
when(networkOfferingDao.findById(1L)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("existing-offering")).thenReturn(existingOffering);
|
|
|
|
configurationManager.cloneNetworkOffering(cmd);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneNetworkOfferingInheritsAllPropertiesFromSource() {
|
|
Long sourceId = 1L;
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-network-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(sourceOffering.getGuestType()).thenReturn(Network.GuestType.Isolated);
|
|
when(sourceOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
when(sourceOffering.getAvailability()).thenReturn(NetworkOffering.Availability.Optional);
|
|
when(sourceOffering.getState()).thenReturn(NetworkOffering.State.Enabled);
|
|
when(sourceOffering.isDefault()).thenReturn(false);
|
|
when(sourceOffering.isConserveMode()).thenReturn(true);
|
|
when(sourceOffering.isEgressDefaultPolicy()).thenReturn(false);
|
|
when(sourceOffering.isPersistent()).thenReturn(false);
|
|
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
|
|
when(networkOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("cloned-network-offering")).thenReturn(null);
|
|
|
|
// Mock the network model to return service provider map
|
|
Map<Network.Service, java.util.Set<Network.Provider>> serviceProviderMap = new HashMap<>();
|
|
when(configurationManager._networkModel.getNetworkOfferingServiceProvidersMap(sourceId))
|
|
.thenReturn(serviceProviderMap);
|
|
|
|
NetworkOfferingVO clonedOffering = mock(NetworkOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-network-offering");
|
|
when(clonedOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(clonedOffering.getGuestType()).thenReturn(Network.GuestType.Isolated);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createNetworkOffering(any());
|
|
|
|
NetworkOffering result = configurationManager.cloneNetworkOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned network offering should not be null", result);
|
|
verify(networkOfferingDao).findById(sourceId);
|
|
Assert.assertEquals("Should have correct name", "cloned-network-offering", result.getName());
|
|
}
|
|
|
|
@Test
|
|
public void testCloneNetworkOfferingOverridesDisplayText() {
|
|
Long sourceId = 1L;
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-network-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(sourceOffering.getGuestType()).thenReturn(Network.GuestType.Isolated);
|
|
when(sourceOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
when(cmd.getDisplayText()).thenReturn("New Display Text for Network");
|
|
|
|
when(networkOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("cloned-network-offering")).thenReturn(null);
|
|
|
|
Map<Network.Service, java.util.Set<Network.Provider>> serviceProviderMap = new HashMap<>();
|
|
when(configurationManager._networkModel.getNetworkOfferingServiceProvidersMap(sourceId))
|
|
.thenReturn(serviceProviderMap);
|
|
|
|
NetworkOfferingVO clonedOffering = mock(NetworkOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-network-offering");
|
|
when(clonedOffering.getDisplayText()).thenReturn("New Display Text for Network");
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createNetworkOffering(any());
|
|
|
|
NetworkOffering result = configurationManager.cloneNetworkOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned network offering should not be null", result);
|
|
Assert.assertEquals("Should override display text", "New Display Text for Network", result.getDisplayText());
|
|
verify(networkOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneNetworkOfferingHandlesAddServices() {
|
|
Long sourceId = 1L;
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-network-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(sourceOffering.getGuestType()).thenReturn(Network.GuestType.Isolated);
|
|
when(sourceOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
|
|
List<String> addServices = new ArrayList<>();
|
|
addServices.add("Vpn");
|
|
addServices.add("StaticNat");
|
|
when(cmd.getAddServices()).thenReturn(addServices);
|
|
when(cmd.getSupportedServices()).thenReturn(null);
|
|
|
|
when(networkOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("cloned-network-offering")).thenReturn(null);
|
|
|
|
Map<Network.Service, java.util.Set<Network.Provider>> serviceProviderMap = new HashMap<>();
|
|
java.util.Set<Network.Provider> dhcpProviders = new java.util.HashSet<>();
|
|
dhcpProviders.add(Network.Provider.VirtualRouter);
|
|
serviceProviderMap.put(Network.Service.Dhcp, dhcpProviders);
|
|
|
|
when(configurationManager._networkModel.getNetworkOfferingServiceProvidersMap(sourceId))
|
|
.thenReturn(serviceProviderMap);
|
|
|
|
NetworkOfferingVO clonedOffering = mock(NetworkOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-network-offering");
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createNetworkOffering(any());
|
|
|
|
NetworkOffering result = configurationManager.cloneNetworkOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned network offering should not be null", result);
|
|
verify(networkOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneNetworkOfferingHandlesDropServices() {
|
|
Long sourceId = 1L;
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-network-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(sourceOffering.getGuestType()).thenReturn(Network.GuestType.Isolated);
|
|
when(sourceOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
|
|
List<String> dropServices = new ArrayList<>();
|
|
dropServices.add("Firewall");
|
|
when(cmd.getDropServices()).thenReturn(dropServices);
|
|
when(cmd.getSupportedServices()).thenReturn(null);
|
|
|
|
when(networkOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("cloned-network-offering")).thenReturn(null);
|
|
|
|
Map<Network.Service, java.util.Set<Network.Provider>> serviceProviderMap = new HashMap<>();
|
|
java.util.Set<Network.Provider> dhcpProviders = new java.util.HashSet<>();
|
|
dhcpProviders.add(Network.Provider.VirtualRouter);
|
|
serviceProviderMap.put(Network.Service.Dhcp, dhcpProviders);
|
|
|
|
java.util.Set<Network.Provider> firewallProviders = new java.util.HashSet<>();
|
|
firewallProviders.add(Network.Provider.VirtualRouter);
|
|
serviceProviderMap.put(Network.Service.Firewall, firewallProviders);
|
|
|
|
when(configurationManager._networkModel.getNetworkOfferingServiceProvidersMap(sourceId))
|
|
.thenReturn(serviceProviderMap);
|
|
|
|
NetworkOfferingVO clonedOffering = mock(NetworkOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-network-offering");
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createNetworkOffering(any());
|
|
|
|
NetworkOffering result = configurationManager.cloneNetworkOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned network offering should not be null", result);
|
|
verify(networkOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneNetworkOfferingOverridesSupportedServices() {
|
|
Long sourceId = 1L;
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-network-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(sourceOffering.getGuestType()).thenReturn(Network.GuestType.Isolated);
|
|
when(sourceOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
|
|
List<String> supportedServices = new ArrayList<>();
|
|
supportedServices.add("Dhcp");
|
|
supportedServices.add("Dns");
|
|
supportedServices.add("SourceNat");
|
|
when(cmd.getSupportedServices()).thenReturn(supportedServices);
|
|
|
|
when(networkOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("cloned-network-offering")).thenReturn(null);
|
|
|
|
Map<Network.Service, java.util.Set<Network.Provider>> serviceProviderMap = new HashMap<>();
|
|
when(configurationManager._networkModel.getNetworkOfferingServiceProvidersMap(sourceId))
|
|
.thenReturn(serviceProviderMap);
|
|
|
|
NetworkOfferingVO clonedOffering = mock(NetworkOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-network-offering");
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createNetworkOffering(any());
|
|
|
|
NetworkOffering result = configurationManager.cloneNetworkOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned network offering should not be null", result);
|
|
verify(networkOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneNetworkOfferingInheritsGuestTypeAndTrafficType() {
|
|
Long sourceId = 1L;
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-network-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(sourceOffering.getGuestType()).thenReturn(Network.GuestType.Shared);
|
|
when(sourceOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
when(sourceOffering.getAvailability()).thenReturn(NetworkOffering.Availability.Required);
|
|
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
when(cmd.getGuestIpType()).thenReturn(null); // Should inherit
|
|
|
|
when(networkOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("cloned-network-offering")).thenReturn(null);
|
|
|
|
Map<Network.Service, java.util.Set<Network.Provider>> serviceProviderMap = new HashMap<>();
|
|
when(configurationManager._networkModel.getNetworkOfferingServiceProvidersMap(sourceId))
|
|
.thenReturn(serviceProviderMap);
|
|
|
|
NetworkOfferingVO clonedOffering = mock(NetworkOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-network-offering");
|
|
when(clonedOffering.getGuestType()).thenReturn(Network.GuestType.Shared);
|
|
when(clonedOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createNetworkOffering(any());
|
|
|
|
NetworkOffering result = configurationManager.cloneNetworkOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned network offering should not be null", result);
|
|
Assert.assertEquals("Should inherit guest type", Network.GuestType.Shared, result.getGuestType());
|
|
Assert.assertEquals("Should inherit traffic type", Networks.TrafficType.Guest, result.getTrafficType());
|
|
verify(networkOfferingDao).findById(sourceId);
|
|
}
|
|
|
|
@Test
|
|
public void testCloneNetworkOfferingInheritsAvailability() {
|
|
Long sourceId = 1L;
|
|
|
|
NetworkOfferingVO sourceOffering = mock(NetworkOfferingVO.class);
|
|
when(sourceOffering.getId()).thenReturn(sourceId);
|
|
when(sourceOffering.getName()).thenReturn("source-network-offering");
|
|
when(sourceOffering.getDisplayText()).thenReturn("Source Network Offering");
|
|
when(sourceOffering.getGuestType()).thenReturn(Network.GuestType.Isolated);
|
|
when(sourceOffering.getTrafficType()).thenReturn(Networks.TrafficType.Guest);
|
|
when(sourceOffering.getAvailability()).thenReturn(NetworkOffering.Availability.Required);
|
|
|
|
CloneNetworkOfferingCmd cmd = mock(CloneNetworkOfferingCmd.class);
|
|
when(cmd.getSourceOfferingId()).thenReturn(sourceId);
|
|
when(cmd.getNetworkOfferingName()).thenReturn("cloned-network-offering");
|
|
when(cmd.getAvailability()).thenReturn(null); // Should inherit
|
|
|
|
when(networkOfferingDao.findById(sourceId)).thenReturn(sourceOffering);
|
|
when(networkOfferingDao.findByUniqueName("cloned-network-offering")).thenReturn(null);
|
|
|
|
Map<Network.Service, java.util.Set<Network.Provider>> serviceProviderMap = new HashMap<>();
|
|
when(configurationManager._networkModel.getNetworkOfferingServiceProvidersMap(sourceId))
|
|
.thenReturn(serviceProviderMap);
|
|
|
|
NetworkOfferingVO clonedOffering = mock(NetworkOfferingVO.class);
|
|
when(clonedOffering.getId()).thenReturn(2L);
|
|
when(clonedOffering.getName()).thenReturn("cloned-network-offering");
|
|
when(clonedOffering.getAvailability()).thenReturn(NetworkOffering.Availability.Required);
|
|
|
|
Mockito.doReturn(clonedOffering).when(configurationManager).createNetworkOffering(any());
|
|
|
|
NetworkOffering result = configurationManager.cloneNetworkOffering(cmd);
|
|
|
|
Assert.assertNotNull("Cloned network offering should not be null", result);
|
|
Assert.assertEquals("Should inherit availability", NetworkOffering.Availability.Required, result.getAvailability());
|
|
verify(networkOfferingDao).findById(sourceId);
|
|
}
|
|
}
|