Tal Nisan has uploaded a new change for review.

Change subject: core: Check attached VMs snapshot status when moving a disk
......................................................................

core: Check attached VMs snapshot status when moving a disk

Change-Id: I80feffc9f11aed1bc8fa7a6f80562d05ce815c56
Bug-Url: https://bugzilla.redhat.com/1211330
Signed-off-by: Tal Nisan <tni...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
2 files changed, 60 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/40443/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
index 904f254..d25f070 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommand.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
 import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
+import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.validator.DiskValidator;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
@@ -95,6 +96,7 @@
                 && validateDestStorage()
                 && checkTemplateInDestStorageDomain()
                 && validateSpaceRequirements()
+                && validateVmSnapshotStatus()
                 && checkCanBeMoveInVm()
                 && checkIfNeedToBeOverride()
                 && setAndValidateDiskProfiles();
@@ -170,6 +172,25 @@
         return false;
     }
 
+    private boolean validateVmSnapshotStatus() {
+        SnapshotsValidator snapshotsValidator = getSnapshotsValidator();
+        for (Pair<VM, VmDevice> pair : getVmsWithVmDeviceInfoForDiskId()) {
+            VmDevice vmDevice = pair.getSecond();
+            if (vmDevice.getSnapshotId() == null) { // Skip check for VMs with 
connected snapshot
+                VM vm = pair.getFirst();
+                if (!validate(snapshotsValidator.vmNotInPreview(vm.getId()))
+                        || 
!validate(snapshotsValidator.vmNotDuringSnapshot(vm.getId()))) {
+                    return false;
+                }
+            }
+        }
+        return true;
+    }
+
+    protected SnapshotsValidator getSnapshotsValidator() {
+        return new SnapshotsValidator();
+    }
+
     protected List<DiskImage> getAllImageSnapshots() {
         return ImagesHandler.getAllImageSnapshots(getImage().getImageId());
     }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
index affdafc..882bf32 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/MoveOrCopyDiskCommandTest.java
@@ -19,6 +19,7 @@
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.ovirt.engine.core.bll.validator.DiskValidator;
+import org.ovirt.engine.core.bll.snapshots.SnapshotsValidator;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters;
 import org.ovirt.engine.core.common.businessentities.Disk;
@@ -50,6 +51,7 @@
     private Guid destStorageId = Guid.newGuid();
     private final Guid srcStorageId = Guid.newGuid();
     private final static int FREE_SPACE_CRITICAL_LOW_IN_GB = 0;
+    private final VmDevice vmDevice = new VmDevice();
 
     @ClassRule
     public static MockConfigRule mcr = new MockConfigRule(
@@ -63,6 +65,8 @@
     private VmDAO vmDao;
     @Mock
     private VmDeviceDAO vmDeviceDao;
+    @Mock
+    private SnapshotsValidator snapshotsValidator;
 
     /**
      * The command under test.
@@ -130,8 +134,11 @@
     @Test
     public void canDoActionVmIsNotDown() throws Exception {
         initializeCommand(ImageOperation.Move);
+        initSnapshotValidator();
         initVmDiskImage();
         initVmForFail();
+//        initVmDiskImage(false);
+//        mockGetVmsListForDisk();
         initSrcStorageDomain();
         initDestStorageDomain();
         doReturn(vmDeviceDao).when(command).getVmDeviceDAO();
@@ -191,6 +198,7 @@
     @Test
     public void canDoActionEnoughSpace() throws Exception {
         initializeCommand(ImageOperation.Move);
+        initSnapshotValidator();
         initVmForSpace();
         initVmDiskImage();
         initSrcStorageDomain();
@@ -200,13 +208,36 @@
         CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command);
     }
 
+    @Test
+    public void successVmInPreviewForAttachedSnapshot() {
+        initializeCommand(ImageOperation.Move);
+        initSnapshotValidator();
+        initVmForSpace();
+        initVmDiskImage();
+        initSrcStorageDomain();
+        initDestStorageDomain();
+        vmDevice.setSnapshotId(Guid.newGuid());
+        CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command);
+    }
+
+    @Test
+    public void canDoActionVmInPreview() {
+        initializeCommand(ImageOperation.Move);
+        initSnapshotValidator();
+        initVmForSpace();
+        initVmDiskImage();
+        initSrcStorageDomain();
+        initDestStorageDomain();
+        
when(snapshotsValidator.vmNotInPreview(any(Guid.class))).thenReturn(new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW));
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command, 
VdcBllMessages.ACTION_TYPE_FAILED_VM_IN_PREVIEW);
+    }
+
     protected void initVmForSpace() {
         VM vm = new VM();
         vm.setStatus(VMStatus.Down);
         doReturn(vmDao).when(command).getVmDAO();
         when(vmDao.get(any(Guid.class))).thenReturn(vm);
-        VmDevice device = new VmDevice();
-        List<Pair<VM, VmDevice>> vmList = Collections.singletonList(new 
Pair<>(vm, device));
+        List<Pair<VM, VmDevice>> vmList = Collections.singletonList(new 
Pair<>(vm, vmDevice));
         when(vmDao.getVmsWithPlugInfo(any(Guid.class))).thenReturn(vmList);
     }
 
@@ -280,6 +311,12 @@
         doReturn(true).when(command).setAndValidateDiskProfiles();
     }
 
+    private void initSnapshotValidator() {
+        
when(snapshotsValidator.vmNotInPreview(any(Guid.class))).thenReturn(ValidationResult.VALID);
+        
when(snapshotsValidator.vmNotDuringSnapshot(any(Guid.class))).thenReturn(ValidationResult.VALID);
+        when(command.getSnapshotsValidator()).thenReturn(snapshotsValidator);
+    }
+
     private void initTemplateDiskImage() {
         DiskImage diskImage = new DiskImage();
         diskImage.setVmEntityType(VmEntityType.TEMPLATE);


-- 
To view, visit https://gerrit.ovirt.org/40443
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I80feffc9f11aed1bc8fa7a6f80562d05ce815c56
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Tal Nisan <tni...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to