Yevgeny Zaspitsky has uploaded a new change for review.

Change subject: engine: update AddVdsGroupCommand
......................................................................

engine: update AddVdsGroupCommand

Update AddVdsGroupCommand with the new logic.

Change-Id: I196a583ae7d8d7e373a1aca2a48e592232b18a5b
Signed-off-by: Yevgeny Zaspitsky <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
M 
frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
9 files changed, 301 insertions(+), 56 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/16/33416/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java
index 1923438..d4c2dd8 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java
@@ -3,15 +3,20 @@
 import java.util.Collections;
 import java.util.List;
 
+import javax.inject.Inject;
+
+import 
org.ovirt.engine.core.bll.network.cluster.DefaultManagementNetworkFinder;
+import org.ovirt.engine.core.bll.network.cluster.NetworkClusterValidator;
 import org.ovirt.engine.core.bll.profiles.CpuProfileHelper;
 import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VersionSupport;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.FeatureSupported;
 import org.ovirt.engine.core.common.VdcObjectType;
-import org.ovirt.engine.core.common.action.VdsGroupOperationParameters;
+import org.ovirt.engine.core.common.action.AddVdsGroupOperationParameters;
 import org.ovirt.engine.core.common.businessentities.MigrateOnErrorOptions;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
 import org.ovirt.engine.core.common.businessentities.network.NetworkStatus;
@@ -20,15 +25,17 @@
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.gluster.GlusterFeatureSupported;
 import org.ovirt.engine.core.common.validation.group.CreateEntity;
+import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
-import org.ovirt.engine.core.utils.NetworkUtils;
-import org.ovirt.engine.core.utils.linq.LinqUtils;
-import org.ovirt.engine.core.utils.linq.Predicate;
+import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator;
 
-public class AddVdsGroupCommand<T extends VdsGroupOperationParameters> extends
+public class AddVdsGroupCommand<T extends AddVdsGroupOperationParameters> 
extends
         VdsGroupOperationCommandBase<T> {
     public static final String DefaultNetworkDescription = "Management 
Network";
+
+    @Inject
+    private DefaultManagementNetworkFinder defaultManagementNetworkFinder;
 
     public AddVdsGroupCommand(T parameters) {
         super(parameters);
@@ -40,30 +47,13 @@
 
         checkMaxMemoryOverCommitValue();
         getVdsGroup().setDetectEmulatedMachine(true);
-        DbFacade.getInstance().getVdsGroupDao().save(getVdsGroup());
+        DbFacadeLocator.getDbFacade().getVdsGroupDao().save(getVdsGroup());
 
         alertIfFencingDisabled();
 
         // add default network
         if (getParameters().getVdsGroup().getStoragePoolId() != null) {
-            final String networkName = 
NetworkUtils.getDefaultManagementNetworkName();
-            List<Network> networks = DbFacade
-                    .getInstance()
-                    .getNetworkDao()
-                    .getAllForDataCenter(
-                            getParameters().getVdsGroup().getStoragePoolId());
-
-            Network net = LinqUtils.firstOrNull(networks, new 
Predicate<Network>() {
-                @Override
-                public boolean eval(Network network) {
-                    return network.getName().equals(networkName);
-                }
-            });
-            if (net != null) {
-                DbFacade.getInstance().getNetworkClusterDao().save(
-                        new 
NetworkCluster(getParameters().getVdsGroup().getId(), net.getId(),
-                                NetworkStatus.OPERATIONAL, true, true, true, 
false));
-            }
+            attachManagementNetwork();
         }
 
         // create default CPU profile for supported clusters.
@@ -74,6 +64,31 @@
 
         setActionReturnValue(getVdsGroup().getId());
         setSucceeded(true);
+    }
+
+    private void attachManagementNetwork() {
+        Network net = findManagementNetwork(getVdsGroup(), 
getManagementNetworkId());
+        if (net != null) {
+            
DbFacadeLocator.getDbFacade().getNetworkClusterDao().save(createNetworkCluster(net.getId()));
+        }
+    }
+
+    private Guid getManagementNetworkId() {
+        return getParameters().getManagementNetworkId();
+    }
+
+    private Network findManagementNetwork(VDSGroup cluster, Guid 
managementNetworkId) {
+        if (managementNetworkId == null) {
+            return 
defaultManagementNetworkFinder.findDefaultManagementNetwork(cluster.getStoragePoolId());
+        } else {
+            return getManagementNetworkById(managementNetworkId);
+        }
+    }
+
+    private Network getManagementNetworkById(Guid managementNetworkId) {
+        return DbFacadeLocator.getDbFacade()
+                .getNetworkDao()
+                .get(managementNetworkId);
     }
 
     @Override
@@ -96,8 +111,7 @@
             // cpu check required only if the cluster supports Virt service
             
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_CPU_NOT_FOUND);
             result = false;
