Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 37 additions & 13 deletions server/src/main/java/com/cloud/vm/UserVmManagerImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -413,6 +413,7 @@
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;

import com.cloud.storage.dao.StoragePoolAndAccessGroupMapDao;

public class UserVmManagerImpl extends ManagerBase implements UserVmManager, VirtualMachineGuru, Configurable {

Expand Down Expand Up @@ -592,6 +593,8 @@
@Inject
private StorageManager storageManager;
@Inject
private StoragePoolAndAccessGroupMapDao _storagePoolAndAccessGroupMapDao;

Check warning on line 596 in server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Rename this field "_storagePoolAndAccessGroupMapDao" to match the regular expression '^[a-z][a-zA-Z0-9]*$'.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3S-p7yOvkko-zfX&open=AZ9rl3S-p7yOvkko-zfX&pullRequest=13562
@Inject
private ServiceOfferingJoinDao serviceOfferingJoinDao;
@Inject
private BackupDao backupDao;
Expand Down Expand Up @@ -7311,23 +7314,44 @@
return host.checkHostServiceOfferingAndTemplateTags(serviceOffering, template, strictHostTags);
}

protected void validateStorageAccessGroupsOnHosts(Host srcHost, Host destinationHost) {
String[] storageAccessGroupsOnSrcHost = storageManager.getStorageAccessGroups(null, null, null, srcHost.getId());
String[] storageAccessGroupsOnDestHost = storageManager.getStorageAccessGroups(null, null, null, destinationHost.getId());

List<String> srcHostStorageAccessGroupsList = storageAccessGroupsOnSrcHost != null ? Arrays.asList(storageAccessGroupsOnSrcHost) : Collections.emptyList();
List<String> destHostStorageAccessGroupsList = storageAccessGroupsOnDestHost != null ? Arrays.asList(storageAccessGroupsOnDestHost) : Collections.emptyList();

if (CollectionUtils.isEmpty(srcHostStorageAccessGroupsList)) {
protected void validateStorageAccessGroupsOnHosts(VMInstanceVO vm, Host destinationHost) {
List<VolumeVO> vmVolumes = _volsDao.findByInstance(vm.getId());
if (CollectionUtils.isEmpty(vmVolumes)) {
logger.debug("No volumes found for VM {}, skipping storage access group validation", vm);
return;
}

String[] storageAccessGroupsOnDestHost = storageManager.getStorageAccessGroups(null, null, null, destinationHost.getId());
List<String> destHostStorageAccessGroupsList = Arrays.asList(storageAccessGroupsOnDestHost);
if (CollectionUtils.isEmpty(destHostStorageAccessGroupsList)) {
throw new CloudRuntimeException("Source host has storage access groups, but destination host has none.");
logger.debug("Destination host {} has no storage access groups", destinationHost.getName());
}

if (!destHostStorageAccessGroupsList.containsAll(srcHostStorageAccessGroupsList)) {
throw new CloudRuntimeException("Storage access groups on the source and destination hosts did not match.");
for (VolumeVO volume : vmVolumes) {

Check warning on line 7330 in server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Reduce the total number of break and continue statements in this loop to use at most one.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3S-p7yOvkko-zfW&open=AZ9rl3S-p7yOvkko-zfW&pullRequest=13562
if (volume.getPoolId() == null) {
logger.debug("Volume {} has no storage pool assigned, skipping storage access group validation", volume.getName());
continue;
}
List<String> poolStorageAccessGroupsList = _storagePoolAndAccessGroupMapDao.getStorageAccessGroups(volume.getPoolId());
if (CollectionUtils.isEmpty(poolStorageAccessGroupsList)) {
logger.debug("Storage pool {} has no storage access groups, skipping validation for volume {}",
volume.getPoolId(), volume.getName());
continue;
}
if (Collections.disjoint(poolStorageAccessGroupsList, destHostStorageAccessGroupsList)) {
throw new CloudRuntimeException(String.format(
"Destination host %s does not have any storage access groups that match the requirements for volume %s (Resource Class: %s) on storage pool %d. " +
"Pool requires access groups: %s, but destination host only has: %s",
destinationHost.getName(),
volume.getName(),
volume.getVolumeType(), volume.getPoolId(),
String.join(", ", poolStorageAccessGroupsList),
String.join(", ", destHostStorageAccessGroupsList)
));
}
logger.debug(String.format("Storage access group validation passed for volume %s (Resource Class: %s) on storage pool %d. " +
"Destination host %s has matching access groups.",
volume.getName(), volume.getVolumeType(), volume.getPoolId(), destinationHost.getName()));
}
}

Expand Down Expand Up @@ -7374,7 +7398,7 @@
HostVO destinationHostVO = _hostDao.findById(destinationHost.getId());
_hostDao.loadHostTags(destinationHostVO);
validateStrictHostTagCheck(vm, destinationHostVO);
validateStorageAccessGroupsOnHosts(srcHost, destinationHost);
validateStorageAccessGroupsOnHosts(vm, destinationHost);

checkHostsDedication(vm, srcHost.getId(), destinationHost.getId());

Expand Down Expand Up @@ -7735,7 +7759,7 @@
destinationHost.getName(), destinationHost.getUuid()));
}

