Muli Salem has uploaded a new change for review. Change subject: core: Query GetVdsWithoutNetwork (WIP) ......................................................................
core: Query GetVdsWithoutNetwork (WIP) The query above fetches all the Hosts that the given Network is not attached to, while the Network is assigned to their Cluster. Change-Id: If458c00ddfe6ef3c0616683ceb4d397914de8456 Signed-off-by: Muli Salem <msa...@redhat.com> --- M backend/manager/dbscripts/vds_sp.sql A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQueryTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDAOTest.java 7 files changed, 122 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/28/8528/1 diff --git a/backend/manager/dbscripts/vds_sp.sql b/backend/manager/dbscripts/vds_sp.sql index 14dc9dc..d70c59e 100644 --- a/backend/manager/dbscripts/vds_sp.sql +++ b/backend/manager/dbscripts/vds_sp.sql @@ -866,3 +866,26 @@ LANGUAGE plpgsql; +Create or replace FUNCTION GetVdsWithoutNetwork(v_network_id UUID) RETURNS SETOF vds + AS $procedure$ +BEGIN + RETURN QUERY SELECT vds.* + FROM vds + INNER JOIN vds_groups + ON vds.vds_group_id = vds_groups.vds_group_id + INNER JOIN network_cluster + ON vds_groups.vds_group_id = network_cluster.cluster_id + WHERE network_id = v_network_id + AND NOT EXISTS ( + SELECT 1 + FROM vds_interface + INNER JOIN network + ON network.name = vds_interface.network_name + INNER JOIN network_cluster + ON network.id = network_cluster.network_id + WHERE network_id = v_network_id + AND vds.vds_group_id = network_cluster.cluster_id + AND vds_interface.vds_id = vds.vds_id); +END; $procedure$ +LANGUAGE plpgsql; + diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQuery.java new file mode 100644 index 0000000..f462a1e --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQuery.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.NetworkIdParameters; + +/** + * A query to retrieve all Hosts that the given Network is not attached to, while the Network is assigned to their + * Cluster + */ +public class GetVdsWithoutNetworkQuery<P extends NetworkIdParameters> extends QueriesCommandBase<P> { + public GetVdsWithoutNetworkQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue(getDbFacade().getVdsDao() + .getAllWithoutNetwork(getParameters().getNetworkId())); + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQueryTest.java new file mode 100644 index 0000000..c31339d --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsWithoutNetworkQueryTest.java @@ -0,0 +1,45 @@ +package org.ovirt.engine.core.bll; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.util.Collections; +import java.util.List; + +import org.junit.Test; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.queries.NetworkIdParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VdsDAO; + +/** + * A test for the {@link GetVdsWithoutNetworkQuery} class. It tests that flow (i.e., that the query delegates properly + * to the DAO}). The internal workings of the DAO are not tested. + */ +public class GetVdsWithoutNetworkQueryTest + extends AbstractQueryTest<NetworkIdParameters, + GetVdsWithoutNetworkQuery<NetworkIdParameters>> { + + @Test + public void testExecuteQueryCommand() { + // Set up the query parameters + Guid networkId = Guid.NewGuid(); + when(params.getNetworkId()).thenReturn(networkId); + + // Set up the DAOs + VDS vds = new VDS(); + List<VDS> expected = Collections.singletonList(vds); + VdsDAO vdsDaoMock = mock(VdsDAO.class); + when(vdsDaoMock.getAllWithoutNetwork(networkId)).thenReturn(expected); + when(getDbFacadeMockInstance().getVdsDao()).thenReturn(vdsDaoMock); + + // Run the query + GetVdsWithoutNetworkQuery<NetworkIdParameters> query = getQuery(); + query.executeQueryCommand(); + + // Assert the result + assertEquals("Wrong result returned", expected, getQuery().getQueryReturnValue().getReturnValue()); + } + +} 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 6afedcd..9044635 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 @@ -55,6 +55,7 @@ // Networks GetVdsGroupsByNetworkId, GetVdsByNetworkId, + GetVdsWithoutNetwork, // VdsGroups GetVdsCertificateSubjectByVdsId(VdcQueryAuthType.User), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAO.java index 29b4af0..252e6f9 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAO.java @@ -189,4 +189,14 @@ * @return the list of VDS instances */ List<VDS> getAllForNetwork(Guid networkId); + + /** + * Retrieves all VDS instances that the given Network is not attached to, while the Network is assigned to their + * Cluster + * + * @param id + * the network + * @return the list of VDS instances + */ + List<VDS> getAllWithoutNetwork(Guid networkId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java index e3528c3..cb6d8e3 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VdsDAODbFacadeImpl.java @@ -187,6 +187,16 @@ parameterSource); } + @Override + public List<VDS> getAllWithoutNetwork(Guid networkId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("network_id", networkId); + + return getCallsHandler().executeReadList("GetVdsWithoutNetwork", + VdsRowMapper.instance, + parameterSource); + } + static final class VdsRowMapper implements ParameterizedRowMapper<VDS> { // single instance public final static VdsRowMapper instance = new VdsRowMapper(); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDAOTest.java index 3f488f8..be6d665 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDAOTest.java @@ -15,16 +15,19 @@ import org.ovirt.engine.core.compat.NGuid; public class VdsDAOTest extends BaseDAOTestCase { private static final Guid EXISTING_VDS_ID = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e7"); + private static final Guid EXISTING_VDS_ID_2 = new Guid("afce7a39-8e8c-4819-ba9c-796d316592e6"); private static final String IP_ADDRESS = "192.168.122.17"; private VdsDAO dao; private VDS existingVds; + private VDS existingVds2; @Override public void setUp() throws Exception { super.setUp(); dao = prepareDAO(dbFacade.getVdsDao()); existingVds = dao.get(EXISTING_VDS_ID); + existingVds2 = dao.get(EXISTING_VDS_ID_2); } /** @@ -413,6 +416,17 @@ assertFalse(result.contains(existingVds)); } + /** + * Ensures that only the correct vds is fetched. + */ + @Test + public void testGetAllWithoutNetwork() { + List<VDS> result = dao.getAllWithoutNetwork(FixturesTool.NETWORK_ENGINE_2); + assertNotNull(result); + assertEquals(1, result.size()); + assertEquals(existingVds2, result.get(0)); + } + private void assertGetAllForStoragePoolCorrectResult(List<VDS> result) { assertNotNull(result); assertFalse(result.isEmpty()); -- To view, visit http://gerrit.ovirt.org/8528 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If458c00ddfe6ef3c0616683ceb4d397914de8456 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Muli Salem <msa...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches