Gilad Chaplik has uploaded a new change for review. Change subject: core: RunVmCommand.canDoAction cleanup (3) ......................................................................
core: RunVmCommand.canDoAction cleanup (3) refactor and test run vm BootSequence Change-Id: Ida913a72e04c4edc57f9b6e2baf93e31e3df82f2 Signed-off-by: Gilad Chaplik <gchap...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/RunVmValidatorTest.java 7 files changed, 246 insertions(+), 129 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/13399/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java index 715732e..e9fa607 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/IsoDomainListSyncronizer.java @@ -73,7 +73,7 @@ /** * private constructor to initialize the quartz scheduler */ - private IsoDomainListSyncronizer() { + protected IsoDomainListSyncronizer() { init(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java index 06c9cb7..3ed10b9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RunVmCommand.java @@ -679,8 +679,12 @@ } else { List<String> messages = getReturnValue().getCanDoActionMessages(); + List<Disk> vmDisks = getDiskDao().getAllForVm(vm.getId(), true); boolean canDoAction = getRunVmValidator().validateVmProperties(vm, messages) && + validate(getRunVmValidator().validateBootSequence(vm, + getParameters().getBootSequence(), + vmDisks)) && canRunVm(vm) && validateNetworkInterfaces(); if (!canDoAction) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java index fe0b1dd..feabbec 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmPoolCommandBase.java @@ -28,6 +28,7 @@ import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogField; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogFields; +import org.ovirt.engine.core.dao.DiskDao; import org.ovirt.engine.core.dao.VmPoolDAO; @CustomLogFields({ @CustomLogField("VmPoolName") }) @@ -266,7 +267,11 @@ true, new VdsFreeMemoryChecker(new NonWaitingDelayer())); - return getRunVmValidator().canRunVm(vm, messages) && + return getRunVmValidator().canRunVm(vm, + messages, + getDiskDao().getAllForVm(vm.getId(), true), + runVmParams.getBootSequence()) + && VmRunHandler.getInstance().canRunVm(vm, messages, runVmParams, @@ -274,6 +279,10 @@ new SnapshotsValidator()); } + private static DiskDao getDiskDao() { + return DbFacade.getInstance().getDiskDao(); + } + private static RunVmValidator getRunVmValidator() { return new RunVmValidator(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java index 8dc2686..9ccb6e8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/VmRunHandler.java @@ -16,7 +16,6 @@ import org.ovirt.engine.core.common.VdcActionUtils; import org.ovirt.engine.core.common.action.RunVmParams; import org.ovirt.engine.core.common.action.VdcActionType; -import org.ovirt.engine.core.common.businessentities.BootSequence; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.ImageType; @@ -66,127 +65,92 @@ VdsSelector vdsSelector, SnapshotsValidator snapshotsValidator) { boolean retValue = true; - BootSequence boot_sequence = (runParams.getBootSequence() != null) ? - runParams.getBootSequence() : vm.getDefaultBootSequence(); - Guid storagePoolId = vm.getStoragePoolId(); - // Block from running a VM with no HDD when its first boot device is - // HD and no other boot devices are configured List<Disk> vmDisks = getDiskDao().getAllForVm(vm.getId(), true); - if (boot_sequence == BootSequence.C && vmDisks.size() == 0) { - String messageStr = !vmDisks.isEmpty() ? - VdcBllMessages.VM_CANNOT_RUN_FROM_DISK_WITHOUT_PLUGGED_DISK.toString() : - VdcBllMessages.VM_CANNOT_RUN_FROM_DISK_WITHOUT_DISK.toString(); - - message.add(messageStr); - retValue = false; - } else { - // If CD appears as first and there is no ISO in storage - // pool/ISO inactive - - // you cannot run this VM - - if (boot_sequence == BootSequence.CD - && getIsoDomainListSyncronizer().findActiveISODomain(storagePoolId) == null) { - message.add(VdcBllMessages.VM_CANNOT_RUN_FROM_CD_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO.toString()); + if (retValue) { + ValidationResult vmNotLockedResult = new VmValidator(vm).vmNotLocked(); + if (!vmNotLockedResult.isValid()) { + message.add(vmNotLockedResult.getMessage().name()); retValue = false; - } else { - // if there is network in the boot sequence, check that the - // vm has network, - // otherwise the vm cannot be run in vdsm - if (boot_sequence == BootSequence.N - && DbFacade.getInstance().getVmNetworkInterfaceDao().getAllForVm(vm.getId()).size() == 0) { - message.add(VdcBllMessages.VM_CANNOT_RUN_FROM_NETWORK_WITHOUT_NETWORK.toString()); + } + } + + if (retValue) { + ValidationResult vmDuringSnapshotResult = + snapshotsValidator.vmNotDuringSnapshot(vm.getId()); + if (!vmDuringSnapshotResult.isValid()) { + message.add(vmDuringSnapshotResult.getMessage().name()); + retValue = false; + } + } + List<DiskImage> vmImages = ImagesHandler.filterImageDisks(vmDisks, true, false); + if (retValue && !vmImages.isEmpty()) { + storage_pool sp = getStoragePoolDAO().get(vm.getStoragePoolId()); + ValidationResult spUpResult = new StoragePoolValidator(sp).isUp(); + if (!spUpResult.isValid()) { + message.add(spUpResult.getMessage().name()); + retValue = false; + } + + if (retValue) { + retValue = performImageChecksForRunningVm(vm, message, runParams, vmImages); + } + + // Check if iso and floppy path exists + if (retValue && !vm.isAutoStartup() + && !validateIsoPath(getIsoDomainListSyncronizer() + .findActiveISODomain(vm.getStoragePoolId()), + runParams, + message)) { + retValue = false; + } else if (retValue) { + boolean isVmDuringInit = ((Boolean) getBackend() + .getResourceManager() + .RunVdsCommand(VDSCommandType.IsVmDuringInitiating, + new IsVmDuringInitiatingVDSCommandParameters(vm.getId())) + .getReturnValue()).booleanValue(); + if (vm.isRunning() || (vm.getStatus() == VMStatus.NotResponding) || isVmDuringInit) { retValue = false; - } - - if (retValue) { - ValidationResult vmNotLockedResult = new VmValidator(vm).vmNotLocked(); - if (!vmNotLockedResult.isValid()) { - message.add(vmNotLockedResult.getMessage().name()); + message.add(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_RUNNING.toString()); + } else if (vm.getStatus() == VMStatus.Paused && vm.getRunOnVds() != null) { + VDS vds = DbFacade.getInstance().getVdsDao().get( + new Guid(vm.getRunOnVds().toString())); + if (vds.getStatus() != VDSStatus.Up) { retValue = false; + message.add(VdcBllMessages.VAR__HOST_STATUS__UP.toString()); + message.add(VdcBllMessages.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL.toString()); } } - if (retValue) { - ValidationResult vmDuringSnapshotResult = - snapshotsValidator.vmNotDuringSnapshot(vm.getId()); - if (!vmDuringSnapshotResult.isValid()) { - message.add(vmDuringSnapshotResult.getMessage().name()); - retValue = false; - } - } + boolean isStatelessVm = shouldVmRunAsStateless(runParams, vm); - List<DiskImage> vmImages = ImagesHandler.filterImageDisks(vmDisks, true, false); - if (retValue && !vmImages.isEmpty()) { - storage_pool sp = getStoragePoolDAO().get(vm.getStoragePoolId()); - ValidationResult spUpResult = new StoragePoolValidator(sp).isUp(); - if (!spUpResult.isValid()) { - message.add(spUpResult.getMessage().name()); - retValue = false; - } - - if (retValue) { - retValue = performImageChecksForRunningVm(vm, message, runParams, vmImages); - } - - // Check if iso and floppy path exists - if (retValue && !vm.isAutoStartup() - && !validateIsoPath(getIsoDomainListSyncronizer() - .findActiveISODomain(vm.getStoragePoolId()), - runParams, - message)) { - retValue = false; - } else if (retValue) { - boolean isVmDuringInit = ((Boolean) getBackend() - .getResourceManager() - .RunVdsCommand(VDSCommandType.IsVmDuringInitiating, - new IsVmDuringInitiatingVDSCommandParameters(vm.getId())) - .getReturnValue()).booleanValue(); - if (vm.isRunning() || (vm.getStatus() == VMStatus.NotResponding) || isVmDuringInit) { - retValue = false; - message.add(VdcBllMessages.ACTION_TYPE_FAILED_VM_IS_RUNNING.toString()); - } else if (vm.getStatus() == VMStatus.Paused && vm.getRunOnVds() != null) { - VDS vds = DbFacade.getInstance().getVdsDao().get( - new Guid(vm.getRunOnVds().toString())); - if (vds.getStatus() != VDSStatus.Up) { - retValue = false; - message.add(VdcBllMessages.VAR__HOST_STATUS__UP.toString()); - message.add(VdcBllMessages.ACTION_TYPE_FAILED_VDS_STATUS_ILLEGAL.toString()); - } - } - - boolean isStatelessVm = shouldVmRunAsStateless(runParams, vm); - - if (retValue && isStatelessVm && !snapshotsValidator.vmNotInPreview(vm.getId()).isValid()) { - retValue = false; - message.add(VdcBllMessages.VM_CANNOT_RUN_STATELESS_WHILE_IN_PREVIEW.toString()); - } - - // if the VM itself is stateless or run once as stateless - if (retValue && isStatelessVm && vm.isAutoStartup()) { - retValue = false; - message.add(VdcBllMessages.VM_CANNOT_RUN_STATELESS_HA.toString()); - } - - if (retValue && isStatelessVm && !hasSpaceForSnapshots(vm, message)) { - return false; - } - } - } - - retValue = retValue == false ? retValue : vdsSelector.canFindVdsToRunOn(message, false); - - /** - * only if can do action ok then check with actions matrix that status is valid for this - * action - */ - if (retValue - && !VdcActionUtils.CanExecute(Arrays.asList(vm), VM.class, - VdcActionType.RunVm)) { + if (retValue && isStatelessVm && !snapshotsValidator.vmNotInPreview(vm.getId()).isValid()) { retValue = false; - message.add(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL.toString()); + message.add(VdcBllMessages.VM_CANNOT_RUN_STATELESS_WHILE_IN_PREVIEW.toString()); + } + + // if the VM itself is stateless or run once as stateless + if (retValue && isStatelessVm && vm.isAutoStartup()) { + retValue = false; + message.add(VdcBllMessages.VM_CANNOT_RUN_STATELESS_HA.toString()); + } + + if (retValue && isStatelessVm && !hasSpaceForSnapshots(vm, message)) { + return false; } } } + + retValue = retValue == false ? retValue : vdsSelector.canFindVdsToRunOn(message, false); + + /** + * only if can do action ok then check with actions matrix that status is valid for this action + */ + if (retValue + && !VdcActionUtils.CanExecute(Arrays.asList(vm), VM.class, + VdcActionType.RunVm)) { + retValue = false; + message.add(VdcBllMessages.ACTION_TYPE_FAILED_VM_STATUS_ILLEGAL.toString()); + } return retValue; } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java index 96e707d..95b9900 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/RunVmValidator.java @@ -2,8 +2,16 @@ import java.util.List; +import org.ovirt.engine.core.bll.IsoDomainListSyncronizer; +import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.VmHandler; +import org.ovirt.engine.core.common.businessentities.BootSequence; +import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.VdcBllMessages; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao; import org.ovirt.engine.core.utils.vmproperties.VmPropertiesUtils; public class RunVmValidator { @@ -11,8 +19,8 @@ public boolean validateVmProperties(VM vm, List<String> messages) { List<VmPropertiesUtils.ValidationError> validationErrors = getVmPropertiesUtils().validateVMProperties( - vm.getVdsGroupCompatibilityVersion(), - vm.getStaticData()); + vm.getVdsGroupCompatibilityVersion(), + vm.getStaticData()); if (!validationErrors.isEmpty()) { VmHandler.handleCustomPropertiesError(validationErrors, messages); @@ -22,14 +30,60 @@ return true; } + public ValidationResult validateBootSequence(VM vm, BootSequence bootSequence, List<Disk> vmDisks) { + BootSequence boot_sequence = (bootSequence != null) ? + bootSequence : vm.getDefaultBootSequence(); + Guid storagePoolId = vm.getStoragePoolId(); + // Block from running a VM with no HDD when its first boot device is + // HD and no other boot devices are configured + if (boot_sequence == BootSequence.C && vmDisks.size() == 0) { + return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_DISK_WITHOUT_DISK); + } else { + // If CD appears as first and there is no ISO in storage + // pool/ISO inactive - + // you cannot run this VM + + if (boot_sequence == BootSequence.CD + && getIsoDomainListSyncronizer().findActiveISODomain(storagePoolId) == null) { + return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_CD_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO); + } else { + // if there is network in the boot sequence, check that the + // vm has network, + // otherwise the vm cannot be run in vdsm + if (boot_sequence == BootSequence.N + && getVmNetworkInterfaceDao().getAllForVm(vm.getId()).size() == 0) { + return new ValidationResult(VdcBllMessages.VM_CANNOT_RUN_FROM_NETWORK_WITHOUT_NETWORK); + } + } + } + return ValidationResult.VALID; + + } + + protected VmNetworkInterfaceDao getVmNetworkInterfaceDao() { + return DbFacade.getInstance().getVmNetworkInterfaceDao(); + } + + protected IsoDomainListSyncronizer getIsoDomainListSyncronizer() { + return IsoDomainListSyncronizer.getInstance(); + } + public VmPropertiesUtils getVmPropertiesUtils() { return VmPropertiesUtils.getInstance(); } // Compatibility method for static VmPoolCommandBase.canRunPoolVm // who uses the same validation as runVmCommand - public boolean canRunVm(VM vm, List<String> messages) { - return validateVmProperties(vm, messages); + public boolean canRunVm(VM vm, List<String> messages, List<Disk> vmDisks, BootSequence bootSequence) { + if (!validateVmProperties(vm, messages)) { + return false; + } + ValidationResult result = validateBootSequence(vm, bootSequence, vmDisks); + if (!result.isValid()) { + messages.add(result.getMessage().toString()); + return false; + } + return true; } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java index 4991e62..8490bf8 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/RunVmCommandTest.java @@ -18,7 +18,6 @@ import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.List; import org.junit.Before; @@ -35,6 +34,7 @@ import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator; import org.ovirt.engine.core.bll.validator.RunVmValidator; import org.ovirt.engine.core.common.action.RunVmParams; +import org.ovirt.engine.core.common.businessentities.BootSequence; import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.IVdsAsyncCommand; @@ -360,18 +360,6 @@ } @Test - public void canRunVmFailNodisk() { - initDAOMocks(Collections.<Disk> emptyList()); - - final VM vm = new VM(); - doReturn(new VdsSelector(vm, new Guid(), true, new VdsFreeMemoryChecker(command))).when(command) - .getVdsSelector(); - - assertFalse(command.canRunVm(vm)); - assertTrue(command.getReturnValue().getCanDoActionMessages().contains("VM_CANNOT_RUN_FROM_DISK_WITHOUT_DISK")); - } - - @Test public void canRunVmFailVmRunning() { final ArrayList<Disk> disks = new ArrayList<Disk>(); final DiskImage diskImage = createImage(); @@ -493,6 +481,7 @@ private RunVmValidator mockSuccessfulRunVmValidator() { RunVmValidator runVmValidator = mock(RunVmValidator.class); when(runVmValidator.validateVmProperties(any(VM.class), Matchers.anyListOf(String.class))).thenReturn(true); + when(runVmValidator.validateBootSequence(any(VM.class), any(BootSequence.class), Matchers.anyListOf(Disk.class))).thenReturn(ValidationResult.VALID); doReturn(runVmValidator).when(command).getRunVmValidator(); return runVmValidator; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/RunVmValidatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/RunVmValidatorTest.java index 4360983..aebc9b9 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/RunVmValidatorTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/RunVmValidatorTest.java @@ -1,5 +1,6 @@ package org.ovirt.engine.core.bll.validator; +import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -11,8 +12,18 @@ import org.junit.Before; import org.junit.Test; +import org.ovirt.engine.core.bll.IsoDomainListSyncronizer; +import org.ovirt.engine.core.bll.ValidationResult; +import org.ovirt.engine.core.common.businessentities.BootSequence; +import org.ovirt.engine.core.common.businessentities.Disk; +import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.core.dal.VdcBllMessages; +import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDao; +import org.ovirt.engine.core.dao.network.VmNetworkInterfaceDaoDbFacadeImpl; import org.ovirt.engine.core.utils.exceptions.InitializationException; import org.ovirt.engine.core.utils.vmproperties.VmPropertiesUtils; @@ -22,6 +33,31 @@ @Override public VmPropertiesUtils getVmPropertiesUtils() { return mockVmPropertiesUtils(); + }; + + @Override + protected IsoDomainListSyncronizer getIsoDomainListSyncronizer() { + return new IsoDomainListSyncronizer() { + @Override + protected void init() { + // no impl + }; + + @Override + public Guid findActiveISODomain(Guid storagePoolId) { + return null; + }; + }; + }; + + @Override + protected VmNetworkInterfaceDao getVmNetworkInterfaceDao() { + return new VmNetworkInterfaceDaoDbFacadeImpl() { + @Override + public java.util.List<VmNetworkInterface> getAllForVm(Guid id) { + return new ArrayList<VmNetworkInterface>(); + }; + }; }; }; @@ -69,6 +105,62 @@ assertTrue(messages.isEmpty()); } + @Test + public void testVmFailNoDisks() { + VM vm = new VM(); + validateResult(runVmValidator.validateBootSequence(vm, null, new ArrayList<Disk>()), + false, + VdcBllMessages.VM_CANNOT_RUN_FROM_DISK_WITHOUT_DISK); + } + + @Test + public void testVmWithDisks() { + VM vm = new VM(); + List<Disk> disks = new ArrayList<Disk>(); + disks.add(new DiskImage()); + validateResult(runVmValidator.validateBootSequence(vm, null, disks), + true, + null); + } + + @Test + public void testNoIsoDomain() { + VM vm = new VM(); + validateResult(runVmValidator.validateBootSequence(vm, BootSequence.CD, new ArrayList<Disk>()), + false, + VdcBllMessages.VM_CANNOT_RUN_FROM_CD_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO); + } + + @Test + public void testNoDiskBootFromIsoDomain() { + VM vm = new VM(); + RunVmValidator mock = new RunVmValidator() { + @Override + protected IsoDomainListSyncronizer getIsoDomainListSyncronizer() { + return new IsoDomainListSyncronizer() { + @Override + protected void init(){ + // no impl + } + @Override + public Guid findActiveISODomain(Guid storagePoolId) { + return new Guid(); + }; + }; + }; + }; + validateResult(mock.validateBootSequence(vm, BootSequence.CD, new ArrayList<Disk>()), + true, + null); + } + + @Test + public void testBootFromNetworkNoNetwork() { + validateResult(runVmValidator.validateBootSequence(new VM(), BootSequence.N, new ArrayList<Disk>()), + false, + VdcBllMessages.VM_CANNOT_RUN_FROM_NETWORK_WITHOUT_NETWORK); + } + private VmPropertiesUtils mockVmPropertiesUtils() { VmPropertiesUtils utils = new VmPropertiesUtils() { @Override @@ -95,4 +187,9 @@ return utils; } + private static void validateResult(ValidationResult validationResult, boolean isValid, VdcBllMessages message) { + assertEquals(isValid, validationResult.isValid()); + assertEquals(message, validationResult.getMessage()); + } + } -- To view, visit http://gerrit.ovirt.org/13399 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ida913a72e04c4edc57f9b6e2baf93e31e3df82f2 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches