This is an automated email from the ASF dual-hosted git repository. nvazquez pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/cloudstack.git
commit 83c2bfacd879d588816ae0f16f002b3a40ef11c8 Merge: 028ca74fb6c c78a777d3a0 Author: nvazquez <[email protected]> AuthorDate: Mon Jan 30 07:53:58 2023 -0300 Merge branch '4.17' .../java/com/cloud/deploy/DeployDestination.java | 8 +-- .../src/main/java/com/cloud/host/dao/HostDao.java | 8 +++ .../main/java/com/cloud/host/dao/HostDaoImpl.java | 24 ++++++- .../com/cloud/storage/VolumeApiServiceImpl.java | 13 +++- .../cloud/storage/VolumeApiServiceImplTest.java | 34 ++++++++- test/integration/smoke/test_vm_life_cycle.py | 82 ++++++++++++++++++++++ 6 files changed, 159 insertions(+), 10 deletions(-) diff --cc server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java index e330997bcc8,5050a628246..1c7f165ea25 --- a/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java +++ b/server/src/test/java/com/cloud/storage/VolumeApiServiceImplTest.java @@@ -1342,199 -1198,35 +1342,231 @@@ public class VolumeApiServiceImplTest Assert.assertEquals(expectedResult, result); } + @Test (expected = InvalidParameterValueException.class) + public void checkIfVolumeCanBeReassignedTestNullVolume() { + volumeApiServiceImpl.validateVolume(volumeVoMock.getUuid(), null); + } + + @Test (expected = PermissionDeniedException.class) + public void checkIfVolumeCanBeReassignedTestAttachedVolume() { + Mockito.doReturn(vmInstanceMockId).when(volumeVoMock).getInstanceId(); + + volumeApiServiceImpl.validateVolume(volumeVoMock.getUuid(), volumeVoMock); + } + + @Test (expected = PermissionDeniedException.class) + @PrepareForTest (CollectionUtils.class) + public void checkIfVolumeCanBeReassignedTestVolumeWithSnapshots() { + Mockito.doReturn(null).when(volumeVoMock).getInstanceId(); + Mockito.doReturn(snapshotVOArrayListMock).when(snapshotDaoMock).listByStatusNotIn(Mockito.anyLong(), Mockito.any(), Mockito.any()); + + PowerMockito.mockStatic(CollectionUtils.class); + PowerMockito.when(CollectionUtils.isNotEmpty(snapshotVOArrayListMock)).thenReturn(true); + + volumeApiServiceImpl.validateVolume(volumeVoMock.getUuid(), volumeVoMock); + } + + @Test + @PrepareForTest (CollectionUtils.class) + public void checkIfVolumeCanBeReassignedTestValidVolume() { + Mockito.doReturn(null).when(volumeVoMock).getInstanceId(); + Mockito.doReturn(snapshotVOArrayListMock).when(snapshotDaoMock).listByStatusNotIn(Mockito.anyLong(), Mockito.any(), Mockito.any()); + + PowerMockito.mockStatic(CollectionUtils.class); + PowerMockito.when(CollectionUtils.isNotEmpty(snapshotVOArrayListMock)).thenReturn(false); + + volumeApiServiceImpl.validateVolume(volumeVoMock.getUuid(), volumeVoMock); + } + + @Test (expected = InvalidParameterValueException.class) + public void validateAccountsTestNullOldAccount() { + volumeApiServiceImpl.validateAccounts(accountMock.getUuid(), volumeVoMock, null, accountMock); + } + + @Test (expected = InvalidParameterValueException.class) + public void validateAccountsTestNullNewAccount() { + volumeApiServiceImpl.validateAccounts(accountMock.getUuid(), volumeVoMock, accountMock, null); + } + + @Test (expected = InvalidParameterValueException.class) + public void validateAccountsTestDisabledNewAccount() { + Mockito.doReturn(Account.State.DISABLED).when(accountMock).getState(); + volumeApiServiceImpl.validateAccounts(accountMock.getUuid(), volumeVoMock, null, accountMock); + } + + @Test (expected = InvalidParameterValueException.class) + public void validateAccountsTestLockedNewAccount() { + Mockito.doReturn(Account.State.LOCKED).when(accountMock).getState(); + volumeApiServiceImpl.validateAccounts(accountMock.getUuid(), volumeVoMock, null, accountMock); + } + + @Test (expected = InvalidParameterValueException.class) + public void validateAccountsTestSameAccounts() { + volumeApiServiceImpl.validateAccounts(accountMock.getUuid(), volumeVoMock, accountMock, accountMock); + } + + @Test + public void validateAccountsTestValidAccounts() { + Account newAccount = new AccountVO(accountMockId+1); + volumeApiServiceImpl.validateAccounts(accountMock.getUuid(), volumeVoMock, accountMock, newAccount); + } + + @Test + @PrepareForTest(UsageEventUtils.class) + public void updateVolumeAccountTest() { + PowerMockito.mockStatic(UsageEventUtils.class); + Account newAccountMock = new AccountVO(accountMockId+1); + + Mockito.doReturn(volumeVoMock).when(volumeDaoMock).persist(volumeVoMock); + + volumeApiServiceImpl.updateVolumeAccount(accountMock, volumeVoMock, newAccountMock); + + PowerMockito.verifyStatic(UsageEventUtils.class); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), + volumeVoMock.getName(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplayVolume()); + + Mockito.verify(resourceLimitServiceMock).decrementResourceCount(accountMock.getAccountId(), ResourceType.volume, ByteScaleUtils.bytesToGibibytes(volumeVoMock.getSize())); + Mockito.verify(resourceLimitServiceMock).decrementResourceCount(accountMock.getAccountId(), ResourceType.primary_storage, volumeVoMock.getSize()); + + Mockito.verify(volumeVoMock).setAccountId(newAccountMock.getAccountId()); + Mockito.verify(volumeVoMock).setDomainId(newAccountMock.getDomainId()); + + Mockito.verify(volumeDaoMock).persist(volumeVoMock); + + Mockito.verify(resourceLimitServiceMock).incrementResourceCount(newAccountMock.getAccountId(), ResourceType.volume, ByteScaleUtils.bytesToGibibytes(volumeVoMock.getSize())); + Mockito.verify(resourceLimitServiceMock).incrementResourceCount(newAccountMock.getAccountId(), ResourceType.primary_storage, volumeVoMock.getSize()); + + PowerMockito.verifyStatic(UsageEventUtils.class); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_DELETE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), + volumeVoMock.getName(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplayVolume()); + + Mockito.verify(volumeServiceMock).moveVolumeOnSecondaryStorageToAnotherAccount(volumeVoMock, accountMock, newAccountMock); + } + + + @Test (expected = InvalidParameterValueException.class) + public void getAccountOrProjectTestAccountAndProjectInformed() { + volumeApiServiceImpl.getAccountOrProject(projectMock.getUuid(), accountMock.getId(), projectMock.getId(), accountMock); + } + + @Test (expected = InvalidParameterValueException.class) + public void getAccountOrProjectTestUnableToFindProject() { + Mockito.doReturn(null).when(projectManagerMock).getProject(projecMockId); + volumeApiServiceImpl.getAccountOrProject(projectMock.getUuid(), null, projectMock.getId(), accountMock); + } + + @Test (expected = PermissionDeniedException.class) + public void getAccountOrProjectTestCallerDoesNotHaveAccessToProject() { + Mockito.doReturn(projectMock).when(projectManagerMock).getProject(projecMockId); + Mockito.doReturn(false).when(projectManagerMock).canAccessProjectAccount(accountMock, projectMockAccountId); + volumeApiServiceImpl.getAccountOrProject(projectMock.getUuid(), null, projectMock.getId(), accountMock); + } + + @Test + public void getAccountOrProjectTestValidProject() { + Mockito.doReturn(projectMock).when(projectManagerMock).getProject(projecMockId); + Mockito.doReturn(true).when(projectManagerMock).canAccessProjectAccount(accountMock, projectMockAccountId); + volumeApiServiceImpl.getAccountOrProject(projectMock.getUuid(), null, projectMock.getId(), accountMock); + } + + @Test + public void getAccountOrProjectTestValidAccount() { + volumeApiServiceImpl.getAccountOrProject(projectMock.getUuid(), accountMock.getId(),null, accountMock); + } + + @Test + @PrepareForTest(UsageEventUtils.class) + public void publishVolumeCreationUsageEventTestNullDiskOfferingId() { + Mockito.doReturn(null).when(volumeVoMock).getDiskOfferingId(); + PowerMockito.mockStatic(UsageEventUtils.class); + + volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock); + + PowerMockito.verifyStatic(UsageEventUtils.class); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(), + null, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay()); + + } + + @Test + @PrepareForTest(UsageEventUtils.class) + public void publishVolumeCreationUsageEventTestNullDiskOfferingVo() { + Mockito.doReturn(diskOfferingMockId).when(volumeVoMock).getDiskOfferingId(); + Mockito.doReturn(null).when(_diskOfferingDao).findById(diskOfferingMockId); + PowerMockito.mockStatic(UsageEventUtils.class); + + volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock); + + PowerMockito.verifyStatic(UsageEventUtils.class); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(), + null, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay()); + + } + + @Test + @PrepareForTest(UsageEventUtils.class) + public void publishVolumeCreationUsageEventTestDiskOfferingVoTypeNotDisk() { + Mockito.doReturn(diskOfferingMockId).when(volumeVoMock).getDiskOfferingId(); + Mockito.doReturn(newDiskOfferingMock).when(_diskOfferingDao).findById(diskOfferingMockId); + Mockito.doReturn(true).when(newDiskOfferingMock).isComputeOnly(); + + PowerMockito.mockStatic(UsageEventUtils.class); + + volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock); + + PowerMockito.verifyStatic(UsageEventUtils.class); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(), + null, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay()); + + } + + @Test + @PrepareForTest(UsageEventUtils.class) + public void publishVolumeCreationUsageEventTestOfferingIdNotNull() { + Mockito.doReturn(diskOfferingMockId).when(volumeVoMock).getDiskOfferingId(); + Mockito.doReturn(newDiskOfferingMock).when(_diskOfferingDao).findById(diskOfferingMockId); + Mockito.doReturn(false).when(newDiskOfferingMock).isComputeOnly(); + Mockito.doReturn(offeringMockId).when(newDiskOfferingMock).getId(); + + PowerMockito.mockStatic(UsageEventUtils.class); + + volumeApiServiceImpl.publishVolumeCreationUsageEvent(volumeVoMock); + + PowerMockito.verifyStatic(UsageEventUtils.class); + UsageEventUtils.publishUsageEvent(EventTypes.EVENT_VOLUME_CREATE, volumeVoMock.getAccountId(), volumeVoMock.getDataCenterId(), volumeVoMock.getId(), volumeVoMock.getName(), + offeringMockId, volumeVoMock.getTemplateId(), volumeVoMock.getSize(), Volume.class.getName(), volumeVoMock.getUuid(), volumeVoMock.isDisplay()); + + } - } ++ + private void testBaseListOrderedHostsHypervisorVersionInDc(List<String> hwVersions, HypervisorType hypervisorType, + String expected) { + when(_hostDao.listOrderedHostsHypervisorVersionsInDatacenter(anyLong(), any(HypervisorType.class))) + .thenReturn(hwVersions); + String min = volumeApiServiceImpl.getMinimumHypervisorVersionInDatacenter(1L, hypervisorType); + Assert.assertEquals(expected, min); + } + + @Test + public void testGetMinimumHypervisorVersionInDatacenterSimulator() { + List<String> hwVersions = List.of("4.17.3.0-SNAPSHOT"); + HypervisorType hypervisorType = HypervisorType.Simulator; + String expected = "default"; + testBaseListOrderedHostsHypervisorVersionInDc(hwVersions, hypervisorType, expected); + } + + @Test + public void testGetMinimumHypervisorVersionInDatacenterEmptyVersion() { + List<String> hwVersions = List.of("", "xxxx", "yyyy"); + HypervisorType hypervisorType = HypervisorType.KVM; + String expected = "default"; + testBaseListOrderedHostsHypervisorVersionInDc(hwVersions, hypervisorType, expected); + } + + @Test + public void testGetMinimumHypervisorVersionInDatacenterVersions() { + List<String> hwVersions = List.of("6.7", "6.7.1", "6.7.2"); + HypervisorType hypervisorType = HypervisorType.VMware; + String expected = "6.7"; + testBaseListOrderedHostsHypervisorVersionInDc(hwVersions, hypervisorType, expected); + } + }
