Inject hypervisor type and volume format on Quota tariffs (#8138)

This commit is contained in:
Fabricio Duarte 2023-11-14 05:12:58 -03:00 committed by GitHub
parent 05b9b6e2e7
commit df4cd2aae4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
8 changed files with 204 additions and 96 deletions

View File

@ -455,7 +455,7 @@ public class QuotaManagerImpl extends ManagerBase implements QuotaManager {
} }
jsInterpreter.injectVariable("resourceType", presetVariables.getResourceType()); jsInterpreter.injectStringVariable("resourceType", presetVariables.getResourceType());
jsInterpreter.injectVariable("value", presetVariables.getValue().toString()); jsInterpreter.injectVariable("value", presetVariables.getValue().toString());
jsInterpreter.injectVariable("zone", presetVariables.getZone().toString()); jsInterpreter.injectVariable("zone", presetVariables.getZone().toString());
} }

View File

@ -27,6 +27,7 @@ import java.util.stream.Collectors;
import javax.inject.Inject; import javax.inject.Inject;
import com.cloud.hypervisor.Hypervisor;
import org.apache.cloudstack.acl.RoleVO; import org.apache.cloudstack.acl.RoleVO;
import org.apache.cloudstack.acl.dao.RoleDao; import org.apache.cloudstack.acl.dao.RoleDao;
import org.apache.cloudstack.backup.BackupOfferingVO; import org.apache.cloudstack.backup.BackupOfferingVO;
@ -65,6 +66,7 @@ import com.cloud.storage.DiskOfferingVO;
import com.cloud.storage.GuestOSVO; import com.cloud.storage.GuestOSVO;
import com.cloud.storage.Snapshot; import com.cloud.storage.Snapshot;
import com.cloud.storage.SnapshotVO; import com.cloud.storage.SnapshotVO;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VolumeVO; import com.cloud.storage.VolumeVO;
import com.cloud.storage.dao.DiskOfferingDao; import com.cloud.storage.dao.DiskOfferingDao;
@ -318,6 +320,10 @@ public class PresetVariableHelper {
value.setTags(getPresetVariableValueResourceTags(vmId, ResourceObjectType.UserVm)); value.setTags(getPresetVariableValueResourceTags(vmId, ResourceObjectType.UserVm));
value.setTemplate(getPresetVariableValueTemplate(vmVo.getTemplateId())); value.setTemplate(getPresetVariableValueTemplate(vmVo.getTemplateId()));
Hypervisor.HypervisorType hypervisorType = vmVo.getHypervisorType();
if (hypervisorType != null) {
value.setHypervisorType(hypervisorType.name());
}
} }
protected void logNotLoadingMessageInTrace(String resource, int usageType) { protected void logNotLoadingMessageInTrace(String resource, int usageType) {
@ -470,6 +476,11 @@ public class PresetVariableHelper {
value.setTags(getPresetVariableValueResourceTags(volumeId, ResourceObjectType.Volume)); value.setTags(getPresetVariableValueResourceTags(volumeId, ResourceObjectType.Volume));
value.setSize(ByteScaleUtils.bytesToMebibytes(volumeVo.getSize())); value.setSize(ByteScaleUtils.bytesToMebibytes(volumeVo.getSize()));
ImageFormat format = volumeVo.getFormat();
if (format != null) {
value.setVolumeFormat(format.name());
}
} }
protected GenericPresetVariable getPresetVariableValueDiskOffering(Long diskOfferingId) { protected GenericPresetVariable getPresetVariableValueDiskOffering(Long diskOfferingId) {
@ -558,6 +569,10 @@ public class PresetVariableHelper {
value.setSnapshotType(Snapshot.Type.values()[snapshotVo.getSnapshotType()]); value.setSnapshotType(Snapshot.Type.values()[snapshotVo.getSnapshotType()]);
value.setStorage(getPresetVariableValueStorage(getSnapshotDataStoreId(snapshotId, usageRecord.getZoneId()), usageType)); value.setStorage(getPresetVariableValueStorage(getSnapshotDataStoreId(snapshotId, usageRecord.getZoneId()), usageType));
value.setTags(getPresetVariableValueResourceTags(snapshotId, ResourceObjectType.Snapshot)); value.setTags(getPresetVariableValueResourceTags(snapshotId, ResourceObjectType.Snapshot));
Hypervisor.HypervisorType hypervisorType = snapshotVo.getHypervisorType();
if (hypervisorType != null) {
value.setHypervisorType(hypervisorType.name());
}
} }
protected SnapshotDataStoreVO getSnapshotImageStoreRef(long snapshotId, long zoneId) { protected SnapshotDataStoreVO getSnapshotImageStoreRef(long snapshotId, long zoneId) {
@ -621,6 +636,11 @@ public class PresetVariableHelper {
value.setName(vmSnapshotVo.getName()); value.setName(vmSnapshotVo.getName());
value.setTags(getPresetVariableValueResourceTags(vmSnapshotId, ResourceObjectType.VMSnapshot)); value.setTags(getPresetVariableValueResourceTags(vmSnapshotId, ResourceObjectType.VMSnapshot));
value.setVmSnapshotType(vmSnapshotVo.getType()); value.setVmSnapshotType(vmSnapshotVo.getType());
VMInstanceVO vmVo = vmInstanceDao.findByIdIncludingRemoved(vmSnapshotVo.getVmId());
if (vmVo != null && vmVo.getHypervisorType() != null) {
value.setHypervisorType(vmVo.getHypervisorType().name());
}
} }
protected void loadPresetVariableValueForBackup(UsageVO usageRecord, Value value) { protected void loadPresetVariableValueForBackup(UsageVO usageRecord, Value value) {

View File

@ -41,6 +41,8 @@ public class Value extends GenericPresetVariable {
private Storage storage; private Storage storage;
private ComputingResources computingResources; private ComputingResources computingResources;
private BackupOffering backupOffering; private BackupOffering backupOffering;
private String hypervisorType;
private String volumeFormat;
public Host getHost() { public Host getHost() {
return host; return host;
@ -185,4 +187,22 @@ public class Value extends GenericPresetVariable {
this.backupOffering = backupOffering; this.backupOffering = backupOffering;
fieldNamesToIncludeInToString.add("backupOffering"); fieldNamesToIncludeInToString.add("backupOffering");
} }
public void setHypervisorType(String hypervisorType) {
this.hypervisorType = hypervisorType;
fieldNamesToIncludeInToString.add("hypervisorType");
}
public String getHypervisorType() {
return hypervisorType;
}
public void setVolumeFormat(String volumeFormat) {
this.volumeFormat = volumeFormat;
fieldNamesToIncludeInToString.add("volumeFormat");
}
public String getVolumeFormat() {
return volumeFormat;
}
} }

View File

@ -267,7 +267,7 @@ public class QuotaManagerImplTest {
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), Mockito.anyString());
Mockito.verify(jsInterpreterMock, Mockito.never()).injectVariable(Mockito.eq("project"), Mockito.anyString()); Mockito.verify(jsInterpreterMock, Mockito.never()).injectVariable(Mockito.eq("project"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectStringVariable(Mockito.eq("resourceType"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), Mockito.anyString());
} }
@ -288,7 +288,7 @@ public class QuotaManagerImplTest {
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("account"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("domain"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("project"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("project"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("resourceType"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectStringVariable(Mockito.eq("resourceType"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("value"), Mockito.anyString());
Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), Mockito.anyString()); Mockito.verify(jsInterpreterMock).injectVariable(Mockito.eq("zone"), Mockito.anyString());
} }

View File

@ -27,6 +27,7 @@ import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import com.cloud.hypervisor.Hypervisor;
import org.apache.cloudstack.acl.RoleType; import org.apache.cloudstack.acl.RoleType;
import org.apache.cloudstack.acl.RoleVO; import org.apache.cloudstack.acl.RoleVO;
import org.apache.cloudstack.acl.dao.RoleDao; import org.apache.cloudstack.acl.dao.RoleDao;
@ -70,6 +71,7 @@ import com.cloud.storage.GuestOSVO;
import com.cloud.storage.ScopeType; import com.cloud.storage.ScopeType;
import com.cloud.storage.Snapshot; import com.cloud.storage.Snapshot;
import com.cloud.storage.SnapshotVO; import com.cloud.storage.SnapshotVO;
import com.cloud.storage.Storage.ImageFormat;
import com.cloud.storage.Storage.ProvisioningType; import com.cloud.storage.Storage.ProvisioningType;
import com.cloud.storage.VMTemplateVO; import com.cloud.storage.VMTemplateVO;
import com.cloud.storage.VolumeVO; import com.cloud.storage.VolumeVO;
@ -485,38 +487,42 @@ public class PresetVariableHelperTest {
@Test @Test
public void loadPresetVariableValueForRunningAndAllocatedVmTestRecordIsRunningOrAllocatedVmSetFields() { public void loadPresetVariableValueForRunningAndAllocatedVmTestRecordIsRunningOrAllocatedVmSetFields() {
Value expected = getValueForTests(); for (Hypervisor.HypervisorType hypervisorType : Hypervisor.HypervisorType.values()) {
Value expected = getValueForTests();
Mockito.doReturn(vmInstanceVoMock).when(vmInstanceDaoMock).findByIdIncludingRemoved(Mockito.anyLong()); Mockito.doReturn(vmInstanceVoMock).when(vmInstanceDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
mockMethodValidateIfObjectIsNull(); mockMethodValidateIfObjectIsNull();
Mockito.doNothing().when(presetVariableHelperSpy).setPresetVariableHostInValueIfUsageTypeIsRunningVm(Mockito.any(Value.class), Mockito.anyInt(), Mockito.doNothing().when(presetVariableHelperSpy).setPresetVariableHostInValueIfUsageTypeIsRunningVm(Mockito.any(Value.class), Mockito.anyInt(),
Mockito.any(VMInstanceVO.class)); Mockito.any(VMInstanceVO.class));
Mockito.doReturn(expected.getId()).when(vmInstanceVoMock).getUuid(); Mockito.doReturn(expected.getId()).when(vmInstanceVoMock).getUuid();
Mockito.doReturn(expected.getName()).when(vmInstanceVoMock).getHostName(); Mockito.doReturn(expected.getName()).when(vmInstanceVoMock).getHostName();
Mockito.doReturn(expected.getOsName()).when(presetVariableHelperSpy).getPresetVariableValueOsName(Mockito.anyLong()); Mockito.doReturn(expected.getOsName()).when(presetVariableHelperSpy).getPresetVariableValueOsName(Mockito.anyLong());
Mockito.doNothing().when(presetVariableHelperSpy).setPresetVariableValueServiceOfferingAndComputingResources(Mockito.any(), Mockito.anyInt(), Mockito.any()); Mockito.doNothing().when(presetVariableHelperSpy).setPresetVariableValueServiceOfferingAndComputingResources(Mockito.any(), Mockito.anyInt(), Mockito.any());
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class)); Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
Mockito.doReturn(expected.getTemplate()).when(presetVariableHelperSpy).getPresetVariableValueTemplate(Mockito.anyLong()); Mockito.doReturn(expected.getTemplate()).when(presetVariableHelperSpy).getPresetVariableValueTemplate(Mockito.anyLong());
Mockito.doReturn(hypervisorType).when(vmInstanceVoMock).getHypervisorType();
runningAndAllocatedVmUsageTypes.forEach(type -> { runningAndAllocatedVmUsageTypes.forEach(type -> {
Mockito.doReturn(type).when(usageVoMock).getUsageType(); Mockito.doReturn(type).when(usageVoMock).getUsageType();
Value result = new Value(); Value result = new Value();
presetVariableHelperSpy.loadPresetVariableValueForRunningAndAllocatedVm(usageVoMock, result); presetVariableHelperSpy.loadPresetVariableValueForRunningAndAllocatedVm(usageVoMock, result);
assertPresetVariableIdAndName(expected, result); assertPresetVariableIdAndName(expected, result);
Assert.assertEquals(expected.getOsName(), result.getOsName()); Assert.assertEquals(expected.getOsName(), result.getOsName());
Assert.assertEquals(expected.getTags(), result.getTags()); Assert.assertEquals(expected.getTags(), result.getTags());
Assert.assertEquals(expected.getTemplate(), result.getTemplate()); Assert.assertEquals(expected.getTemplate(), result.getTemplate());
Assert.assertEquals(hypervisorType.name(), result.getHypervisorType());
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "osName", "tags", "template"), result); validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "osName", "tags", "template", "hypervisorType"), result);
}); });
}
Mockito.verify(presetVariableHelperSpy, Mockito.times(runningAndAllocatedVmUsageTypes.size())).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.verify(presetVariableHelperSpy, Mockito.times(runningAndAllocatedVmUsageTypes.size() * Hypervisor.HypervisorType.values().length))
Mockito.eq(ResourceObjectType.UserVm)); .getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.UserVm));
} }
@Test @Test
@ -636,75 +642,85 @@ public class PresetVariableHelperTest {
@Test @Test
public void loadPresetVariableValueForVolumeTestRecordIsVolumeAndHasStorageSetFields() { public void loadPresetVariableValueForVolumeTestRecordIsVolumeAndHasStorageSetFields() {
Value expected = getValueForTests(); for (ImageFormat imageFormat : ImageFormat.values()) {
Value expected = getValueForTests();
VolumeVO volumeVoMock = Mockito.mock(VolumeVO.class); VolumeVO volumeVoMock = Mockito.mock(VolumeVO.class);
Mockito.doReturn(volumeVoMock).when(volumeDaoMock).findByIdIncludingRemoved(Mockito.anyLong()); Mockito.doReturn(volumeVoMock).when(volumeDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
Mockito.doReturn(1l).when(volumeVoMock).getPoolId(); Mockito.doReturn(1l).when(volumeVoMock).getPoolId();
mockMethodValidateIfObjectIsNull(); mockMethodValidateIfObjectIsNull();
Mockito.doReturn(expected.getId()).when(volumeVoMock).getUuid(); Mockito.doReturn(expected.getId()).when(volumeVoMock).getUuid();
Mockito.doReturn(expected.getName()).when(volumeVoMock).getName(); Mockito.doReturn(expected.getName()).when(volumeVoMock).getName();
Mockito.doReturn(expected.getDiskOffering()).when(presetVariableHelperSpy).getPresetVariableValueDiskOffering(Mockito.anyLong()); Mockito.doReturn(expected.getDiskOffering()).when(presetVariableHelperSpy).getPresetVariableValueDiskOffering(Mockito.anyLong());
Mockito.doReturn(expected.getProvisioningType()).when(volumeVoMock).getProvisioningType(); Mockito.doReturn(expected.getProvisioningType()).when(volumeVoMock).getProvisioningType();
Mockito.doReturn(expected.getStorage()).when(presetVariableHelperSpy).getPresetVariableValueStorage(Mockito.anyLong(), Mockito.anyInt()); Mockito.doReturn(expected.getStorage()).when(presetVariableHelperSpy).getPresetVariableValueStorage(Mockito.anyLong(), Mockito.anyInt());
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class)); Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize(); Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize();
Mockito.doReturn(imageFormat).when(volumeVoMock).getFormat();
Mockito.doReturn(UsageTypes.VOLUME).when(usageVoMock).getUsageType(); Mockito.doReturn(UsageTypes.VOLUME).when(usageVoMock).getUsageType();
Value result = new Value(); Value result = new Value();
presetVariableHelperSpy.loadPresetVariableValueForVolume(usageVoMock, result); presetVariableHelperSpy.loadPresetVariableValueForVolume(usageVoMock, result);
Long expectedSize = ByteScaleUtils.bytesToMebibytes(expected.getSize()); Long expectedSize = ByteScaleUtils.bytesToMebibytes(expected.getSize());
assertPresetVariableIdAndName(expected, result); assertPresetVariableIdAndName(expected, result);
Assert.assertEquals(expected.getDiskOffering(), result.getDiskOffering()); Assert.assertEquals(expected.getDiskOffering(), result.getDiskOffering());
Assert.assertEquals(expected.getProvisioningType(), result.getProvisioningType()); Assert.assertEquals(expected.getProvisioningType(), result.getProvisioningType());
Assert.assertEquals(expected.getStorage(), result.getStorage()); Assert.assertEquals(expected.getStorage(), result.getStorage());
Assert.assertEquals(expected.getTags(), result.getTags()); Assert.assertEquals(expected.getTags(), result.getTags());
Assert.assertEquals(expectedSize, result.getSize()); Assert.assertEquals(expectedSize, result.getSize());
Assert.assertEquals(imageFormat.name(), result.getVolumeFormat());
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "storage", "tags", "size"), result); validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "storage", "tags", "size", "volumeFormat"), result);
}
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.Volume)); Mockito.verify(presetVariableHelperSpy, Mockito.times(ImageFormat.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
Mockito.eq(ResourceObjectType.Volume));
} }
@Test @Test
public void loadPresetVariableValueForVolumeTestRecordIsVolumeAndDoesNotHaveStorageSetFields() { public void loadPresetVariableValueForVolumeTestRecordIsVolumeAndDoesNotHaveStorageSetFields() {
Value expected = getValueForTests(); for (ImageFormat imageFormat : ImageFormat.values()) {
Value expected = getValueForTests();
VolumeVO volumeVoMock = Mockito.mock(VolumeVO.class); VolumeVO volumeVoMock = Mockito.mock(VolumeVO.class);
Mockito.doReturn(volumeVoMock).when(volumeDaoMock).findByIdIncludingRemoved(Mockito.anyLong()); Mockito.doReturn(volumeVoMock).when(volumeDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
Mockito.doReturn(null).when(volumeVoMock).getPoolId(); Mockito.doReturn(null).when(volumeVoMock).getPoolId();
mockMethodValidateIfObjectIsNull(); mockMethodValidateIfObjectIsNull();
Mockito.doReturn(expected.getId()).when(volumeVoMock).getUuid(); Mockito.doReturn(expected.getId()).when(volumeVoMock).getUuid();
Mockito.doReturn(expected.getName()).when(volumeVoMock).getName(); Mockito.doReturn(expected.getName()).when(volumeVoMock).getName();
Mockito.doReturn(expected.getDiskOffering()).when(presetVariableHelperSpy).getPresetVariableValueDiskOffering(Mockito.anyLong()); Mockito.doReturn(expected.getDiskOffering()).when(presetVariableHelperSpy).getPresetVariableValueDiskOffering(Mockito.anyLong());
Mockito.doReturn(expected.getProvisioningType()).when(volumeVoMock).getProvisioningType(); Mockito.doReturn(expected.getProvisioningType()).when(volumeVoMock).getProvisioningType();
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class)); Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize(); Mockito.doReturn(expected.getSize()).when(volumeVoMock).getSize();
Mockito.doReturn(imageFormat).when(volumeVoMock).getFormat();
Mockito.doReturn(UsageTypes.VOLUME).when(usageVoMock).getUsageType(); Mockito.doReturn(UsageTypes.VOLUME).when(usageVoMock).getUsageType();
Value result = new Value(); Value result = new Value();
presetVariableHelperSpy.loadPresetVariableValueForVolume(usageVoMock, result); presetVariableHelperSpy.loadPresetVariableValueForVolume(usageVoMock, result);
Long expectedSize = ByteScaleUtils.bytesToMebibytes(expected.getSize()); Long expectedSize = ByteScaleUtils.bytesToMebibytes(expected.getSize());
assertPresetVariableIdAndName(expected, result); assertPresetVariableIdAndName(expected, result);
Assert.assertEquals(expected.getDiskOffering(), result.getDiskOffering()); Assert.assertEquals(expected.getDiskOffering(), result.getDiskOffering());
Assert.assertEquals(expected.getProvisioningType(), result.getProvisioningType()); Assert.assertEquals(expected.getProvisioningType(), result.getProvisioningType());
Assert.assertEquals(null, result.getStorage()); Assert.assertNull(result.getStorage());
Assert.assertEquals(expected.getTags(), result.getTags()); Assert.assertEquals(expected.getTags(), result.getTags());
Assert.assertEquals(expectedSize, result.getSize()); Assert.assertEquals(expectedSize, result.getSize());
Assert.assertEquals(imageFormat.name(), result.getVolumeFormat());
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "tags", "size"), result); validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "diskOffering", "provisioningType", "tags", "size", "volumeFormat"), result);
}
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.Volume)); Mockito.verify(presetVariableHelperSpy, Mockito.times(ImageFormat.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
Mockito.eq(ResourceObjectType.Volume));
} }
@Test @Test
@ -852,37 +868,42 @@ public class PresetVariableHelperTest {
@Test @Test
public void loadPresetVariableValueForSnapshotTestRecordIsSnapshotSetFields() { public void loadPresetVariableValueForSnapshotTestRecordIsSnapshotSetFields() {
Value expected = getValueForTests(); for (Hypervisor.HypervisorType hypervisorType : Hypervisor.HypervisorType.values()) {
Value expected = getValueForTests();
SnapshotVO snapshotVoMock = Mockito.mock(SnapshotVO.class); SnapshotVO snapshotVoMock = Mockito.mock(SnapshotVO.class);
Mockito.doReturn(snapshotVoMock).when(snapshotDaoMock).findByIdIncludingRemoved(Mockito.anyLong()); Mockito.doReturn(snapshotVoMock).when(snapshotDaoMock).findByIdIncludingRemoved(Mockito.anyLong());
mockMethodValidateIfObjectIsNull(); mockMethodValidateIfObjectIsNull();
Mockito.doReturn(expected.getId()).when(snapshotVoMock).getUuid(); Mockito.doReturn(expected.getId()).when(snapshotVoMock).getUuid();
Mockito.doReturn(expected.getName()).when(snapshotVoMock).getName(); Mockito.doReturn(expected.getName()).when(snapshotVoMock).getName();
Mockito.doReturn(expected.getSize()).when(snapshotVoMock).getSize(); Mockito.doReturn(expected.getSize()).when(snapshotVoMock).getSize();
Mockito.doReturn((short) 3).when(snapshotVoMock).getSnapshotType(); Mockito.doReturn((short) 3).when(snapshotVoMock).getSnapshotType();
Mockito.doReturn(1l).when(presetVariableHelperSpy).getSnapshotDataStoreId(Mockito.anyLong(), Mockito.anyLong()); Mockito.doReturn(1l).when(presetVariableHelperSpy).getSnapshotDataStoreId(Mockito.anyLong(), Mockito.anyLong());
Mockito.doReturn(expected.getStorage()).when(presetVariableHelperSpy).getPresetVariableValueStorage(Mockito.anyLong(), Mockito.anyInt()); Mockito.doReturn(expected.getStorage()).when(presetVariableHelperSpy).getPresetVariableValueStorage(Mockito.anyLong(), Mockito.anyInt());
Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class)); Mockito.doReturn(expected.getTags()).when(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.any(ResourceObjectType.class));
Mockito.doReturn(hypervisorType).when(snapshotVoMock).getHypervisorType();
Mockito.doReturn(UsageTypes.SNAPSHOT).when(usageVoMock).getUsageType(); Mockito.doReturn(UsageTypes.SNAPSHOT).when(usageVoMock).getUsageType();
Value result = new Value(); Value result = new Value();
presetVariableHelperSpy.loadPresetVariableValueForSnapshot(usageVoMock, result); presetVariableHelperSpy.loadPresetVariableValueForSnapshot(usageVoMock, result);
Long expectedSize = ByteScaleUtils.bytesToMebibytes(expected.getSize()); Long expectedSize = ByteScaleUtils.bytesToMebibytes(expected.getSize());
assertPresetVariableIdAndName(expected, result); assertPresetVariableIdAndName(expected, result);
Assert.assertEquals(expected.getSnapshotType(), result.getSnapshotType()); Assert.assertEquals(expected.getSnapshotType(), result.getSnapshotType());
Assert.assertEquals(expected.getStorage(), result.getStorage()); Assert.assertEquals(expected.getStorage(), result.getStorage());
Assert.assertEquals(expected.getTags(), result.getTags()); Assert.assertEquals(expected.getTags(), result.getTags());
Assert.assertEquals(expectedSize, result.getSize()); Assert.assertEquals(expectedSize, result.getSize());
Assert.assertEquals(hypervisorType.name(), result.getHypervisorType());
validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "snapshotType", "storage", "tags", "size"), result); validateFieldNamesToIncludeInToString(Arrays.asList("id", "name", "snapshotType", "storage", "tags", "size", "hypervisorType"), result);
}
Mockito.verify(presetVariableHelperSpy).getPresetVariableValueResourceTags(Mockito.anyLong(), Mockito.eq(ResourceObjectType.Snapshot)); Mockito.verify(presetVariableHelperSpy, Mockito.times(Hypervisor.HypervisorType.values().length)).getPresetVariableValueResourceTags(Mockito.anyLong(),
Mockito.eq(ResourceObjectType.Snapshot));
} }