validateStorageAccessGroupsOnHosts(srcHost, destinationHost);
validateStorageAccessGroupsOnHosts(vm, destinationHost);

return new Pair<>(srcHost, destinationHost);
}
Expand Down
224 changes: 165 additions & 59 deletions server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -176,6 +176,7 @@
import com.cloud.storage.dao.DiskOfferingDao;
import com.cloud.storage.dao.GuestOSDao;
import com.cloud.storage.dao.SnapshotDao;
import com.cloud.storage.dao.StoragePoolAndAccessGroupMapDao;
import com.cloud.storage.dao.SnapshotPolicyDao;
import com.cloud.storage.dao.VMTemplateDao;
import com.cloud.storage.dao.VolumeDao;
Expand Down Expand Up @@ -422,6 +423,8 @@

@Mock
StorageManager storageManager;
@Mock
private StoragePoolAndAccessGroupMapDao storagePoolAndAccessGroupMapDao;

@Mock
private VolumeDataFactory volumeDataFactory;
Expand Down Expand Up @@ -3196,95 +3199,198 @@
}

@Test
public void validateStorageAccessGroupsOnHostsMatchingSAGsNoException() {
Host srcHost = Mockito.mock(Host.class);
Host destHost = Mockito.mock(Host.class);
public void testValidateStorageAccessGroupsOnHostsVolumeBasedSuccessWithMatchingGroups() {
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);
Host destinationHost = Mockito.mock(Host.class);

Check warning on line 3204 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfb&open=AZ9rl3b5p7yOvkko-zfb&pullRequest=13562

Mockito.when(srcHost.getId()).thenReturn(1L);
Mockito.when(destHost.getId()).thenReturn(2L);
when(storageManager.getStorageAccessGroups(null, null, null, srcHost.getId())).thenReturn(new String[]{"sag1", "sag2"});
when(storageManager.getStorageAccessGroups(null, null, null, destHost.getId())).thenReturn(new String[]{"sag1", "sag2", "sag3"});
List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);
VolumeVO volume2 = Mockito.mock(VolumeVO.class);
vmVolumes.add(volume1);
vmVolumes.add(volume2);

userVmManagerImpl.validateStorageAccessGroupsOnHosts(srcHost, destHost);
StoragePoolVO storagePool1 = Mockito.mock(StoragePoolVO.class);

Check warning on line 3212 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this useless assignment to local variable "storagePool1".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfZ&open=AZ9rl3b5p7yOvkko-zfZ&pullRequest=13562
StoragePoolVO storagePool2 = Mockito.mock(StoragePoolVO.class);

Check warning on line 3213 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused "storagePool2" local variable.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfh&open=AZ9rl3b5p7yOvkko-zfh&pullRequest=13562

Check warning on line 3213 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this useless assignment to local variable "storagePool2".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfY&open=AZ9rl3b5p7yOvkko-zfY&pullRequest=13562

Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, srcHost.getId());
Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, destHost.getId());
}
Mockito.when(vm.getId()).thenReturn(1L);

