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

Check warning on line 3203 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-zfa&open=AZ9rl3b5p7yOvkko-zfa&pullRequest=13562
Host destinationHost = Mockito.mock(Host.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(new String[]{"sag1", "sag2", "sag3"});
List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);
VolumeVO volume2 = Mockito.mock(VolumeVO.class);

Check warning on line 3208 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-zfd&open=AZ9rl3b5p7yOvkko-zfd&pullRequest=13562
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

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 unused "storagePool1" local variable.

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

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

Check warning on line 3221 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-zfn&open=AZ9rl3b5p7yOvkko-zfn&pullRequest=13562

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))

Check warning on line 3229 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-zfs&open=AZ9rl3b5p7yOvkko-zfs&pullRequest=13562
.thenReturn(new String[]{"group1", "group2", "group3"});

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

Mockito.verify(volumeDaoMock).findByInstance(1L);
Mockito.verify(storageManager).getStorageAccessGroups(null, null, null, 2L);
Mockito.verify(storagePoolAndAccessGroupMapDao).getStorageAccessGroups(100L);

Check warning on line 3240 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-zfw&open=AZ9rl3b5p7yOvkko-zfw&pullRequest=13562
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);
Host destinationHost = Mockito.mock(Host.class);

List<VolumeVO> vmVolumes = new ArrayList<>();
VolumeVO volume1 = Mockito.mock(VolumeVO.class);
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 unused "storagePool1" local variable.

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zf1&open=AZ9rl3b5p7yOvkko-zf1&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");

Check warning on line 3257 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-zf4&open=AZ9rl3b5p7yOvkko-zf4&pullRequest=13562

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");
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

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

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

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgA&open=AZ9rl3b5p7yOvkko-zgA&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);

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

Check warning on line 3288 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-zgE&open=AZ9rl3b5p7yOvkko-zgE&pullRequest=13562
Mockito.when(volume1.getName()).thenReturn("volume1");

Check warning on line 3289 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-zgF&open=AZ9rl3b5p7yOvkko-zgF&pullRequest=13562

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 useless assignment to local variable "storagePool1".

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

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);
Mockito.when(destinationHost.getId()).thenReturn(2L);

Check warning on line 3312 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-zgO&open=AZ9rl3b5p7yOvkko-zgO&pullRequest=13562
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);

Check warning on line 3315 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-zgQ&open=AZ9rl3b5p7yOvkko-zgQ&pullRequest=13562
Mockito.when(volume1.getName()).thenReturn("volume1");
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

Check warning on line 3317 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-zgS&open=AZ9rl3b5p7yOvkko-zgS&pullRequest=13562

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

Check warning on line 3319 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-zgT&open=AZ9rl3b5p7yOvkko-zgT&pullRequest=13562
Mockito.when(storageManager.getStorageAccessGroups(null, null, null, 2L))

Check warning on line 3320 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-zgU&open=AZ9rl3b5p7yOvkko-zgU&pullRequest=13562
.thenReturn(new String[]{});

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

Check warning on line 3323 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-zgV&open=AZ9rl3b5p7yOvkko-zgV&pullRequest=13562
.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);
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);

Check warning on line 3339 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);
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);

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))
.thenReturn(new String[]{"group4", "group5", "group6"});
Mockito.when(storagePoolAndAccessGroupMapDao.getStorageAccessGroups(100L))

Check warning on line 3351 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-zgk&open=AZ9rl3b5p7yOvkko-zgk&pullRequest=13562
.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);

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);
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 useless assignment to local variable "storagePool1".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgm&open=AZ9rl3b5p7yOvkko-zgm&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 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

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

Use a static import for "mock".

See more on https://sonarcloud.io/project/issues?id=apache_cloudstack&issues=AZ9rl3b5p7yOvkko-zgt&open=AZ9rl3b5p7yOvkko-zgt&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 unused "storagePool2" local variable.

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

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

Check warning on line 3370 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-zgv&open=AZ9rl3b5p7yOvkko-zgv&pullRequest=13562
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");
Mockito.when(volume1.getVolumeType()).thenReturn(Volume.Type.ROOT);

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

Check warning on line 3379 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-zg2&open=AZ9rl3b5p7yOvkko-zg2&pullRequest=13562
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))

Check warning on line 3389 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-zg7&open=AZ9rl3b5p7yOvkko-zg7&pullRequest=13562
.thenReturn(Arrays.asList("group3", "group4"));
userVmManagerImpl.validateStorageAccessGroupsOnHosts(vm, destinationHost);
}

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