-        } else if 
(!VersionSupport.checkVersionSupported(getVdsGroup().getcompatibility_version()
-        )) {
+        } else if 
(!VersionSupport.checkVersionSupported(getVdsGroup().getcompatibility_version()))
 {
             
addCanDoActionMessage(VersionSupport.getUnsupportedVersionMessage());
             result = false;
         } else if (getVdsGroup().getStoragePoolId() != null) {
@@ -134,6 +148,10 @@
                     result = false;
                 }
             }
+        }
+
+        if (result) {
+            result = validateManagementNetwork();
         }
 
         if (getVdsGroup().getcompatibility_version() != null
@@ -184,6 +202,40 @@
         return result;
     }
 
+    private boolean validateManagementNetwork() {
+        final Network managementNetwork;
+
+        if (getManagementNetworkId() == null) {
+            managementNetwork =
+                    
defaultManagementNetworkFinder.findDefaultManagementNetwork(getVdsGroup().getStoragePoolId());
+            if (managementNetwork == null) {
+                
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND);
+                return false;
+            }
+        } else {
+            managementNetwork = 
getManagementNetworkById(getManagementNetworkId());
+            if (managementNetwork == null) {
+                addCanDoActionMessage(VdcBllMessages.NETWORK_NOT_EXISTS);
+                return false;
+            }
+        }
+
+        final NetworkClusterValidator networkClusterValidator = 
createNetworkClusterValidator();
+        return 
validate(networkClusterValidator.networkBelongsToDataCenter(getVdsGroup(), 
managementNetwork))
+               && 
validate(networkClusterValidator.managementNetworkAttachment(managementNetwork))
+               && 
validate(networkClusterValidator.migrationPropertySupported());
+    }
+
+    private NetworkClusterValidator createNetworkClusterValidator() {
+        return new 
NetworkClusterValidator(createNetworkCluster(getManagementNetworkId()),
+                getVdsGroup().getcompatibility_version());
+    }
+
+    private NetworkCluster createNetworkCluster(Guid networkId) {
+        return new NetworkCluster(getVdsGroup().getId(), networkId,
+                NetworkStatus.OPERATIONAL, true, true, true, true);
+    }
+
     @Override
     public List<PermissionSubject> getPermissionCheckSubjects() {
         return Collections.singletonList(new 
PermissionSubject(getVdsGroup().getStoragePoolId(),
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java
index 12523c8..75e8ce6 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java
@@ -107,11 +107,10 @@
     private boolean validateAttachment() {
         NetworkClusterValidator validator =
                 new NetworkClusterValidator(getNetworkCluster(), 
getVdsGroup().getcompatibility_version());
-        return (!NetworkUtils.isManagementNetwork(getNetwork())
-                || 
validate(validator.managementNetworkAttachment(getNetworkName())))
-                && 
validate(validator.migrationPropertySupported(getNetworkName()))
-                && (!getPersistedNetwork().isExternal()
-                || validateExternalNetwork(validator));
+        return (validate(validator.managementNetworkAttachment(getNetwork())))
+               && validate(validator.managementNetworkChange(null))
+               && validate(validator.migrationPropertySupported())
+               && (!getPersistedNetwork().isExternal() || 
validateExternalNetwork(validator));
     }
 
     private boolean validateExternalNetwork(NetworkClusterValidator validator) 
{
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java
index bcafb22..d6100d1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java
@@ -2,9 +2,12 @@
 
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.common.FeatureSupported;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator;
 
 /**
  * Validator class for {@link NetworkCluster} instances.
@@ -20,27 +23,80 @@
     }
 
     /**
-     * Make sure the management network attachment is valid: The network must 
be required.
-     *
-     * @param networkName
-     *            The network's name.
-     * @return Error iff the management network attachment is not valid.
+     * Make sure the given {@link Network} belongs to the same DC as the 
cluster.
+     * 
+     * @param cluster the cluster to be checked against
+     * @param network network to be checked
      */
-    public ValidationResult managementNetworkAttachment(String networkName) {
-        return networkCluster.isRequired() ? ValidationResult.VALID
-                : new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED,
-                        String.format(NETWORK_NAME_REPLACEMENT, networkName));
+    public ValidationResult networkBelongsToDataCenter(VDSGroup cluster, 
Network network) {
+        if (!cluster.getStoragePoolId().equals(network.getDataCenterId())) {
+            return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC,
+                    String.format(NETWORK_NAME_REPLACEMENT, 
network.getName()));
+        }
+        return ValidationResult.VALID;
+    }
+
+    /**
+     * Make sure the management network attachment is valid:
+     * <ol>
+     * <li>The network must be required.</li>
+     * <li>Management network cannot be required</li>
+     * </ol>
+     *
+     * @param network
+     *            The attached network
+     * @return Error if the management network attachment is not valid.
+     */
+    public ValidationResult managementNetworkAttachment(Network network) {
+        if (networkCluster.isManagement()) {
+            if (!networkCluster.isRequired()) {
+                return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED,
+                        String.format(NETWORK_NAME_REPLACEMENT, 
network.getName()));
+            }
+
+            if (network.isExternal()) {
+                return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL,
+                        String.format(NETWORK_NAME_REPLACEMENT, 
network.getName()));
+            }
+        }
+        return ValidationResult.VALID;
+    }
+
+    /**
+     * Make sure the management network change is valid - that's is allowed in 
an empty cluster only</li>
+     *
+     * @return Error if the management network change is not allowed.
+     */
+    public ValidationResult managementNetworkChange(NetworkCluster 
oldNetworkCluster) {
+        if (isManagementNetworkChanged(oldNetworkCluster) && 
isManagementNetworkChangeAllowed()) {
+            return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED);
+        }
+        return ValidationResult.VALID;
+    }
+
+    private boolean isManagementNetworkChangeAllowed() {
+        return !isClusterEmpty();
+    }
+
+    private boolean isManagementNetworkChanged(NetworkCluster 
oldNetworkCluster) {
+        if (oldNetworkCluster == null) {
+            return networkCluster.isManagement();
+        } else {
+            return oldNetworkCluster.isManagement() != 
networkCluster.isManagement();
+        }
+    }
+
+    private boolean isClusterEmpty() {
+        return 
DbFacadeLocator.getDbFacade().getVdsDao().getAllForVdsGroup(networkCluster.getClusterId()).isEmpty();
     }
 
     /**
      * Make sure the migration network is valid.
      *
-     * @param networkName
-     *            The network's name.
      * @return Error if the migration network feature is not supported and 
this network is marked as migration and is
      *         not the management network.
      */
