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);
+     }
+ }