Tomas Jelinek has uploaded a new change for review.

Change subject: engine: Added GetHostsInClusterPartiallyOverriddenQuery
......................................................................

engine: Added GetHostsInClusterPartiallyOverriddenQuery

This query returns true if the display address is overridden for some hosts in
a cluster and for some not. Returns false othervise.

It is needed by the http://wiki.ovirt.org/Features/Display_Address_Override to
avoid this calculation on the frontend.

Change-Id: I1955c35a3739680f6f80c9e8b29a21a14c5b8b7a
Signed-off-by: Tomas Jelinek <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQuery.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQueryTest.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostsInClusterPartiallyOverriddenParameters.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
4 files changed, 210 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/75/11375/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQuery.java
new file mode 100644
index 0000000..84fdbba
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQuery.java
@@ -0,0 +1,60 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.queries.GetHostsByClusterIdParameters;
+import 
org.ovirt.engine.core.common.queries.GetHostsInClusterPartiallyOverriddenParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+
+public class GetHostsInClusterPartiallyOverriddenQuery<P extends 
GetHostsInClusterPartiallyOverriddenParameters> extends QueriesCommandBase<P> {
+
+    public GetHostsInClusterPartiallyOverriddenQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        GetHostsByClusterIdParameters params = new 
GetHostsByClusterIdParameters(getParameters().getId());
+        params.setFiltered(getParameters().isFiltered());
+
+        VdcQueryReturnValue hostsReturnValue = 
Backend.getInstance().RunQuery(VdcQueryType.GetHostsByClusterId, params);
+        @SuppressWarnings("unchecked")
+        List<VDS> hosts = (List<VDS>) hostsReturnValue.getReturnValue();
+        
getQueryReturnValue().setReturnValue(isConsoleAddressPartiallyOverridden(hosts));
+    }
+
+    boolean isConsoleAddressPartiallyOverridden(List<VDS> hosts) {
+
+        if (hosts == null) {
+            return false;
+        }
+
+        boolean foundOverridden = false;
+        boolean foundDefault = false;
+
+        for (VDS host : hosts) {
+            if (host.getConsoleAddress() == null) {
+                if (foundOverridden) {
+                    // found both, it means that some are overridden and some 
not
+                    return true;
+                }
+
+                foundDefault = true;
+            } else {
+                if (foundDefault) {
+                    // found both, it means that some are overridden and some 
not
+                    return true;
+                }
+
+                foundOverridden = true;
+            }
+        }
+
+        // ok, no conflict found
+        return false;
+
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQueryTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQueryTest.java
new file mode 100644
index 0000000..429ef38
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetHostsInClusterPartiallyOverriddenQueryTest.java
@@ -0,0 +1,129 @@
+package org.ovirt.engine.core.bll;
+
+import static org.hamcrest.core.Is.is;
+import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.any;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.junit.experimental.theories.DataPoints;
+import org.junit.experimental.theories.Theories;
+import org.junit.experimental.theories.Theory;
+import org.junit.runner.RunWith;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import 
org.ovirt.engine.core.common.queries.GetHostsInClusterPartiallyOverriddenParameters;
+
+// this class contains only tests for the isConsoleAddressPartiallyOverridden 
method
+@RunWith(Theories.class)
+public class GetHostsInClusterPartiallyOverriddenQueryTest {
+
+    private 
GetHostsInClusterPartiallyOverriddenQuery<GetHostsInClusterPartiallyOverriddenParameters>
 command;
+
+    // create data point with 1,2,3 and many VDS (all has overridden console 
address)
+    @DataPoints
+    public static OverriddenConsoleAddress[] overriddens = new 
OverriddenConsoleAddress[]{
+            new OverriddenConsoleAddress(1),
+            new OverriddenConsoleAddress(2),
+            new OverriddenConsoleAddress(3),
+            new OverriddenConsoleAddress(20),
+    };
+
+    // create data point with 1,2,3 and many VDS (none has overridden console 
address)
+    @DataPoints
+    public static DefaultConsoleAddress[] defaults = new 
DefaultConsoleAddress[]{
+            new DefaultConsoleAddress(1),
+            new DefaultConsoleAddress(2),
+            new DefaultConsoleAddress(3),
+            new DefaultConsoleAddress(20),
+    };
+
+    @SuppressWarnings("unchecked")
+    @Before
+    public void setup() {
+        command = mock(GetHostsInClusterPartiallyOverriddenQuery.class);
+        
when(command.isConsoleAddressPartiallyOverridden(any(List.class))).thenCallRealMethod();
+    }
+
+    @Test
+    public void nullHostsAreNotMismatched() {
+        assertThat(command.isConsoleAddressPartiallyOverridden(null), 
is(false));
+    }
+
+    @Test
+    public void emptyHostsAreNotMismatched() {
+        assertThat(command.isConsoleAddressPartiallyOverridden(new 
ArrayList<VDS>()), is(false));
+    }
+
+    @Theory
+    public void 
whenAllHostsAreDefaultTheyAreNotMismatched(DefaultConsoleAddress 
defaultAddress) {
+        
assertThat(command.isConsoleAddressPartiallyOverridden(defaultAddress.getAllVds()),
 is(false));
+    }
+
+    @Theory
+    public void 
whenAllHostsAreOverriddenTheyAreNotMismatched(OverriddenConsoleAddress 
overriddenAddress) {
+        
assertThat(command.isConsoleAddressPartiallyOverridden(overriddenAddress.getAllVds()),
 is(false));
+    }
+
+    @Theory
+    public void 
anyCombinationOfDefaulfAndOverriddenHostsAreMismatched(DefaultConsoleAddress 
defaultAddress, OverriddenConsoleAddress overriddenAddress) {
+        List<VDS> mergedAddresses = new ArrayList<VDS>();
+        mergedAddresses.addAll(defaultAddress.getAllVds());
+        mergedAddresses.addAll(overriddenAddress.getAllVds());
+        
assertThat(command.isConsoleAddressPartiallyOverridden(mergedAddresses), 
is(true));
+    }
+
+}
+
+abstract class BaseVdsContainer {
+
+    private List<VDS> content;
+
+    public BaseVdsContainer(int numOfVds) {
+        for (int i = 0; i < numOfVds; i++) {
+            addVds();
+        }
+    }
+
+    protected abstract void addVds();
+
+    public void addVds(String returnValue) {
+        if (content == null) {
+            content = new ArrayList<VDS>();
+        }
+
+        VDS vds = mock(VDS.class);
+        when(vds.getConsoleAddress()).thenReturn(returnValue);
+        content.add(vds);
+    }
+
+    public List<VDS> getAllVds() {
+        return content;
+    }
+}
+
+class OverriddenConsoleAddress extends BaseVdsContainer {
+
+    public OverriddenConsoleAddress(int numOfVds) {
+        super(numOfVds);
+    }
+
+    protected void addVds() {
+        super.addVds("some overridden value"); //$NON-NLS-1$
+    }
+}
+
+class DefaultConsoleAddress extends BaseVdsContainer {
+
+    public DefaultConsoleAddress(int numOfVds) {
+        super(numOfVds);
+    }
+
+    protected void addVds() {
+        super.addVds(null);
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostsInClusterPartiallyOverriddenParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostsInClusterPartiallyOverriddenParameters.java
new file mode 100644
index 0000000..26666c6
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetHostsInClusterPartiallyOverriddenParameters.java
@@ -0,0 +1,20 @@
+package org.ovirt.engine.core.common.queries;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class GetHostsInClusterPartiallyOverriddenParameters extends 
VdcQueryParametersBase {
+
+    private static final long serialVersionUID = -2931996134200329010L;
+
+    private Guid clusterId = new Guid();
+
+    public GetHostsInClusterPartiallyOverriddenParameters(Guid clusterId) {
+        super();
+        this.clusterId = clusterId;
+    }
+
+    public Guid getId() {
+        return clusterId;
+    }
+}
+
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
index e23bf8a..b52f94a 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
@@ -36,6 +36,7 @@
     GetVdsHooksById2,
     GetAllHosts(VdcQueryAuthType.User),
     GetHostsByClusterId(VdcQueryAuthType.User),
+    GetHostsInClusterPartiallyOverridden,
     GetAllVdsByStoragePool(VdcQueryAuthType.User),
 
     // Vds Networks


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I1955c35a3739680f6f80c9e8b29a21a14c5b8b7a
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tomas Jelinek <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to