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. Change-Id: Ib57fd905811bbbb60ef06bae15d0c42518132596 Signed-off-by: Yevgeny Zaspitsky <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VnicNetworkCanBeUpdatedPredicate.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/VnicNetworkCanBeUpdatedPredicateTest.java 4 files changed, 60 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/20/30020/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VnicNetworkCanBeUpdatedPredicate.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VnicNetworkCanBeUpdatedPredicate.java new file mode 100644 index 0000000..7333552 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/common/predicates/VnicNetworkCanBeUpdatedPredicate.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 VnicNetworkCanBeUpdatedPredicate implements Predicate<VmNetworkInterface> { + + private static final Predicate<VmNetworkInterface> instance = new VnicNetworkCanBeUpdatedPredicate(); + + 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..443b99f 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.VnicNetworkCanBeUpdatedPredicate; 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 (VnicNetworkCanBeUpdatedPredicate.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..888453c 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.VnicNetworkCanBeUpdatedPredicate; 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 (VnicNetworkCanBeUpdatedPredicate.getInstance().eval(nic)) { runningVms.add(vm); break; } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/common/predicates/VnicNetworkCanBeUpdatedPredicateTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/common/predicates/VnicNetworkCanBeUpdatedPredicateTest.java new file mode 100644 index 0000000..7f502f8 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/common/predicates/VnicNetworkCanBeUpdatedPredicateTest.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 VnicNetworkCanBeUpdatedPredicateTest { + + @Mock + private VmNetworkInterface mockVmNetworkInterface; + + @Test + public void testEvalPositive() throws Exception { + + Mockito.when(mockVmNetworkInterface.isPlugged()).thenReturn(true); + + Assert.assertTrue(VnicNetworkCanBeUpdatedPredicate.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(VnicNetworkCanBeUpdatedPredicate.getInstance().eval(mockVmNetworkInterface)); + + Mockito.verify(mockVmNetworkInterface).isPlugged(); + Mockito.verify(mockVmNetworkInterface, Mockito.never()).isLinked(); + } +} -- To view, visit http://gerrit.ovirt.org/30020 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib57fd905811bbbb60ef06bae15d0c42518132596 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yevgeny Zaspitsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