Check warning on line 3215 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfi&open=AZ9rl3b5p7yOvkko-zfi&pullRequest=13562
Mockito.when(destinationHost.getId()).thenReturn(2L);

Check warning on line 3216 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfj&open=AZ9rl3b5p7yOvkko-zfj&pullRequest=13562
Mockito.when(destinationHost.getName()).thenReturn("destHost");

@Test(expected = CloudRuntimeException.class)
public void validateSAGsOnHostsNonMatchingSAGsThrowsException() {
Host srcHost = Mockito.mock(Host.class);
Host destHost = Mockito.mock(Host.class);
Mockito.when(volume1.getPoolId()).thenReturn(100L);
Mockito.when(volume1.getName()).thenReturn("volume1");
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

Mockito.when(volume2.getPoolId()).thenReturn(200L);
Mockito.when(volume2.getName()).thenReturn("volume2");
Mockito.when(volume2.getVolumeType()).thenReturn(Volume.Type.DATADISK);

Check warning on line 3225 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfq&open=AZ9rl3b5p7yOvkko-zfq&pullRequest=13562

Mockito.when(srcHost.getId()).thenReturn(1L);
Mockito.when(destHost.getId()).thenReturn(2L);
when(storageManager.getStorageAccessGroups(null, null, null, srcHost.getId())).thenReturn(new String[]{"sag1", "sag2"});
when(storageManager.getStorageAccessGroups(null, null, null, destHost.getId())).thenReturn(new String[]{"sag1", "sag3"});
Mockito.when(volumeDaoMock.findByInstance(1L)).thenReturn(vmVolumes);

userVmManagerImpl.validateStorageAccessGroupsOnHosts(srcHost, destHost);
Mockito.when(storageManager.getStorageAccessGroups(null, null, null, 2L))
.thenReturn(new String[]{"group1", "group2", "group3"});

Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(100L))

Check warning on line 3232 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zft&open=AZ9rl3b5p7yOvkko-zft&pullRequest=13562
.thenReturn(Arrays.asList("group1", "group2"));
Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(200L))
.thenReturn(Arrays.asList("group2", "group3"));
userVmManagerImpl.validateStorageAccessGroupsOnHosts(vm, destinationHost);

Mockito.verify(volumeDaoMock).findByInstance(1L);

Check warning on line 3238 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "verify".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfu&open=AZ9rl3b5p7yOvkko-zfu&pullRequest=13562
Mockito.verify(storageManager).getStorageAccessGroups(null, null, null, 2L);

Check warning on line 3239 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "verify".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfv&open=AZ9rl3b5p7yOvkko-zfv&pullRequest=13562
Mockito.verify(storagePoolAndAccessGroupMapDao).getStorageAccessGroups(100L);
Mockito.verify(storagePoolAndAccessGroupMapDao).getStorageAccessGroups(200L);
}

@Test
public void validateEmptyStorageAccessGroupOnHosts() {
Host srcHost = Mockito.mock(Host.class);
Host destHost = Mockito.mock(Host.class);
public void testValidateStorageAccessGroupsOnHostsVolumeBasedSuccessWithIntersection() {
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);

Check warning on line 3246 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfy&open=AZ9rl3b5p7yOvkko-zfy&pullRequest=13562
Host destinationHost = Mockito.mock(Host.class);

List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);

Check warning on line 3250 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfz&open=AZ9rl3b5p7yOvkko-zfz&pullRequest=13562
vmVolumes.add(volume1);

StoragePoolVO storagePool1 = Mockito.mock(StoragePoolVO.class);

Check warning on line 3253 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this useless assignment to local variable "storagePool1".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zfx&open=AZ9rl3b5p7yOvkko-zfx&pullRequest=13562

Check warning on line 3253 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf0&open=AZ9rl3b5p7yOvkko-zf0&pullRequest=13562

Mockito.when(srcHost.getId()).thenReturn(1L);
Mockito.when(destHost.getId()).thenReturn(2L);
when(storageManager.getStorageAccessGroups(null, null, null, srcHost.getId())).thenReturn(new String[]{});
when(storageManager.getStorageAccessGroups(null, null, null, destHost.getId())).thenReturn(new String[]{});
Mockito.when(vm.getId()).thenReturn(1L);
Mockito.when(destinationHost.getId()).thenReturn(2L);

