diff --git a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java index 47740b5b672d..861555a4028b 100755 --- a/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java +++ b/engine/orchestration/src/main/java/com/cloud/vm/VirtualMachineManagerImpl.java @@ -1889,7 +1889,7 @@ protected boolean sendStop(final VirtualMachineGuru guru, final VirtualMachinePr final UserVmVO userVm = _userVmDao.findById(vm.getId()); _userVmDao.loadDetails(userVm); userVm.setDetail(VmDetailConstants.PLATFORM, platform); - _userVmDao.saveDetails(userVm); + userVmDetailsDao.saveDetails(userVm); } } @@ -2214,7 +2214,7 @@ private void advanceStop(final VMInstanceVO vm, final boolean cleanUpEvenIfUnabl final UserVmVO userVm = _userVmDao.findById(vm.getId()); _userVmDao.loadDetails(userVm); userVm.setDetail(VmDetailConstants.PLATFORM, platform); - _userVmDao.saveDetails(userVm); + userVmDetailsDao.saveDetails(userVm); } } } @@ -3782,7 +3782,7 @@ private void updateVmMetaData(Long vmId, String platform) { if (!userVm.details.containsKey(VmDetailConstants.HYPERVISOR_TOOLS_VERSION) || !userVm.details.get(VmDetailConstants.HYPERVISOR_TOOLS_VERSION).equals(pvdriver)) { userVm.setDetail(VmDetailConstants.HYPERVISOR_TOOLS_VERSION, pvdriver); } - _userVmDao.saveDetails(userVm); + userVmDetailsDao.saveDetails(userVm); } @Override diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java index 7de543e69d31..0f6870e0135b 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDao.java @@ -87,10 +87,6 @@ void updateVM(long id, String displayName, boolean enable, Long osTypeId, void loadDetails(UserVmVO vm); - void saveDetails(UserVmVO vm); - - void saveDetails(UserVmVO vm, List hiddenDetails); - List listPodIdsHavingVmsforAccount(long zoneId, long accountId); public Long countAllocatedVMsForAccount(long accountId, boolean runningVMsonly); diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java index cc8b9fc59a8d..78f545a31e0b 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDaoImpl.java @@ -57,7 +57,6 @@ import com.cloud.utils.db.TransactionLegacy; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.NicVO; -import com.cloud.vm.UserVmDetailVO; import com.cloud.vm.UserVmVO; import com.cloud.vm.VirtualMachine; import com.cloud.vm.VirtualMachine.State; @@ -431,29 +430,6 @@ public void loadDetails(UserVmVO vm) { } } - @Override - public void saveDetails(UserVmVO vm) { - saveDetails(vm, new ArrayList()); - } - - @Override - public void saveDetails(UserVmVO vm, List hiddenDetails) { - Map detailsStr = vm.getDetails(); - if (detailsStr == null) { - return; - } - - final Map visibilityMap = _detailsDao.listDetailsVisibility(vm.getId()); - - List details = new ArrayList(); - for (Map.Entry entry : detailsStr.entrySet()) { - boolean display = !hiddenDetails.contains(entry.getKey()) && visibilityMap.getOrDefault(entry.getKey(), true); - details.add(new UserVmDetailVO(vm.getId(), entry.getKey(), entry.getValue(), display)); - } - - _detailsDao.saveDetails(details); - } - @Override public List listPodIdsHavingVmsforAccount(long zoneId, long accountId) { TransactionLegacy txn = TransactionLegacy.currentTxn(); diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDao.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDao.java index c22da6b4ff53..7a337625d2c7 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDao.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDao.java @@ -20,6 +20,14 @@ import com.cloud.utils.db.GenericDao; import com.cloud.vm.UserVmDetailVO; +import com.cloud.vm.VMInstanceVO; + +import java.util.List; public interface UserVmDetailsDao extends GenericDao, ResourceDetailsDao { + + public void saveDetails(VMInstanceVO vm); + + public void saveDetails(VMInstanceVO vm, List hiddenDetails); + } diff --git a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDaoImpl.java b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDaoImpl.java index d8f751842d51..fc961e8a6ba4 100644 --- a/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDaoImpl.java +++ b/engine/schema/src/main/java/com/cloud/vm/dao/UserVmDetailsDaoImpl.java @@ -22,6 +22,11 @@ import org.apache.cloudstack.resourcedetail.ResourceDetailsDaoBase; import com.cloud.vm.UserVmDetailVO; +import com.cloud.vm.VMInstanceVO; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; @Component public class UserVmDetailsDaoImpl extends ResourceDetailsDaoBase implements UserVmDetailsDao { @@ -31,4 +36,26 @@ public void addDetail(long resourceId, String key, String value, boolean display super.addDetail(new UserVmDetailVO(resourceId, key, value, display)); } + @Override + public void saveDetails(VMInstanceVO vm) { + saveDetails(vm, new ArrayList()); + } + + @Override + public void saveDetails(VMInstanceVO vm, List hiddenDetails) { + Map detailsStr = vm.getDetails(); + if (detailsStr == null) { + return; + } + + final Map visibilityMap = listDetailsVisibility(vm.getId()); + + List details = new ArrayList(); + for (Map.Entry entry : detailsStr.entrySet()) { + boolean display = !hiddenDetails.contains(entry.getKey()) && visibilityMap.getOrDefault(entry.getKey(), true); + details.add(new UserVmDetailVO(vm.getId(), entry.getKey(), entry.getValue(), display)); + } + + saveDetails(details); + } } diff --git a/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java b/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java index 8eebc04ee683..2fba1c3eb29a 100644 --- a/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java +++ b/server/src/main/java/com/cloud/capacity/CapacityManagerImpl.java @@ -777,7 +777,7 @@ public void updateCapacityForHost(final Host host) { UserVmVO userVM = _userVMDao.findById(vm.getId()); _userVMDao.loadDetails(userVM); userVM.setDetail(VmDetailConstants.MESSAGE_RESERVED_CAPACITY_FREED_FLAG, "true"); - _userVMDao.saveDetails(userVM); + _userVmDetailsDao.saveDetails(userVM); } } } @@ -1011,7 +1011,7 @@ public boolean postStateTransitionEvent(StateMachine2.Transition t _userVMDao.loadDetails(userVM); // free the message sent flag if it exists userVM.setDetail(VmDetailConstants.MESSAGE_RESERVED_CAPACITY_FREED_FLAG, "false"); - _userVMDao.saveDetails(userVM); + _userVmDetailsDao.saveDetails(userVM); } return true; diff --git a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java index 5baed2643c93..05362bef24e2 100644 --- a/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java +++ b/server/src/main/java/com/cloud/consoleproxy/ConsoleProxyManagerImpl.java @@ -227,6 +227,8 @@ public class ConsoleProxyManagerImpl extends ManagerBase implements ConsoleProxy private CAManager caManager; @Inject private NetworkOrchestrationService networkMgr; + @Inject + private VMTemplateDao _templateDao; private ConsoleProxyListener consoleProxyListener; @@ -673,6 +675,7 @@ protected NetworkVO getDefaultNetworkForBasicZone(DataCenter dc) { protected ConsoleProxyVO createOrUpdateConsoleProxy(ConsoleProxyVO proxy, long dataCenterId, long id, String name, ServiceOffering serviceOffering, VMTemplateVO template, Account systemAccount) { + _templateDao.loadDetails(template); if (proxy == null) { proxy = new ConsoleProxyVO(id, serviceOffering.getId(), name, template.getId(), template.getHypervisorType(), template.getGuestOSId(), dataCenterId, systemAccount.getDomainId(), @@ -686,6 +689,8 @@ protected ConsoleProxyVO createOrUpdateConsoleProxy(ConsoleProxyVO proxy, long d proxy.setHypervisorType(template.getHypervisorType()); proxy.setGuestOSId(template.getGuestOSId()); proxy.setDynamicallyScalable(template.isDynamicallyScalable()); + proxy.setDetails(template.getDetails()); + userVmDetailsDao.saveDetails(proxy); consoleProxyDao.update(proxy.getId(), proxy); return proxy; } diff --git a/server/src/main/java/com/cloud/network/element/VirtualRouterElement.java b/server/src/main/java/com/cloud/network/element/VirtualRouterElement.java index 263ff523ab6a..7140e00050f9 100644 --- a/server/src/main/java/com/cloud/network/element/VirtualRouterElement.java +++ b/server/src/main/java/com/cloud/network/element/VirtualRouterElement.java @@ -24,6 +24,7 @@ import javax.inject.Inject; +import com.cloud.vm.dao.UserVmDetailsDao; import org.apache.cloudstack.network.BgpPeer; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.ObjectUtils; @@ -176,6 +177,9 @@ public class VirtualRouterElement extends AdapterBase implements VirtualRouterEl @Inject NetworkDetailsDao _networkDetailsDao; + @Inject + private UserVmDetailsDao userVmDetailsDao; + @Inject protected RouterDeploymentDefinitionBuilder routerDeploymentDefinitionBuilder; @@ -736,7 +740,7 @@ public boolean savePassword(final Network network, final NicProfile nic, final V _userVmDao.loadDetails(userVmVO); userVmVO.setDetail(VmDetailConstants.PASSWORD, password_encrypted); - _userVmDao.saveDetails(userVmVO); + userVmDetailsDao.saveDetails(userVmVO); userVmVO.setUpdateParameters(true); _userVmDao.update(userVmVO.getId(), userVmVO); diff --git a/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java index eb1c5cfd8567..023c88489270 100644 --- a/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java +++ b/server/src/main/java/com/cloud/network/router/NetworkHelperImpl.java @@ -28,6 +28,8 @@ import javax.annotation.PostConstruct; import javax.inject.Inject; + +import com.cloud.vm.dao.UserVmDetailsDao; import org.apache.cloudstack.api.ApiConstants; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; @@ -176,6 +178,8 @@ public class NetworkHelperImpl implements NetworkHelper { CapacityManager capacityMgr; @Inject VpcDao vpcDao; + @Inject + private UserVmDetailsDao userVmDetailsDao; protected final Map> hypervisorsMap = new HashMap<>(); @@ -502,6 +506,7 @@ protected DomainRouterVO createOrUpdateDomainRouter(DomainRouterVO router, final final RouterDeploymentDefinition routerDeploymentDefinition, final Account owner, final long userId, final ServiceOfferingVO routerOffering, final boolean offerHA, final Long vpcId, final VMTemplateVO template) { + _templateDao.loadDetails(template); if (router == null) { router = new DomainRouterVO(id, routerOffering.getId(), routerDeploymentDefinition.getVirtualProvider().getId(), @@ -516,6 +521,8 @@ protected DomainRouterVO createOrUpdateDomainRouter(DomainRouterVO router, final } router.setTemplateId(template.getId()); router.setDynamicallyScalable(template.isDynamicallyScalable()); + router.setDetails(template.getDetails()); + userVmDetailsDao.saveDetails(router); _routerDao.update(router.getId(), router); return router; } diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 0abab9b149d1..80ccc87c1a27 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -1080,7 +1080,7 @@ private boolean resetVMSSHKeyInternal(Long vmId, String sshPublicKeys, String ke _vmDao.loadDetails(userVm); userVm.setDetail(VmDetailConstants.SSH_PUBLIC_KEY, sshPublicKeys); userVm.setDetail(VmDetailConstants.SSH_KEY_PAIR_NAMES, keypairnames); - _vmDao.saveDetails(userVm); + userVmDetailsDao.saveDetails(userVm); if (vmInstance.getState() == State.Stopped) { logger.debug("Vm " + vmInstance + " is stopped, not rebooting it as a part of SSH Key reset"); @@ -2904,7 +2904,7 @@ public UserVm updateVirtualMachine(UpdateVMCmd cmd) throws ResourceUnavailableEx verifyVmLimits(vmInstance, details); vmInstance.setDetails(details); - _vmDao.saveDetails(vmInstance); + userVmDetailsDao.saveDetails(vmInstance); } if (StringUtils.isNotBlank(extraConfig)) { if (EnableAdditionalVmConfig.valueIn(accountId)) { @@ -4710,7 +4710,7 @@ private UserVmVO commitUserVm(final boolean isImport, final DataCenter zone, fin if (customParameters.containsKey(VmDetailConstants.NAME_ON_HYPERVISOR)) { hiddenDetails.add(VmDetailConstants.NAME_ON_HYPERVISOR); } - _vmDao.saveDetails(vm, hiddenDetails); + userVmDetailsDao.saveDetails(vm, hiddenDetails); if (!isImport) { logger.debug("Allocating in the DB for vm"); DataCenterDeployment plan = new DataCenterDeployment(zone.getId()); @@ -8830,7 +8830,7 @@ private void encryptAndStorePassword(UserVmVO vm, String password) { } vm.setDetail(VmDetailConstants.ENCRYPTED_PASSWORD, encryptedPasswd); - _vmDao.saveDetails(vm); + userVmDetailsDao.saveDetails(vm); } } @@ -8839,7 +8839,7 @@ public void persistDeviceBusInfo(UserVmVO vm, String rootDiskController) { String existingVmRootDiskController = vm.getDetail(VmDetailConstants.ROOT_DISK_CONTROLLER); if (StringUtils.isEmpty(existingVmRootDiskController) && StringUtils.isNotEmpty(rootDiskController)) { vm.setDetail(VmDetailConstants.ROOT_DISK_CONTROLLER, rootDiskController); - _vmDao.saveDetails(vm); + userVmDetailsDao.saveDetails(vm); if (logger.isDebugEnabled()) { logger.debug("Persisted device bus information rootDiskController={} for vm: {}", rootDiskController, vm); } diff --git a/server/src/test/java/com/cloud/consoleproxy/ConsoleProxyManagerImplTest.java b/server/src/test/java/com/cloud/consoleproxy/ConsoleProxyManagerImplTest.java index 1feced5f464d..3008597e4556 100644 --- a/server/src/test/java/com/cloud/consoleproxy/ConsoleProxyManagerImplTest.java +++ b/server/src/test/java/com/cloud/consoleproxy/ConsoleProxyManagerImplTest.java @@ -22,6 +22,7 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.cloud.storage.dao.VMTemplateDao; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -37,6 +38,7 @@ import com.cloud.user.User; import com.cloud.vm.ConsoleProxyVO; import com.cloud.vm.dao.ConsoleProxyDao; +import com.cloud.vm.dao.UserVmDetailsDao; @RunWith(MockitoJUnitRunner.class) public class ConsoleProxyManagerImplTest { @@ -45,7 +47,10 @@ public class ConsoleProxyManagerImplTest { @Mock private ConsoleProxyDao consoleProxyDao; - + @Mock + private VMTemplateDao templateDao; + @Mock + private UserVmDetailsDao userVmDetailsDao; @Mock private AccountManager accountManager; diff --git a/server/src/test/java/com/cloud/network/router/NetworkHelperImplTest.java b/server/src/test/java/com/cloud/network/router/NetworkHelperImplTest.java index 4237ef7f6f65..34a2ed52caa1 100644 --- a/server/src/test/java/com/cloud/network/router/NetworkHelperImplTest.java +++ b/server/src/test/java/com/cloud/network/router/NetworkHelperImplTest.java @@ -29,6 +29,8 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.vm.dao.UserVmDetailsDao; import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; import org.apache.cloudstack.network.router.deployment.RouterDeploymentDefinition; import org.junit.Before; @@ -57,7 +59,6 @@ import com.cloud.vm.dao.DomainRouterDao; import com.cloud.vm.dao.NicDao; - @RunWith(MockitoJUnitRunner.class) public class NetworkHelperImplTest { @@ -90,6 +91,10 @@ public class NetworkHelperImplTest { private ServiceOfferingVO routerOffering; @Mock private VMTemplateVO template; + @Mock + private VMTemplateDao templateDao; + @Mock + private UserVmDetailsDao userVmDetailsDao; @Before public void setUp() { diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java index ac1ecaa456b0..4bb6722eb894 100644 --- a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java +++ b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java @@ -573,14 +573,14 @@ private void prepareAndExecuteMethodDealingWithDetails(boolean cleanUpDetails, b Mockito.verify(userVmVoMock, Mockito.times(cleanUpDetails || isDetailsEmpty ? 0 : 1)).setDetails(details); Mockito.verify(userVmDetailsDao, Mockito.times(cleanUpDetails ? 1 : 0)).removeDetail(vmId, "existingdetail"); Mockito.verify(userVmDetailsDao, Mockito.times(0)).removeDetail(vmId, "systemdetail"); - Mockito.verify(userVmDao, Mockito.times(cleanUpDetails || isDetailsEmpty ? 0 : 1)).saveDetails(userVmVoMock); + Mockito.verify(userVmDetailsDao, Mockito.times(cleanUpDetails || isDetailsEmpty ? 0 : 1)).saveDetails(userVmVoMock); Mockito.verify(userVmManagerImpl, Mockito.times(0)).updateDisplayVmFlag(false, vmId, userVmVoMock); } private void configureDoNothingForDetailsMethod() { Mockito.lenient().doNothing().when(userVmManagerImpl).updateDisplayVmFlag(false, vmId, userVmVoMock); Mockito.doNothing().when(userVmDetailsDao).removeDetail(anyLong(), anyString()); - Mockito.doNothing().when(userVmDao).saveDetails(userVmVoMock); + Mockito.doNothing().when(userVmDetailsDao).saveDetails(userVmVoMock); } @SuppressWarnings("unchecked") diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java index b5d904bd2775..c985d8be1db2 100644 --- a/server/src/test/java/com/cloud/vm/UserVmManagerTest.java +++ b/server/src/test/java/com/cloud/vm/UserVmManagerTest.java @@ -63,6 +63,7 @@ import com.cloud.vm.VirtualMachine.State; import com.cloud.vm.dao.NicDao; import com.cloud.vm.dao.UserVmDao; +import com.cloud.vm.dao.UserVmDetailsDao; import com.cloud.vm.dao.VMInstanceDao; import com.cloud.vm.snapshot.VMSnapshotVO; import com.cloud.vm.snapshot.dao.VMSnapshotDao; @@ -145,6 +146,8 @@ public class UserVmManagerTest { @Mock private UserVmDao _vmDao; @Mock + private UserVmDetailsDao userVmDetailsDao; + @Mock private VMInstanceDao _vmInstanceDao; @Mock private VMTemplateDao _templateDao; @@ -820,20 +823,20 @@ public void testApplyUserDataSuccessful() throws Exception { public void testPersistDeviceBusInfoWithNullController() { when(_vmMock.getDetail(any(String.class))).thenReturn(null); _userVmMgr.persistDeviceBusInfo(_vmMock, null); - verify(_vmDao, times(0)).saveDetails(any(UserVmVO.class)); + verify(userVmDetailsDao, times(0)).saveDetails(any(UserVmVO.class)); } @Test public void testPersistDeviceBusInfoWithEmptyController() { when(_vmMock.getDetail(any(String.class))).thenReturn(""); _userVmMgr.persistDeviceBusInfo(_vmMock, ""); - verify(_vmDao, times(0)).saveDetails(any(UserVmVO.class)); + verify(userVmDetailsDao, times(0)).saveDetails(any(UserVmVO.class)); } @Test public void testPersistDeviceBusInfo() { when(_vmMock.getDetail(any(String.class))).thenReturn(null); _userVmMgr.persistDeviceBusInfo(_vmMock, "lsilogic"); - verify(_vmDao, times(1)).saveDetails(any(UserVmVO.class)); + verify(userVmDetailsDao, times(1)).saveDetails(any(UserVmVO.class)); } } diff --git a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java index 25d43388b659..fc94b1a7ce36 100644 --- a/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java +++ b/services/secondary-storage/controller/src/main/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImpl.java @@ -622,6 +622,7 @@ protected NetworkVO getDefaultNetworkForBasicZone(DataCenter dc) { protected SecondaryStorageVmVO createOrUpdateSecondaryStorageVm(SecondaryStorageVmVO ssvm, long dataCenterId, long id, String name, ServiceOffering serviceOffering, VMTemplateVO template, Account systemAccount, SecondaryStorageVm.Role role) { + _templateDao.loadDetails(template); if (ssvm == null) { ssvm = new SecondaryStorageVmVO(id, serviceOffering.getId(), name, template.getId(), template.getHypervisorType(), template.getGuestOSId(), dataCenterId, systemAccount.getDomainId(), @@ -634,6 +635,8 @@ protected SecondaryStorageVmVO createOrUpdateSecondaryStorageVm(SecondaryStorage ssvm.setHypervisorType(template.getHypervisorType()); ssvm.setGuestOSId(template.getGuestOSId()); ssvm.setDynamicallyScalable(template.isDynamicallyScalable()); + ssvm.setDetails(template.getDetails()); + _vmDetailsDao.saveDetails(ssvm); _secStorageVmDao.update(ssvm.getId(), ssvm); return ssvm; } diff --git a/services/secondary-storage/controller/src/test/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImplTest.java b/services/secondary-storage/controller/src/test/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImplTest.java index 83596b64ec0f..b311277d7c43 100644 --- a/services/secondary-storage/controller/src/test/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImplTest.java +++ b/services/secondary-storage/controller/src/test/java/org/apache/cloudstack/secondarystorage/SecondaryStorageManagerImplTest.java @@ -26,6 +26,8 @@ import java.util.ArrayList; import java.util.List; +import com.cloud.storage.dao.VMTemplateDao; +import com.cloud.vm.dao.UserVmDetailsDao; import org.apache.cloudstack.engine.subsystem.api.storage.DataStore; import org.apache.commons.lang3.StringUtils; import org.junit.Test; @@ -71,6 +73,10 @@ public class SecondaryStorageManagerImplTest { private Account systemAccount; @Mock private User systemUser; + @Mock + private VMTemplateDao templateDao; + @Mock + private UserVmDetailsDao userVmDetailsDao; private List mockDataStoresForTestAddSecondaryStorageServerAddressToBuffer(List addresses) { List dataStores = new ArrayList<>();