-    public ValidationResult migrationPropertySupported(String networkName) {
+    public ValidationResult migrationPropertySupported() {
         return !networkCluster.isMigration() || 
FeatureSupported.migrationNetwork(version) ? ValidationResult.VALID
                 : new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED);
     }
@@ -48,7 +104,7 @@
     /**
      * Make sure the external network attachment is supported for the version.
      *
-     * @return Error iff the external network attachment is not supported.
+     * @return Error if the external network attachment is not supported.
      */
     public ValidationResult externalNetworkSupported() {
         return FeatureSupported.deviceCustomProperties(version)
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java
index 4b06f45..1113dc9 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java
@@ -3,6 +3,8 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import javax.inject.Inject;
+
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.VdsGroupCommandBase;
 import 
org.ovirt.engine.core.bll.network.cluster.helper.DisplayNetworkClusterHelper;
@@ -17,10 +19,12 @@
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
 import 
org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirectorDelegator;
-import org.ovirt.engine.core.utils.NetworkUtils;
 
 public class UpdateNetworkOnClusterCommand<T extends NetworkClusterParameters> 
extends
         VdsGroupCommandBase<T> {
+
+    @Inject
+    private ManagementNetworkUtil managementNetworkUtil;
 
     private Network network;
     private Network mgmtNetwork;
@@ -41,7 +45,7 @@
 
     private Network getManagementNetwork() {
         if (mgmtNetwork == null) {
-            mgmtNetwork = 
getNetworkDAO().getByNameAndCluster(NetworkUtils.getDefaultManagementNetworkName(),
 getVdsGroupId());
+            mgmtNetwork = 
managementNetworkUtil.getManagementNetwork(getVdsGroupId());
         }
 
         return mgmtNetwork;
@@ -107,10 +111,10 @@
                 
getVdsGroupDAO().get(getNetworkCluster().getClusterId()).getcompatibility_version();
         NetworkClusterValidator validator =
                 new NetworkClusterValidator(getNetworkCluster(), 
clusterVersion);
-        return (!NetworkUtils.isManagementNetwork(getNetwork())
-                || 
validate(validator.managementNetworkAttachment(getNetworkName())))
-                && 
validate(validator.migrationPropertySupported(getNetworkName()))
-                && (!getNetwork().isExternal() || 
validateExternalNetwork(validator));
+        return (validate(validator.managementNetworkAttachment(getNetwork()))
+                && 
validate(validator.managementNetworkChange(getOldNetworkCluster()))
+                && validate(validator.migrationPropertySupported())
+                && (!getNetwork().isExternal() || 
validateExternalNetwork(validator)));
     }
 
     private boolean validateExternalNetwork(NetworkClusterValidator validator) 
{
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java
index a20baae..68a3c07 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java
@@ -1,12 +1,14 @@
 package org.ovirt.engine.core.bll.network.cluster;
 
-import static org.junit.Assert.assertThat;
 import static org.hamcrest.CoreMatchers.both;
 import static org.hamcrest.CoreMatchers.hasItem;
+import static org.junit.Assert.assertThat;
 import static org.mockito.Mockito.when;
 import static 
org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith;
 import static 
org.ovirt.engine.core.bll.validator.ValidationResultMatchers.isValid;
 import static 
org.ovirt.engine.core.bll.validator.ValidationResultMatchers.replacements;
+
+import java.util.Collections;
 
 import org.hamcrest.Matcher;
 import org.junit.Before;
@@ -16,15 +18,25 @@
 import org.mockito.Mock;
 import org.mockito.runners.MockitoJUnitRunner;
 import org.ovirt.engine.core.bll.ValidationResult;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator;
+import org.ovirt.engine.core.dao.VdsDAO;
 import org.ovirt.engine.core.utils.MockConfigRule;
 import org.ovirt.engine.core.utils.RandomUtils;
 
 @RunWith(MockitoJUnitRunner.class)
 public class NetworkClusterValidatorTest {
+
+    private static final Guid TEST_CLUSTER_ID = Guid.newGuid();
+    private static final Guid TEST_DC_ID = Guid.newGuid();
 
     private static final String CLUSTER_VERSION = "7";
 
@@ -35,7 +47,17 @@
             NetworkClusterValidator.NETWORK_NAME_REPLACEMENT, NETWORK_NAME);
 
     @Mock
+    private VdsDAO vdsDao;
+    @Mock
+    private DbFacade dbFacade;
+    @Mock
     private NetworkCluster networkCluster;
+    @Mock
+    private NetworkCluster oldNetworkCluster;
+    @Mock
+    private Network network;
+    @Mock
+    private VDSGroup cluster;
 
     @Mock
     private Version version;
@@ -48,23 +70,94 @@
     @Before
     public void setup() {
         when(version.getValue()).thenReturn(CLUSTER_VERSION);
+        when(network.getName()).thenReturn(NETWORK_NAME);
+        when(networkCluster.getClusterId()).thenReturn(TEST_CLUSTER_ID);
+        when(dbFacade.getVdsDao()).thenReturn(vdsDao);
+        DbFacadeLocator.setDbFacade(dbFacade);
+
         validator = new NetworkClusterValidator(networkCluster, version);
     }
 
     @Test
-    public void managementNetworkAttachmentValid() throws Exception {
+    public void managementNetworkAttachmentValid() {
+        when(networkCluster.isManagement()).thenReturn(Boolean.TRUE);
         when(networkCluster.isRequired()).thenReturn(Boolean.TRUE);
+        when(network.isExternal()).thenReturn(Boolean.FALSE);
 
-        assertThat(validator.managementNetworkAttachment(NETWORK_NAME), 
isValid());
+        assertThat(validator.managementNetworkAttachment(network), isValid());
     }
 
     @Test
-    public void managementNetworkAttachmentInvalid() throws Exception {
+    public void managementNetworkAttachmentValidNotManagement() {
+        when(networkCluster.isManagement()).thenReturn(Boolean.FALSE);
+
+        assertThat(validator.managementNetworkAttachment(network), isValid());
+    }
+
+    @Test
+    public void managementNetworkAttachmentInvalidNotReqired() {
+        when(networkCluster.isManagement()).thenReturn(true);
         when(networkCluster.isRequired()).thenReturn(Boolean.FALSE);
 
-        assertThat(validator.managementNetworkAttachment(NETWORK_NAME),
+        assertThat(validator.managementNetworkAttachment(network),
                 
both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED))
                         .and(replacements(hasItem(NETWORK_NAME_REPLACEMENT))));
+    }
+
+    @Test
+    public void managementNetworkAttachmentInvalidExternal() {
+        when(networkCluster.isManagement()).thenReturn(Boolean.TRUE);
+        when(networkCluster.isRequired()).thenReturn(Boolean.TRUE);
+        when(network.isExternal()).thenReturn(Boolean.TRUE);
+
+        assertThat(validator.managementNetworkAttachment(network),
+                
both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL))
+                        .and(replacements(hasItem(NETWORK_NAME_REPLACEMENT))));
+    }
+
+    @Test
+    public void managementNetworkChangeValidNoChangePositive() {
+        testManagementNetworkChange(Boolean.TRUE, Boolean.TRUE, true, 
isValid());
+    }
+
+    @Test
+    public void managementNetworkChangeValidNoChangeNegative() {
+        testManagementNetworkChange(Boolean.FALSE, Boolean.FALSE, true, 
isValid());
+    }
+
+    @Test
+    public void managementNetworkChangeValidEmptyCluster() {
+        testManagementNetworkChange(Boolean.FALSE, Boolean.FALSE, true, 
isValid());
+    }
+
+    @Test
+    public void managementNetworkChangeValidInvalidNonEmptyCluster1() {
+        testManagementNetworkChange(
+                Boolean.TRUE,
+                Boolean.FALSE,
+                false,
+                
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED));
+    }
+
+    @Test
+    public void managementNetworkChangeValidInvalidNonEmptyCluster2() {
+        testManagementNetworkChange(
+                Boolean.FALSE,
+                Boolean.TRUE,
+                false,
+                
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED));
+    }
+
+    private void testManagementNetworkChange(Boolean managementBefore,
+                                             Boolean managementAfter,
+                                             boolean emptyCluster,
+                                             Matcher<ValidationResult> 
expectedResult) {
+        when(networkCluster.isManagement()).thenReturn(managementBefore);
+        when(oldNetworkCluster.isManagement()).thenReturn(managementAfter);
+        
when(vdsDao.getAllForVdsGroup(TEST_CLUSTER_ID)).thenReturn(emptyCluster ?
+                                                                               
Collections.<VDS> emptyList() :
+                                                                               
Collections.<VDS> singletonList(null));
+        assertThat(validator.managementNetworkChange(oldNetworkCluster), 
expectedResult);
     }
 
     @Test