Check warning on line 3256 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf3&open=AZ9rl3b5p7yOvkko-zf3&pullRequest=13562
Mockito.when(destinationHost.getName()).thenReturn("destHost");

Mockito.when(volume1.getPoolId()).thenReturn(100L);

Check warning on line 3259 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf5&open=AZ9rl3b5p7yOvkko-zf5&pullRequest=13562
Mockito.when(volume1.getName()).thenReturn("volume1");

Check warning on line 3260 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf6&open=AZ9rl3b5p7yOvkko-zf6&pullRequest=13562
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

Check warning on line 3261 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf7&open=AZ9rl3b5p7yOvkko-zf7&pullRequest=13562

Mockito.when(volumeDaoMock.findByInstance(1L)).thenReturn(vmVolumes);

Mockito.when(storageManager.getStorageAccessGroups(null, null, null, 2L))

Check warning on line 3265 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf8&open=AZ9rl3b5p7yOvkko-zf8&pullRequest=13562
.thenReturn(new String[]{"group2", "group4", "group5"});

userVmManagerImpl.validateStorageAccessGroupsOnHosts(srcHost, destHost);
Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(100L))
.thenReturn(Arrays.asList("group1", "group2", "group3"));

Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, srcHost.getId());
Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, destHost.getId());
userVmManagerImpl.validateStorageAccessGroupsOnHosts(vm, destinationHost);
}

@Test
public void validateSAGsOnHostsNullStorageAccessGroups() {
Host srcHost = Mockito.mock(Host.class);
Host destHost = Mockito.mock(Host.class);
public void testValidateStorageAccessGroupsOnHostsSuccessWithEmptyStorageGroups() {
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);
Host destinationHost = Mockito.mock(Host.class);

List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);

Check warning on line 3280 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf_&open=AZ9rl3b5p7yOvkko-zf_&pullRequest=13562
vmVolumes.add(volume1);

StoragePoolVO storagePool1 = Mockito.mock(StoragePoolVO.class);

Check warning on line 3283 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused "storagePool1" local variable.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgB&open=AZ9rl3b5p7yOvkko-zgB&pullRequest=13562

Check warning on line 3283 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this useless assignment to local variable "storagePool1".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf-&open=AZ9rl3b5p7yOvkko-zf-&pullRequest=13562

Mockito.when(vm.getId()).thenReturn(1L);

Check warning on line 3285 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgC&open=AZ9rl3b5p7yOvkko-zgC&pullRequest=13562
Mockito.when(destinationHost.getId()).thenReturn(2L);

Check warning on line 3286 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgD&open=AZ9rl3b5p7yOvkko-zgD&pullRequest=13562

Mockito.when(volume1.getPoolId()).thenReturn(100L);
Mockito.when(volume1.getName()).thenReturn("volume1");

Mockito.when(volumeDaoMock.findByInstance(1L)).thenReturn(vmVolumes);

Mockito.when(storageManager.getStorageAccessGroups(null, null, null, 2L))
.thenReturn(new String[]{"group1", "group2"});
Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(100L))
.thenReturn(List.of());
userVmManagerImpl.validateStorageAccessGroupsOnHosts(vm, destinationHost);
}

Mockito.when(srcHost.getId()).thenReturn(1L);
Mockito.when(destHost.getId()).thenReturn(2L);
when(storageManager.getStorageAccessGroups(null, null, null, srcHost.getId())).thenReturn(null);
when(storageManager.getStorageAccessGroups(null, null, null, destHost.getId())).thenReturn(null);
@Test(expected = CloudRuntimeException.class)
public void testValidateStorageAccessGroupsOnHostsDestinationHostEmptyGroups() {
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);
Host destinationHost = Mockito.mock(Host.class);

Check warning on line 3303 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgK&open=AZ9rl3b5p7yOvkko-zgK&pullRequest=13562

userVmManagerImpl.validateStorageAccessGroupsOnHosts(srcHost, destHost);
List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);
vmVolumes.add(volume1);

