Moti Asayag has uploaded a new change for review.

Change subject: engine: Prevent modifying port mirroring if used by vms
......................................................................

engine: Prevent modifying port mirroring if used by vms

The patch prevents updating the port mirroring of a vnic
profile if it used by VMs, since there will be no idicator
what is the actual running configuration on the VMs.

Change-Id: Ibe7b2c4e4ab133f6d6928d1d18a458103e017baa
Signed-off-by: Moti Asayag <masa...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
3 files changed, 41 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/11/17111/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
index 061e44f..3b473df 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/vm/UpdateVnicProfileCommand.java
@@ -21,7 +21,8 @@
                 && validate(validator.vnicProfileExists())
                 && validate(validator.networkExists())
                 && validate(validator.vnicProfileNameNotUsed())
-                && validate(validator.networkNotChanged());
+                && validate(validator.networkNotChanged())
+                && validate(validator.portMirroringNotChangedIfUsedByVms());
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
index f20c31c..ba387d8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/VnicProfileValidator.java
@@ -89,6 +89,14 @@
         return new ValidationResult(VdcBllMessages.VNIC_PROFILE_IN_USE, 
replacements);
     }
 
+    public ValidationResult portMirroringNotChangedIfUsedByVms() {
+        if (vnicProfile.isPortMirroring() == 
getOldVnicProfile().isPortMirroring()) {
+            return ValidationResult.VALID;
+        }
+
+        return vnicProfileNotUsedByVms();
+    }
+
     protected Network getNetwork() {
         if (network == null) {
             network = 
getDbFacade().getNetworkDao().get(vnicProfile.getNetworkId());
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
index 3901206..ee46842 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/VnicProfileValidatorTest.java
@@ -173,6 +173,25 @@
         assertThat(validator.networkNotChanged(), 
failsWith(VdcBllMessages.CANNOT_CHANGE_VNIC_PROFILE_NETWORK));
     }
 
+    @Test
+    public void portMirroringNotChanged() {
+        assertThat(validator.portMirroringNotChangedIfUsedByVms(), isValid());
+    }
+
+    @Test
+    public void portMirroringEnableSupported() {
+        mockVnicProfilePortMirroringChange(false);
+        mockVmsUsingVnicProfile(Collections.<VM> emptyList());
+        assertThat(validator.portMirroringNotChangedIfUsedByVms(), isValid());
+    }
+
+    @Test
+    public void portMirroringChangeNotSupported() {
+        mockVnicProfilePortMirroringChange(false);
+        mockVmsUsingVnicProfile(Collections.<VM> 
singletonList(mock(VM.class)));
+        assertThat(validator.portMirroringNotChangedIfUsedByVms(), 
failsWithVnicProfileInUse());
+    }
+
     private void mockVnicProfileNetworkChange(Guid vnicProfileId, Guid 
oldVnicProfileId) {
         VnicProfile vnicProfile = mock(VnicProfile.class);
         when(this.vnicProfile.getNetworkId()).thenReturn(vnicProfileId);
@@ -181,10 +200,21 @@
     }
 
     private void vnicProfileNotUsedByVmsTest(Matcher<ValidationResult> 
matcher, List<VM> vms) {
-        when(vmDao.getAllForVnicProfile(any(Guid.class))).thenReturn(vms);
+        mockVmsUsingVnicProfile(vms);
         assertThat(validator.vnicProfileNotUsedByVms(), matcher);
     }
 
+    private void mockVmsUsingVnicProfile(List<VM> vms) {
+        when(vmDao.getAllForVnicProfile(any(Guid.class))).thenReturn(vms);
+    }
+
+    private void mockVnicProfilePortMirroringChange(boolean portMirroring) {
+        VnicProfile vnicProfile = mock(VnicProfile.class);
+        when(this.vnicProfile.isPortMirroring()).thenReturn(portMirroring);
+        when(vnicProfile.isPortMirroring()).thenReturn(!portMirroring);
+        when(vnicProfileDao.get(any(Guid.class))).thenReturn(vnicProfile);
+    }
+
     @Test
     public void vnicProfileNotInUseByVms() throws Exception {
         vnicProfileNotUsedByVmsTest(isValid(), Collections.<VM> emptyList());


-- 
To view, visit http://gerrit.ovirt.org/17111
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ibe7b2c4e4ab133f6d6928d1d18a458103e017baa
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Moti Asayag <masa...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to