Muli Salem has uploaded a new change for review. Change subject: core: Query GetVmsByNetworkId (WIP) ......................................................................
core: Query GetVmsByNetworkId (WIP) This patch adds the query above as part of the Network Main Tab feature. Change-Id: I8964c98e0cb90852e99ea40398ca1a28783cd4bd Signed-off-by: Muli Salem <msa...@redhat.com> --- M backend/manager/dbscripts/vms_sp.sql A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQueryTest.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/VmDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java 7 files changed, 120 insertions(+), 0 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/29/8529/1 diff --git a/backend/manager/dbscripts/vms_sp.sql b/backend/manager/dbscripts/vms_sp.sql index 4b6ade9..652ba01 100644 --- a/backend/manager/dbscripts/vms_sp.sql +++ b/backend/manager/dbscripts/vms_sp.sql @@ -859,3 +859,23 @@ +Create or replace FUNCTION GetVmsByNetworkId(v_network_id UUID) RETURNS SETOF vms + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM vms + WHERE EXISTS ( + SELECT 1 + FROM vm_interface + INNER JOIN network + ON network.name = vm_interface.network_name + INNER JOIN network_cluster + ON network.id = network_cluster.network_id + WHERE network_id = v_network_id + AND vms.vds_group_id = network_cluster.cluster_id + AND vm_interface.vm_guid = vms.vm_guid); +END; $procedure$ +LANGUAGE plpgsql; + + + diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQuery.java new file mode 100644 index 0000000..27fefe0 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQuery.java @@ -0,0 +1,18 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.NetworkIdParameters; + +/** + * A query to retrieve all VMs that the given Network is attached to. + */ +public class GetVmsByNetworkIdQuery<P extends NetworkIdParameters> extends QueriesCommandBase<P> { + public GetVmsByNetworkIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue(getDbFacade().getVmDao() + .getAllForNetwork(getParameters().getNetworkId())); + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQueryTest.java new file mode 100644 index 0000000..ad8d574 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmsByNetworkIdQueryTest.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.VM; +import org.ovirt.engine.core.common.queries.NetworkIdParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VmDAO; + +/** + * A test for the {@link GetVmsByNetworkIdQuery} 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 GetVmsByNetworkIdQueryTest + extends AbstractQueryTest<NetworkIdParameters, + GetVmsByNetworkIdQuery<NetworkIdParameters>> { + + @Test + public void testExecuteQueryCommand() { + // Set up the query parameters + Guid networkId = Guid.NewGuid(); + when(params.getNetworkId()).thenReturn(networkId); + + // Set up the DAOs + VM vm = new VM(); + List<VM> expected = Collections.singletonList(vm); + VmDAO vmDaoMock = mock(VmDAO.class); + when(vmDaoMock.getAllForNetwork(networkId)).thenReturn(expected); + when(getDbFacadeMockInstance().getVmDao()).thenReturn(vmDaoMock); + + // Run the query + GetVmsByNetworkIdQuery<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 9044635..2e7574d 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 @@ -56,6 +56,7 @@ GetVdsGroupsByNetworkId, GetVdsByNetworkId, GetVdsWithoutNetwork, + GetVmsByNetworkId, // VdsGroups GetVdsCertificateSubjectByVdsId(VdcQueryAuthType.User), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java index 1b5f504..924de84 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAO.java @@ -194,4 +194,12 @@ */ void remove(Guid vm); + /** + * Retrieves all VMS that have a Network Interface that the given Network is attached to. + * + * @param networkId + * the network id + * @return the list of VMs + */ + List<VM> getAllForNetwork(Guid networkId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java index efdf146..934a33f 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDAODbFacadeImpl.java @@ -233,6 +233,14 @@ .addValue("vm_guid", id)); } + @Override + public List<VM> getAllForNetwork(Guid id) { + return getCallsHandler().executeReadList("GetVmsByNetworkId", + VMRowMapper.instance, + getCustomMapSqlParameterSource() + .addValue("network_id", id)); + } + static final class VMRowMapper implements ParameterizedRowMapper<VM> { public static final VMRowMapper instance = new VMRowMapper(); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java index 067d156..d4fa664 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDAOTest.java @@ -325,6 +325,27 @@ assertNull(after); } + /** + * Ensures that only the correct vm is fetched. + */ + @Test + public void testGetAllForNetwork() { + List<VM> result = dao.getAllForNetwork(FixturesTool.NETWORK_ENGINE_2); + assertNotNull(result); + assertEquals(1, result.size()); + assertEquals(existingVm, result.get(0)); + } + + /** + * Ensures that no vms are fetched since the network is not assigned to any cluster + */ + @Test + public void testGetAllForNetworkEmpty() { + List<VM> result = dao.getAllForNetwork(FixturesTool.NETWORK_NO_CLUSTERS_ATTACHED); + assertNotNull(result); + assertTrue(result.isEmpty()); + } + private static void assertCorrectGetAllResult(List<VM> result) { assertNotNull(result); assertFalse(result.isEmpty()); -- To view, visit http://gerrit.ovirt.org/8529 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8964c98e0cb90852e99ea40398ca1a28783cd4bd 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