StoragePoolVO storagePool1 = Mockito.mock(StoragePoolVO.class);

Check warning on line 3309 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused "storagePool1" local variable.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgM&open=AZ9rl3b5p7yOvkko-zgM&pullRequest=13562

Mockito.when(vm.getId()).thenReturn(1L);

Check warning on line 3311 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgN&open=AZ9rl3b5p7yOvkko-zgN&pullRequest=13562
Mockito.when(destinationHost.getId()).thenReturn(2L);
Mockito.when(destinationHost.getName()).thenReturn("destHost");

Check warning on line 3313 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgP&open=AZ9rl3b5p7yOvkko-zgP&pullRequest=13562

Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, srcHost.getId());
Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, destHost.getId());
Mockito.when(volume1.getPoolId()).thenReturn(100L);
Mockito.when(volume1.getName()).thenReturn("volume1");
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

Mockito.when(volumeDaoMock.findByInstance(1L)).thenReturn(vmVolumes);
Mockito.when(storageManager.getStorageAccessGroups(null, null, null, 2L))
.thenReturn(new String[]{});

Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(100L))
.thenReturn(List.of("group1"));
userVmManagerImpl.validateStorageAccessGroupsOnHosts(vm, destinationHost);
}

@Test(expected = CloudRuntimeException.class)
public void validateSAGsOnDestHostNullStorageAccessGroups() {
Host srcHost = Mockito.mock(Host.class);
Host destHost = Mockito.mock(Host.class);
public void testValidateStorageAccessGroupsOnHostsFailureNoMatch() {
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);

Check warning on line 3330 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgX&open=AZ9rl3b5p7yOvkko-zgX&pullRequest=13562
Host destinationHost = Mockito.mock(Host.class);

Check warning on line 3331 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgY&open=AZ9rl3b5p7yOvkko-zgY&pullRequest=13562

List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);

Check warning on line 3334 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgZ&open=AZ9rl3b5p7yOvkko-zgZ&pullRequest=13562
vmVolumes.add(volume1);

StoragePoolVO storagePool1 = Mockito.mock(StoragePoolVO.class);

Mockito.when(srcHost.getId()).thenReturn(1L);
Mockito.when(destHost.getId()).thenReturn(2L);
when(storageManager.getStorageAccessGroups(null, null, null, srcHost.getId())).thenReturn(new String[]{"sag1", "sag2"});
when(storageManager.getStorageAccessGroups(null, null, null, destHost.getId())).thenReturn(null);
Mockito.when(vm.getId()).thenReturn(1L);
Mockito.when(destinationHost.getId()).thenReturn(2L);

Check warning on line 3340 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgd&open=AZ9rl3b5p7yOvkko-zgd&pullRequest=13562
Mockito.when(destinationHost.getName()).thenReturn("destHost");

Mockito.when(volume1.getPoolId()).thenReturn(100L);
Mockito.when(volume1.getName()).thenReturn("volume1");

Check warning on line 3344 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgg&open=AZ9rl3b5p7yOvkko-zgg&pullRequest=13562
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

Check warning on line 3345 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgh&open=AZ9rl3b5p7yOvkko-zgh&pullRequest=13562

userVmManagerImpl.validateStorageAccessGroupsOnHosts(srcHost, destHost);
Mockito.when(volumeDaoMock.findByInstance(1L)).thenReturn(vmVolumes);

Check warning on line 3347 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgi&open=AZ9rl3b5p7yOvkko-zgi&pullRequest=13562

Mockito.when(storageManager.getStorageAccessGroups(null, null, null, 2L))

Check warning on line 3349 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgj&open=AZ9rl3b5p7yOvkko-zgj&pullRequest=13562
.thenReturn(new String[]{"group4", "group5", "group6"});
Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(100L))
.thenReturn(Arrays.asList("group1", "group2", "group3"));
userVmManagerImpl.validateStorageAccessGroupsOnHosts(vm, destinationHost);
}