@@ -101,7 +194,7 @@
         mockConfigRule.mockConfigValue(ConfigValues.MigrationNetworkEnabled, 
version, migrationNetworkSupported);
         when(networkCluster.isMigration()).thenReturn(migration);
 
-        assertThat(validator.migrationPropertySupported(NETWORK_NAME), 
matcher);
+        assertThat(validator.migrationPropertySupported(), matcher);
     }
 
     @Test
@@ -122,4 +215,21 @@
 
         assertThat(validator.externalNetworkSupported(), matcher);
     }
+
+    @Test
+    public void networkBelongsToDataCenterValid() throws Exception {
+        when(cluster.getStoragePoolId()).thenReturn(TEST_DC_ID);
+        when(network.getDataCenterId()).thenReturn(TEST_DC_ID);
+
+        assertThat(validator.networkBelongsToDataCenter(cluster, network), 
isValid());
+    }
+
+    @Test
+    public void networkBelongsToDataCenterNotValid() throws Exception {
+        when(cluster.getStoragePoolId()).thenReturn(TEST_DC_ID);
+        when(network.getDataCenterId()).thenReturn(Guid.newGuid());
+
+        assertThat(validator.networkBelongsToDataCenter(cluster, network),
+                
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC));
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
index a3b983d..7ddf33a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
@@ -484,6 +484,10 @@
     ACTION_TYPE_FAILED_NETWORK_NAME_IN_USE(ErrorType.CONFLICT),
     ACTION_TYPE_FAILED_NETWORK_IN_USE(ErrorType.CONFLICT),
     ACTION_TYPE_FAILED_NETWORK_ALREADY_LABELED(ErrorType.BAD_PARAMETERS),
