Moti Asayag has uploaded a new change for review.

Change subject: engine: Refactor UpdateVdsCommand to use UpdateHostValidator
......................................................................

engine: Refactor UpdateVdsCommand to use UpdateHostValidator

UpdateVdsCommand is modified to use the UpdateHostValidator, and
also removing a test which its functionality is better covered by
the validator test class.

Change-Id: I4261f0ee923f081904a9b3d35f5c42747844b7b7
Signed-off-by: Moti Asayag <masa...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsCommandTest.java
2 files changed, 29 insertions(+), 109 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/70/37470/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
index d9dcc6a..230b661 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsCommand.java
@@ -6,6 +6,7 @@
 
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.network.cluster.NetworkClusterHelper;
+import org.ovirt.engine.core.bll.validator.UpdateHostValidator;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.InstallVdsParameters;
@@ -13,18 +14,14 @@
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
-import 
org.ovirt.engine.core.common.action.VdsOperationActionParameters.AuthenticationMethod;
 import org.ovirt.engine.core.common.businessentities.FenceAgent;
 import org.ovirt.engine.core.common.businessentities.KdumpStatus;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
-import org.ovirt.engine.core.common.businessentities.VDSType;
 import org.ovirt.engine.core.common.businessentities.VdsDynamic;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 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.Config;
-import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.common.validation.group.PowerManagementCheck;
 import org.ovirt.engine.core.common.validation.group.UpdateEntity;
@@ -64,85 +61,36 @@
     @Override
     protected boolean canDoAction() {
         oldHost = getVdsDAO().get(getVdsId());
-        VdsStatic updatedHost = getParameters().getVdsStaticData();
+        UpdateHostValidator validator =
+                new UpdateHostValidator(getDbFacade(),
+                        oldHost,
+                        getParameters().getvds(),
+                        getParameters().isInstallHost());
 
-        if (oldHost == null || updatedHost == null) {
-            return failCanDoAction(VdcBllMessages.VDS_INVALID_SERVER_ID);
-        }
+        return validate(validator.hostExists())
+                && validate(validator.hostStatusValid())
+                && validate(validator.nameNotEmpty())
+                && validate(validator.nameLengthIsLegal())
+                && validate(validator.updateHostAddressAllowed())
+                && validate(validator.nameNotUsed())
+                && validate(validator.hostNameNotUsed())
+                && validate(validator.statusSupportedForHostInstallation())
+                && 
validate(validator.passwordProvidedForHostInstallation(getParameters().getAuthMethod(),
+                        getParameters().getPassword()))
+                && validate(validator.updatePortAllowed())
+                && validate(validator.clusterNotChanged())
+                && validate(validator.changeProtocolAllowed())
+                && validateNetworkProviderConfiguration()
+                && 
isPowerManagementLegal(getParameters().getVdsStaticData().isPmEnabled(),
+                        getParameters().getFenceAgents(),
+                        oldHost.getVdsGroupCompatibilityVersion().toString());
+    }
 