View File

@ -136,4 +136,18 @@ public class ValueTest {
variable.setBackupOffering(null); variable.setBackupOffering(null);
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("backupOffering")); Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("backupOffering"));
} }
@Test
public void setHypervisorTypeTestAddFieldHypervisorTypeToCollection() {
Value variable = new Value();
variable.setHypervisorType(null);
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("hypervisorType"));
}
@Test
public void setVolumeFormatTestAddFieldVolumeFormatToCollection() {
Value variable = new Value();
variable.setVolumeFormat(null);
Assert.assertTrue(variable.fieldNamesToIncludeInToString.contains("volumeFormat"));
}
} }

View File

@ -78,7 +78,7 @@ public class JsInterpreter implements Closeable {
} }
/** /**
* Adds the parameters to a Map that will be converted to JS variables right before executing the scripts.. * Adds the parameters to a Map that will be converted to JS variables right before executing the script.
* @param key The name of the variable. * @param key The name of the variable.
* @param value The value of the variable. * @param value The value of the variable.
*/ */
@ -87,6 +87,21 @@ public class JsInterpreter implements Closeable {
variables.put(key, value); variables.put(key, value);
} }
/**
* Adds the parameter, surrounded by double quotes, to a Map that will be converted to a JS variable right before executing the script.
* @param key The name of the variable.
* @param value The value of the variable.
*/
public void injectStringVariable(String key, String value) {
if (value == null) {
logger.trace(String.format("Not injecting [%s] because its value is null.", key));
return;
}
value = String.format("\"%s\"", value);
logger.trace(String.format(injectingLogMessage, key, value));
variables.put(key, value);
}
/** /**
* Injects the variables to the script and execute it. * Injects the variables to the script and execute it.
* @param script Code to be executed. * @param script Code to be executed.

View File

@ -179,4 +179,22 @@ public class JsInterpreterTest {
Assert.assertEquals(scriptEngineMock, jsInterpreterSpy.interpreter); Assert.assertEquals(scriptEngineMock, jsInterpreterSpy.interpreter);
Mockito.verify(nashornScriptEngineFactoryMock).getScriptEngine("--no-java"); Mockito.verify(nashornScriptEngineFactoryMock).getScriptEngine("--no-java");
} }
@Test
public void injectStringVariableTestNullValueDoNothing() {
jsInterpreterSpy.variables = new LinkedHashMap<>();
jsInterpreterSpy.injectStringVariable("a", null);
Assert.assertTrue(jsInterpreterSpy.variables.isEmpty());
}
@Test
public void injectStringVariableTestNotNullValueSurroundWithDoubleQuotes() {
jsInterpreterSpy.variables = new LinkedHashMap<>();
jsInterpreterSpy.injectStringVariable("a", "b");
Assert.assertEquals(jsInterpreterSpy.variables.get("a"), "\"b\"");
}
} }