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