You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by nv...@apache.org on 2023/01/30 11:18:43 UTC
[cloudstack] 01/01: Merge branch '4.17'
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 <ni...@gmail.com>
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);
+ }
+ }