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
