Yevgeny Zaspitsky has uploaded a new change for review. Change subject: engine: allow updating/deleting a network with unplugged vnics only ......................................................................
engine: allow updating/deleting a network with unplugged vnics only Allow updating/deleting a network from a host only in case when the related vnics are unplugged. The case when plugged vnic is unlinked doesn't allow amending the underlying network. Bug-Url: https://bugzilla.redhat.com/1115101 Change-Id: Ib57fd905811bbbb60ef06bae15d0c42518132596 Signed-off-by: Yevgeny Zaspitsky <[email protected]> (cherry picked from commit eebc2a7a83d2e1861d1c95be86f00b586e7c2899) --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicate.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicateTest.java 4 files changed, 60 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/30098/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicate.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicate.java new file mode 100644 index 0000000..b9c5ce6 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicate.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.core.bll.common.predicates; + +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; +import org.ovirt.engine.core.utils.linq.Predicate; + +public final class VmNetworkCanBeUpdatedPredicate implements Predicate<VmNetworkInterface> { + + private static final Predicate<VmNetworkInterface> instance = new VmNetworkCanBeUpdatedPredicate(); + + public static Predicate<VmNetworkInterface> getInstance() { + return instance; + } + + @Override + public boolean eval(VmNetworkInterface vNic) { + return vNic.isPlugged(); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java index 35f79a5..434453a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java @@ -9,6 +9,7 @@ import javax.transaction.Transaction; import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.common.predicates.VmNetworkCanBeUpdatedPredicate; import org.ovirt.engine.core.bll.context.CompensationContext; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; @@ -158,7 +159,7 @@ for (VM vm : runningVms) { List<VmNetworkInterface> vmInterfaces = getVmNetworkInterfaceDao().getAllForVm(vm.getId()); for (VmNetworkInterface vmNic : vmInterfaces) { - if (vmNic.isPlugged() && + if (VmNetworkCanBeUpdatedPredicate.getInstance().eval(vmNic) && vmNic.getNetworkName() != null && networks.contains(vmNic.getNetworkName())) { vmNames.add(vm.getName()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java index 0eb3863..3f2c9bb 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java @@ -15,6 +15,7 @@ import org.ovirt.engine.core.bll.NonTransactiveCommandAttribute; import org.ovirt.engine.core.bll.RenamedEntityInfoProvider; import org.ovirt.engine.core.bll.ValidationResult; +import org.ovirt.engine.core.bll.common.predicates.VmNetworkCanBeUpdatedPredicate; import org.ovirt.engine.core.bll.context.CommandContext; import org.ovirt.engine.core.bll.network.AddNetworkParametersBuilder; import org.ovirt.engine.core.bll.network.NetworkParametersBuilder; @@ -259,7 +260,7 @@ for (VM vm : getVms()) { if (vm.isRunningOrPaused()) { for (VmNetworkInterface nic : vnicsByVmId.get(vm.getId())) { - if (nic.isPlugged() && nic.isLinked()) { + if (VmNetworkCanBeUpdatedPredicate.getInstance().eval(nic)) { runningVms.add(vm); break; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicateTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicateTest.java new file mode 100644 index 0000000..10e58c2 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/common/predicates/VmNetworkCanBeUpdatedPredicateTest.java @@ -0,0 +1,38 @@ +package org.ovirt.engine.core.bll.common.predicates; + +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; + +@RunWith(MockitoJUnitRunner.class) +public class VmNetworkCanBeUpdatedPredicateTest { + + @Mock + private VmNetworkInterface mockVmNetworkInterface; + + @Test + public void testEvalPositive() throws Exception { + + Mockito.when(mockVmNetworkInterface.isPlugged()).thenReturn(true); + + Assert.assertTrue(VmNetworkCanBeUpdatedPredicate.getInstance().eval(mockVmNetworkInterface)); + + Mockito.verify(mockVmNetworkInterface).isPlugged(); + Mockito.verify(mockVmNetworkInterface, Mockito.never()).isLinked(); + } + + @Test + public void testEvalNegative() throws Exception { + + Mockito.when(mockVmNetworkInterface.isPlugged()).thenReturn(false); + + Assert.assertFalse(VmNetworkCanBeUpdatedPredicate.getInstance().eval(mockVmNetworkInterface)); + + Mockito.verify(mockVmNetworkInterface).isPlugged(); + Mockito.verify(mockVmNetworkInterface, Mockito.never()).isLinked(); + } +} -- To view, visit http://gerrit.ovirt.org/30098 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib57fd905811bbbb60ef06bae15d0c42518132596 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Yevgeny Zaspitsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