+    ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC(ErrorType.BAD_PARAMETERS),
+    
ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND(ErrorType.BAD_PARAMETERS),
+    
ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED(ErrorType.BAD_PARAMETERS),
+    
ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL(ErrorType.BAD_PARAMETERS),
     NETWORK_NOT_EXISTS(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS(ErrorType.BAD_PARAMETERS),
     NETWORK_NOT_EXISTS_IN_CLUSTER(ErrorType.BAD_PARAMETERS),
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index 0ba7011..5ece6d5 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -598,6 +598,10 @@
 NON_VM_NETWORK_CANNOT_SUPPORT_STP=Cannot ${action} ${type}. STP can only be 
enabled on VM Networks.
 NETWORK_MTU_DIFFERENCES=Cannot ${action} ${type}. The following Logical 
Networks do not have the same MTU value: ${NETWORK_MTU_DIFFERENCES_LIST}.
 NETWORK_MTU_OVERRIDE_NOT_SUPPORTED=Cannot ${action} ${type}. Overriding MTU is 
not supported for this Data Center's compatibility version.
+ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC=Cannot ${action} ${type}. Network 
belongs to a different data-center.
+ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND=Cannot ${action} 
${type}. Default management network is not found or is ambiguous.
+ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED=Cannot ${action} 
${type}. Changing management network in a non-empty cluster is not allowed.
+ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL=Cannot ${action} 
${type}. Management network has to be not external one.
 ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED=Cannot ${action} 
${type}. Migration network is not supported for this cluster version.
 ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST=Cannot ${action} ${type}. The 
provider does not exist in the system.
 ACTION_TYPE_FAILED_PROVIDER_NETWORKS_USED=Cannot ${action} ${type}. Several 
external networks (${NETWORK_NAMES_COUNTER}) are being used by virtual machines 
and/or templates:\n${NETWORK_NAMES}\n - Please resolve the external networks 
usage first and try again.
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
index 6709876..77027dc 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
@@ -1642,6 +1642,18 @@
     @DefaultStringValue("Cannot ${action} ${type}. Overriding MTU is not 
supported for this Data Center's compatibility version.")
     String NETWORK_MTU_OVERRIDE_NOT_SUPPORTED();
 
+    @DefaultStringValue("Cannot ${action} ${type}. Network belongs to a 
different data-center.")
+    String ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC();
+
+    @DefaultStringValue("Cannot ${action} ${type}. Default management network 
is not found or is ambiguous.")
+    String ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND();
+
+    @DefaultStringValue("Cannot ${action} ${type}. Changing management network 
in a non-empty cluster is not allowed.")
+    String ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED();
+
+    @DefaultStringValue("Cannot ${action} ${type}. Management network has to 
be not external one.")
+    String ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL();
+
     @DefaultStringValue("Cannot ${action} ${type}. Migration network is not 
supported for this cluster version.")
     String ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 83b64e3..42e6ca6 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -601,6 +601,10 @@
 NON_VM_NETWORK_CANNOT_SUPPORT_STP=Cannot ${action} ${type}. STP can only be 
enabled on VM Networks.
 NETWORK_MTU_DIFFERENCES=Cannot ${action} ${type}. The following Logical 
Networks do not have the same MTU value: ${NETWORK_MTU_DIFFERENCES_LIST}.
 NETWORK_MTU_OVERRIDE_NOT_SUPPORTED=Cannot ${action} ${type}. Overriding MTU is 
not supported for this Data Center's compatibility version.
+ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC=Cannot ${action} ${type}. Network 
belongs to a different data-center.
+ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND=Cannot ${action} 
${type}. Default management network is not found or is ambiguous.
+ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED=Cannot ${action} 
${type}. Changing management network in a non-empty cluster is not allowed.
+ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL=Cannot ${action} 
${type}. Management network has to be not external one.
 ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED=Cannot ${action} 
${type}. Migration network is not supported for this cluster version.
 ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST=Cannot ${action} ${type}. The 
provider does not exist in the system.
 ACTION_TYPE_FAILED_PROVIDER_TYPE_MISMATCH=Cannot ${action} ${type}. The 
provider type should be 'OpenStack Networking'.


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I196a583ae7d8d7e373a1aca2a48e592232b18a5b
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