Muli Salem has uploaded a new change for review. Change subject: core: Query GetVdsByNetworkId (WIP) ......................................................................
core: Query GetVdsByNetworkId (WIP) This patch adds the query above as part of the Network Main Tab feature. Change-Id: If53281fdc70c9fb2b19145e62bb8f0a5ae3491c0 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/GetVdsByNetworkIdQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsByNetworkIdQueryTest.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVdsByNetworkIdParameters.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/FixturesTool.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VdsDAOTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml 10 files changed, 224 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/8499/1 diff --git a/backend/manager/dbscripts/vds_sp.sql b/backend/manager/dbscripts/vds_sp.sql index c1243a9..59fd9c3 100644 --- a/backend/manager/dbscripts/vds_sp.sql +++ b/backend/manager/dbscripts/vds_sp.sql @@ -845,3 +845,24 @@ END; $procedure$ LANGUAGE plpgsql; + + +Create or replace FUNCTION GetVdsByNetworkId(v_network_id UUID) RETURNS SETOF vds + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM vds + WHERE EXISTS ( + SELECT * + 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/GetVdsByNetworkIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsByNetworkIdQuery.java new file mode 100644 index 0000000..279269a --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVdsByNetworkIdQuery.java @@ -0,0 +1,19 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.GetVdsByNetworkIdParameters; + +/** + * A query to retrieve all Clusters that the given Network is assigned to. + */ +public class GetVdsByNetworkIdQuery<P extends GetVdsByNetworkIdParameters> extends QueriesCommandBase<P> { + public GetVdsByNetworkIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue(getDbFacade().getVdsDao() + .getAllForNetwork(getParameters().getNetworkId())); + } + +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsByNetworkIdQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsByNetworkIdQueryTest.java new file mode 100644 index 0000000..8d5df35 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVdsByNetworkIdQueryTest.java @@ -0,0 +1,44 @@ +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.GetVdsByNetworkIdParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VdsDAO; + +/** + * A test for the {@link GetVdsByNetworkIdQuery} 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 GetVdsByNetworkIdQueryTest + extends AbstractQueryTest<GetVdsByNetworkIdParameters, + GetVdsByNetworkIdQuery<GetVdsByNetworkIdParameters>> { + + @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.getAllForNetwork(networkId)).thenReturn(expected); + when(getDbFacadeMockInstance().getVdsDao()).thenReturn(vdsDaoMock); + + // Run the query + GetVdsByNetworkIdQuery<GetVdsByNetworkIdParameters> 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/GetVdsByNetworkIdParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVdsByNetworkIdParameters.java new file mode 100644 index 0000000..e5ee62f --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVdsByNetworkIdParameters.java @@ -0,0 +1,20 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.compat.Guid; + +public class GetVdsByNetworkIdParameters extends VdcQueryParametersBase { + private static final long serialVersionUID = 8432927613426067123L; + private Guid networkId; + + public GetVdsByNetworkIdParameters(Guid networkId) { + this.networkId = networkId; + } + + public Guid getNetworkId() { + return networkId; + } + + public GetVdsByNetworkIdParameters() { + } + +} 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 6969382..6afedcd 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 @@ -54,6 +54,7 @@ // Networks GetVdsGroupsByNetworkId, + GetVdsByNetworkId, // 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 7ea904c..29b4af0 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 @@ -180,4 +180,13 @@ * @return list of VDS instances */ List<VDS> getAllForVdsGroupWithStatus(Guid vdsGroupId, VDSStatus status); + + /** + * Retrieves all VDS instances that have a Network Interface that the given Network is attached to. + * + * @param id + * the network + * @return the list of VDS instances + */ + List<VDS> getAllForNetwork(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 d356e4a..279beb2 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 @@ -18,6 +18,7 @@ import org.ovirt.engine.core.compat.RpmVersion; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacadeUtils; +import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.simple.ParameterizedRowMapper; import org.springframework.jdbc.core.simple.SimpleJdbcTemplate; @@ -176,6 +177,15 @@ return getCallsHandler().executeReadList("GetFailingVdss", VdsRowMapper.instance, null); } + public List<VDS> getAllForNetwork(Guid networkId) { + MapSqlParameterSource parameterSource = getCustomMapSqlParameterSource() + .addValue("network_id", networkId); + + return getCallsHandler().executeReadList("GetVdsByNetworkId", + 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/FixturesTool.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java index afe455c..9d8073a 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/FixturesTool.java @@ -206,6 +206,17 @@ protected static final Guid NETWORK_ENGINE_2 = new Guid("58d5c1c6-cb15-4832-b2a4-023770607189"); /** + * Predefined Network for testing with the following properties : + * <ul> + * <li>name: engine</li> + * <li>description: Management Network</li> + * <li>stp: 0</li> + * <li>storage_pool_id: rhel6.iscsi (6d849ebf-755f-4552-ad09-9a090cda105d)</li> + * </ul> + */ + protected static final Guid NETWORK_ENGINE = new Guid("58d5c1c6-cb15-4832-b2a4-023770607188"); + + /** * Predefined Network without entries in network_cluster with the following properties : * <ul> * <li>name: engine3</li> 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 4499766..3f488f8 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 @@ -382,6 +382,37 @@ assertIncorrectGetResult(result); } + /** + * Ensures that only the correct vds is fetched. + */ + @Test + public void testGetAllForNetwork() { + List<VDS> result = dao.getAllForNetwork(FixturesTool.NETWORK_ENGINE_2); + assertNotNull(result); + assertEquals(1, result.size()); + assertEquals(existingVds, result.get(0)); + } + + /** + * Ensures that no vds is fetched since the network is not assigned to any cluster + */ + @Test + public void testGetAllForNetworkEmpty() { + List<VDS> result = dao.getAllForNetwork(FixturesTool.NETWORK_NO_CLUSTERS_ATTACHED); + assertNotNull(result); + assertTrue(result.isEmpty()); + } + + /** + * Ensures that the vds with a network with the same name is not fetched. + */ + @Test + public void testGetAllForNetworkSameNetworkName() { + List<VDS> result = dao.getAllForNetwork(FixturesTool.NETWORK_ENGINE); + assertNotNull(result); + assertFalse(result.contains(existingVds)); + } + private void assertGetAllForStoragePoolCorrectResult(List<VDS> result) { assertNotNull(result); assertFalse(result.isEmpty()); diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index 085d4b9..2c31c80 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -2521,6 +2521,46 @@ <value>2010-11-12 15:57:01</value> <null /> </row> + <row> + <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9dd</value> + <value>eth0</value> + <value>engine2</value> + <value>afce7a39-8e8c-4819-ba9c-796d316592e7</value> + <value>78:E7:D1:E4:8C:71</value> + <null /> + <null /> + <null /> + <null /> + <value>1000</value> + <value>10.35.110.11</value> + <value>255.255.255.0</value> + <null /> + <value>1</value> + <value>2</value> + <value>2012-11-12 10:12:41</value> + <value>2012-11-12 15:57:01</value> + <null /> + </row> + <row> + <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9de</value> + <value>eth0</value> + <value>engine</value> + <value>afce7a39-8e8c-4819-ba9c-796d316592e7</value> + <value>78:E7:D1:E4:8C:72</value> + <null /> + <null /> + <null /> + <null /> + <value>1000</value> + <value>10.35.110.12</value> + <value>255.255.255.0</value> + <null /> + <value>1</value> + <value>2</value> + <value>2012-11-12 10:12:41</value> + <value>2012-11-12 15:57:01</value> + <null /> + </row> </table> <table name="vds_interface_statistics"> @@ -2549,6 +2589,24 @@ <value>0</value> <value>0</value> </row> + <row> + <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9dd</value> + <null /> + <value>0</value> + <value>0</value> + <value>0</value> + <value>0</value> + <value>0</value> + </row> + <row> + <value>ba31682e-6ae7-4f9d-8c6f-04c93acca9de</value> + <null /> + <value>0</value> + <value>0</value> + <value>0</value> + <value>0</value> + <value>0</value> + </row> </table> <table name="roles_groups"> -- To view, visit http://gerrit.ovirt.org/8499 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: If53281fdc70c9fb2b19145e62bb8f0a5ae3491c0 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