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

Reply via email to