-        String compatibilityVersion = 
oldHost.getVdsGroupCompatibilityVersion().toString();
-
-        if (!VdsHandler.isUpdateValid(updatedHost, oldHost.getStaticData(), 
oldHost.getStatus())) {
-            return 
failCanDoAction(VdcBllMessages.VDS_STATUS_NOT_VALID_FOR_UPDATE);
-        }
-
-        String vdsName = updatedHost.getName();
-        if (vdsName == null || vdsName.isEmpty()) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NAME_MAY_NOT_BE_EMPTY);
-        }
-
-        // check that VDS name is not too long
-        int maxVdsNameLength = Config.<Integer> 
getValue(ConfigValues.MaxVdsNameLength);
-        if (vdsName.length() > maxVdsNameLength) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NAME_LENGTH_IS_TOO_LONG);
-        }
-
-        String hostName = updatedHost.getHostName();
-        if (oldHost.getStatus() != VDSStatus.InstallFailed && 
!oldHost.getHostName().equals(hostName)) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_HOSTNAME_CANNOT_CHANGE);
-        }
-
-        // check if a name is updated to an existing vds name
-        if (!StringUtils.equalsIgnoreCase(oldHost.getName(), 
updatedHost.getName())
-                && getVdsDAO().getByName(vdsName) != null) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_NAME_ALREADY_USED);
-        }
-
-        if (!StringUtils.equalsIgnoreCase(oldHost.getHostName(), 
updatedHost.getHostName())
-                && getVdsDAO().getAllForHostname(hostName).size() != 0) {
-            return 
failCanDoAction(VdcBllMessages.ACTION_TYPE_FAILED_VDS_WITH_SAME_HOST_EXIST);
-        }
-
-        if (getParameters().isInstallHost()
-                && oldHost.getStatus() != VDSStatus.Maintenance
-                && oldHost.getStatus() != VDSStatus.NonOperational
-                && oldHost.getStatus() != VDSStatus.InstallFailed
-                && oldHost.getStatus() != VDSStatus.InstallingOS) {
-            return 
failCanDoAction(VdcBllMessages.VDS_CANNOT_INSTALL_STATUS_ILLEGAL);
-        }
-
-        if (getParameters().isInstallHost()
-                && getParameters().getAuthMethod() == 
AuthenticationMethod.Password
-                && StringUtils.isEmpty(getParameters().getPassword())
-                && updatedHost.getVdsType() == VDSType.VDS) {
-            return 
failCanDoAction(VdcBllMessages.VDS_CANNOT_INSTALL_EMPTY_PASSWORD);
-        }
-
-        if (!getParameters().isInstallHost() && oldHost.getPort() != 
updatedHost.getPort()) {
-            return 
failCanDoAction(VdcBllMessages.VDS_PORT_CHANGE_REQUIRE_INSTALL);
-        }
-
-        // Forbid updating group id - this must be done through 
ChangeVDSClusterCommand
-        // This is due to permission check that must be done both on the VDS 
and on the VDSGroup
-        if (!oldHost.getVdsGroupId().equals(updatedHost.getVdsGroupId())) {
-            return failCanDoAction(VdcBllMessages.VDS_CANNOT_UPDATE_CLUSTER);
-        }
-
-        if (getParameters().isInstallHost()
+    private boolean validateNetworkProviderConfiguration() {
+        return getParameters().isInstallHost()
                 && getParameters().getNetworkProviderId() != null
                 && 
!validateNetworkProviderProperties(getParameters().getNetworkProviderId(),
-                        getParameters().getNetworkMappings())) {
-            return false;
-        }
-
-        if (updatedHost.getProtocol() != oldHost.getProtocol()
-                && oldHost.getStatus() != VDSStatus.Maintenance
-                && oldHost.getStatus() != VDSStatus.InstallingOS) {
-            return 
failCanDoAction(VdcBllMessages.VDS_STATUS_NOT_VALID_FOR_UPDATE);
-        }
-
-        // if all ok check PM is legal
-        return isPowerManagementLegal(updatedHost.isPmEnabled(), 
getParameters().getFenceAgents(), compatibilityVersion);
+                        getParameters().getNetworkMappings());
     }
 
     @Override
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsCommandTest.java
index 80fa252..168efb8 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsCommandTest.java
@@ -12,6 +12,7 @@
 import org.ovirt.engine.core.common.config.ConfigValues;
 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.dao.VdsDAO;
 import org.ovirt.engine.core.utils.MockConfigRule;
 
@@ -20,36 +21,6 @@
     @ClassRule
     public static MockConfigRule configRule =
             new 
MockConfigRule(MockConfigRule.mockConfig(ConfigValues.MaxVdsNameLength, 4));
-
-    @SuppressWarnings("unchecked")
-    @Test
-    public void canDoAction() {
-        UpdateVdsActionParameters parameters = new UpdateVdsActionParameters();
-        Guid vdsId = Guid.newGuid();
-        VDS newVdsData = makeTestVds(vdsId);
-        VDS oldVdsData = newVdsData.clone();
-        oldVdsData.setVdsName("FOO");
-        oldVdsData.setVdsGroupCompatibilityVersion(new Version("1.2.3"));
-        parameters.setvds(newVdsData);
-
-        UpdateVdsCommand<UpdateVdsActionParameters> commandMock = 
Mockito.mock(UpdateVdsCommand.class);
-        Mockito.when(commandMock.getVdsId()).thenReturn(vdsId);
-        Mockito.when(commandMock.canDoAction()).thenCallRealMethod();
-        Mockito.when(commandMock.getParameters()).thenReturn(parameters);
-        Version version = new Version("1.2.3");
-        VDSGroup vdsGroup = new VDSGroup();
-        vdsGroup.setCompatibilityVersion(version);
-        when(commandMock.getVdsGroup()).thenReturn(vdsGroup);
-        
when(commandMock.isPowerManagementLegal(parameters.getVdsStaticData().isPmEnabled(),
-                parameters.getFenceAgents(),
-                new Version("1.2.3").toString())).thenReturn(true);
-        VdsDAO vdsDaoMock = Mockito.mock(VdsDAO.class);
-        Mockito.when(vdsDaoMock.get(vdsId)).thenReturn(oldVdsData);
-        Mockito.when(commandMock.getVdsDAO()).thenReturn(vdsDaoMock);
-        VdsHandler.init();
-
-        Assert.assertTrue(commandMock.canDoAction());
-    }
 
     private VDS makeTestVds(Guid vdsId) {
         VDS newVdsData = new VDS();
@@ -89,6 +60,7 @@
         Mockito.when(vdsDaoMock.getByName("BAR")).thenReturn(oldVdsData);
 
         Mockito.when(commandMock.getVdsDAO()).thenReturn(vdsDaoMock);
+        
Mockito.when(commandMock.getDbFacade()).thenReturn(Mockito.mock(DbFacade.class));
         VdsHandler.init();
 
         Assert.assertFalse(commandMock.canDoAction());


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

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

Reply via email to