@Test
public void validateNullStorageAccessGroupsOnSrcHost() {
@Test(expected = CloudRuntimeException.class)
public void testValidateStorageAccessGroupsOnHostsMultipleVolumesFailure() {
VMInstanceVO vm = Mockito.mock(VMInstanceVO.class);
Host destinationHost = Mockito.mock(Host.class);

Check warning on line 3359 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgo&open=AZ9rl3b5p7yOvkko-zgo&pullRequest=13562

Host srcHost = Mockito.mock(Host.class);
Host destHost = Mockito.mock(Host.class);
List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);
VolumeVO volume2 = Mockito.mock(VolumeVO.class);

Check warning on line 3363 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgq&open=AZ9rl3b5p7yOvkko-zgq&pullRequest=13562
vmVolumes.add(volume1);
vmVolumes.add(volume2);

Mockito.when(srcHost.getId()).thenReturn(1L);
Mockito.when(destHost.getId()).thenReturn(2L);
when(storageManager.getStorageAccessGroups(null, null, null, srcHost.getId())).thenReturn(null);
when(storageManager.getStorageAccessGroups(null, null, null, destHost.getId())).thenReturn(new String[]{"sag1", "sag2"});
StoragePoolVO storagePool1 = Mockito.mock(StoragePoolVO.class);

Check warning on line 3367 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused "storagePool1" local variable.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgs&open=AZ9rl3b5p7yOvkko-zgs&pullRequest=13562

Check warning on line 3367 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgr&open=AZ9rl3b5p7yOvkko-zgr&pullRequest=13562
StoragePoolVO storagePool2 = Mockito.mock(StoragePoolVO.class);

Check warning on line 3368 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this unused "storagePool2" local variable.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgu&open=AZ9rl3b5p7yOvkko-zgu&pullRequest=13562

Check warning on line 3368 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Remove this useless assignment to local variable "storagePool2".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgl&open=AZ9rl3b5p7yOvkko-zgl&pullRequest=13562

userVmManagerImpl.validateStorageAccessGroupsOnHosts(srcHost, destHost);
Mockito.when(vm.getId()).thenReturn(1L);
Mockito.when(destinationHost.getId()).thenReturn(2L);
Mockito.when(destinationHost.getName()).thenReturn("destHost");

Check warning on line 3372 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgx&open=AZ9rl3b5p7yOvkko-zgx&pullRequest=13562

Mockito.when(volume1.getPoolId()).thenReturn(100L);
Mockito.when(volume1.getName()).thenReturn("volume1");

Check warning on line 3375 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgz&open=AZ9rl3b5p7yOvkko-zgz&pullRequest=13562
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

Check warning on line 3376 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zg0&open=AZ9rl3b5p7yOvkko-zg0&pullRequest=13562

Mockito.when(volume2.getPoolId()).thenReturn(200L);

Check warning on line 3378 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zg1&open=AZ9rl3b5p7yOvkko-zg1&pullRequest=13562
Mockito.when(volume2.getName()).thenReturn("volume2");
Mockito.when(volume2.getVolumeType()).thenReturn(Volume.Type.DATADISK);

Check warning on line 3380 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zg3&open=AZ9rl3b5p7yOvkko-zg3&pullRequest=13562

Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, srcHost.getId());
Mockito.verify(storageManager, times(1)).getStorageAccessGroups(null, null, null, destHost.getId());
Mockito.when(volumeDaoMock.findByInstance(1L)).thenReturn(vmVolumes);

Check warning on line 3382 in server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java

View check run for this annotation

SonarQubeCloud / SonarCloud Code Analysis

Use a static import for "when".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zg4&open=AZ9rl3b5p7yOvkko-zg4&pullRequest=13562

Mockito.when(storageManager.getStorageAccessGroups(null, null, null, 2L))
.thenReturn(new String[]{"group1", "group2"});

Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(100L))
.thenReturn(List.of("group1"));
Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(200L))
.thenReturn(Arrays.asList("group3", "group4"));
userVmManagerImpl.validateStorageAccessGroupsOnHosts(vm, destinationHost);
}

@Test
public void testAllocateVMFromBackupUsingCmdValues() throws InsufficientCapacityException, ResourceAllocationException, ResourceUnavailableException {
Long backupId = 4L;
Expand Down
Loading