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

Reply via email to