Muli Salem has uploaded a new change for review. Change subject: core: Vm Templates By Network Query ......................................................................
core: Vm Templates By Network Query This patch adds the GetVmTemplatesAndNetworkInterfacesByNetworkId query as part of the Network Main Tab feature. Change-Id: Ifc4ac77abf598b6e1fff1fa4318b39c9f3af5453 Signed-off-by: Muli Salem <[email protected]> --- M backend/manager/dbscripts/network_sp.sql M backend/manager/dbscripts/vm_templates_sp.sql A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQueryTest.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/VmNetworkInterfaceDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAODbFacadeImpl.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.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/VmNetworkInterfaceDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java 12 files changed, 214 insertions(+), 7 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/8707/1 diff --git a/backend/manager/dbscripts/network_sp.sql b/backend/manager/dbscripts/network_sp.sql index 9a5a101..f0aed2a 100644 --- a/backend/manager/dbscripts/network_sp.sql +++ b/backend/manager/dbscripts/network_sp.sql @@ -789,6 +789,24 @@ +Create or replace FUNCTION GetVmTemplateInterfacesByNetworkId(v_network_id UUID) RETURNS SETOF vm_interface_view + AS $procedure$ +BEGIN + RETURN QUERY SELECT vm_interface_view.* + FROM vm_interface_view + INNER JOIN vm_templates_view + ON vm_templates_view.vmt_guid = vm_interface_view.vmt_guid + INNER JOIN network_cluster + ON network_cluster.cluster_id = vm_templates_view.vds_group_id + INNER JOIN network + ON network.id = network_cluster.network_id + AND network.name = vm_interface_view.network_name + WHERE network.id = v_network_id; +END; $procedure$ +LANGUAGE plpgsql; + + + Create or replace FUNCTION set_network_exclusively_as_display(v_cluster_id UUID, v_network_id UUID) RETURNS VOID AS $procedure$ diff --git a/backend/manager/dbscripts/vm_templates_sp.sql b/backend/manager/dbscripts/vm_templates_sp.sql index ae6fcba..d32588f 100644 --- a/backend/manager/dbscripts/vm_templates_sp.sql +++ b/backend/manager/dbscripts/vm_templates_sp.sql @@ -328,3 +328,21 @@ LANGUAGE plpgsql; +Create or replace FUNCTION GetVmTemplatesByNetworkId(v_network_id UUID) RETURNS SETOF vm_templates_view + AS $procedure$ +BEGIN + RETURN QUERY SELECT * + FROM vm_templates_view + 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 vm_templates_view.vds_group_id = network_cluster.cluster_id + AND vm_interface.vmt_guid = vm_templates_view.vmt_guid); +END; $procedure$ +LANGUAGE plpgsql; + diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery.java new file mode 100644 index 0000000..bd7ddba --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery.java @@ -0,0 +1,40 @@ +package org.ovirt.engine.core.bll; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +import org.ovirt.engine.core.common.businessentities.Entities; +import org.ovirt.engine.core.common.businessentities.VmNetworkInterface; +import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.common.queries.NetworkIdParameters; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.compat.Guid; + +/** + * A query to retrieve all VmTemplate-Network Interface pairs that the given Network is attached to. + */ +public class GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery<P extends NetworkIdParameters> extends QueriesCommandBase<P> { + public GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + List<VmTemplate> vmTemplateList = getDbFacade().getVmTemplateDao() + .getAllForNetwork(getParameters().getNetworkId()); + List<VmNetworkInterface> vmNetworkInterfaceList = getDbFacade().getVmNetworkInterfaceDao() + .getAllForTemplatesByNetwork(getParameters().getNetworkId()); + + final Map<Guid, VmTemplate> vmTemplatesById = Entities.businessEntitiesById(vmTemplateList); + + List<Pair<VmNetworkInterface, VmTemplate>> vmInterfaceVmPairs = + new ArrayList<Pair<VmNetworkInterface, VmTemplate>>(); + for (VmNetworkInterface vmNetworkInterface : vmNetworkInterfaceList) { + vmInterfaceVmPairs.add(new Pair(vmNetworkInterface, + vmTemplatesById.get(vmNetworkInterface.getVmTemplateId()))); + } + + getQueryReturnValue().setReturnValue(vmInterfaceVmPairs); + } +} diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQueryTest.java new file mode 100644 index 0000000..8c63869 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmTemplatesAndNetworkInterfacesByNetworkIdQueryTest.java @@ -0,0 +1,68 @@ +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.VmNetworkInterface; +import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.common.queries.NetworkIdParameters; +import org.ovirt.engine.core.common.utils.Pair; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VmNetworkInterfaceDAO; +import org.ovirt.engine.core.dao.VmTemplateDAO; + +/** + * A test for the {@link GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery} class. It tests the flow (i.e., that the query + * delegates properly to the DAO}). The internal workings of the DAO are not tested. + */ +public class GetVmTemplatesAndNetworkInterfacesByNetworkIdQueryTest +extends AbstractQueryTest<NetworkIdParameters, +GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery<NetworkIdParameters>> { + + private Guid networkId = Guid.NewGuid(); + private Guid vmTemplateId = Guid.NewGuid(); + private VmTemplate vmTemplate = new VmTemplate(); + private VmNetworkInterface vmNetworkInterface = new VmNetworkInterface(); + + @Test + public void testExecuteQueryCommand() { + // Setup the query parameters + when(params.getNetworkId()).thenReturn(networkId); + + vmTemplate.setId(vmTemplateId); + vmNetworkInterface.setVmTemplateId(vmTemplateId); + + // Setup the DAOs + setupVmTemplateDao(); + setupVmNetworkInterfaceDao(); + + Pair<VmNetworkInterface, VmTemplate> vmInterfaceVmTemplatePair = new Pair(vmNetworkInterface, vmTemplate); + List<Pair<VmNetworkInterface, VmTemplate>> expected = Collections.singletonList(vmInterfaceVmTemplatePair); + + // Run the query + GetVmTemplatesAndNetworkInterfacesByNetworkIdQuery<NetworkIdParameters> query = getQuery(); + query.executeQueryCommand(); + + // Assert the result + assertEquals("Wrong result returned", expected, getQuery().getQueryReturnValue().getReturnValue()); + } + + private void setupVmTemplateDao() { + List<VmTemplate> expectedVmTemplate = Collections.singletonList(vmTemplate); + VmTemplateDAO vmTemplateDao = mock(VmTemplateDAO.class); + when(vmTemplateDao.getAllForNetwork(networkId)).thenReturn(expectedVmTemplate); + when(getDbFacadeMockInstance().getVmTemplateDao()).thenReturn(vmTemplateDao); + } + + private void setupVmNetworkInterfaceDao() { + List<VmNetworkInterface> expectedVmNetworkInterface = Collections.singletonList(vmNetworkInterface); + VmNetworkInterfaceDAO vmNetworkInterfaceDaoMock = mock(VmNetworkInterfaceDAO.class); + when(vmNetworkInterfaceDaoMock.getAllForTemplatesByNetwork(networkId)).thenReturn(expectedVmNetworkInterface); + when(getDbFacadeMockInstance().getVmNetworkInterfaceDao()).thenReturn(vmNetworkInterfaceDaoMock); + } +} 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 d9d7429..1ca13a7 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 @@ -57,6 +57,7 @@ GetVdsAndNetworkInterfacesByNetworkId, GetVdsWithoutNetwork, GetVmsAndNetworkInterfacesByNetworkId, + GetVmTemplatesAndNetworkInterfacesByNetworkId, // VdsGroups GetVdsCertificateSubjectByVdsId(VdcQueryAuthType.User), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAO.java index 171d06f..3e46584 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAO.java @@ -63,4 +63,14 @@ * @return the list of VmNetworkInterfaces */ List<VmNetworkInterface> getAllForNetwork(Guid networkId); + + /** + * Retrieves the VmNetworkInterfaces that the given network is attached to, while referring to + * the VmTemplateIds + * + * @param networkId + * the network + * @return the list of VmNetworkInterfaces + */ + List<VmNetworkInterface> getAllForTemplatesByNetwork(Guid networkId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAODbFacadeImpl.java index 58c7d09..5ed06cf 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAODbFacadeImpl.java @@ -130,4 +130,10 @@ return getCallsHandler().executeReadList("GetVmInterfacesByNetworkId", mapper, getCustomMapSqlParameterSource().addValue("network_id", networkId)); } + + @Override + public List<VmNetworkInterface> getAllForTemplatesByNetwork(Guid networkId) { + return getCallsHandler().executeReadList("GetVmTemplateInterfacesByNetworkId", + mapper, getCustomMapSqlParameterSource().addValue("network_id", networkId)); + } } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java index f29e762..010c7a8 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAO.java @@ -94,4 +94,13 @@ * @return A {@link Map} from the image's plug status to a {@link List} of the template associated with it. */ Map<Boolean, VmTemplate> getAllForImage(Guid imageId); + + /** + * Retrieves all VmTemplates that have a Network Interface that the given Network is attached to. + * + * @param networkId + * the network id + * @return the list of VmTemplates + */ + List<VmTemplate> getAllForNetwork(Guid networkId); } diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java index 32a0ad0..4c355ac 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmTemplateDAODbFacadeImpl.java @@ -176,6 +176,14 @@ .addValue("user_id", userId).addValue("action_group_id", actionGroup.getId())); } + @Override + public List<VmTemplate> getAllForNetwork(Guid id) { + return getCallsHandler().executeReadList("GetVmTemplatesByNetworkId", + VMTemplateRowMapper.instance, + getCustomMapSqlParameterSource() + .addValue("network_id", id)); + } + private final static class VMTemplateRowMapper extends AbstractVmRowMapper<VmTemplate> { public static final VMTemplateRowMapper instance = new VMTemplateRowMapper(); 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 d5f3622..fcd7356 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 @@ -247,4 +247,16 @@ * </ul> */ protected static final Guid NETWORK_NO_CLUSTERS_ATTACHED = new Guid("58d5c1c6-cb15-4832-b2a4-023770607190"); + + /** + * Predefined VmNetworkInterface with the following properties : + * <ul> + * <li>network_name: engine</li> + * <li>vm_guid: 77296e00-0cad-4e5a-9299-008a7b6f4355</li> + * <li>vmt_guid: 1b85420c-b84c-4f29-997e-0eb674b40b79</li> + * <li>mac_addr: 00:1a:4a:16:87:d9</li> + * <li>name: nic1</li> + * </ul> + */ + protected static final Guid VM_NETWORK_INTERFACE = new Guid("e2817b12-f873-4046-b0da-0098293c14fd"); } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAOTest.java index 05fcf67..a2e3bd3 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmNetworkInterfaceDAOTest.java @@ -18,7 +18,6 @@ public class VmNetworkInterfaceDAOTest extends BaseDAOTestCase { private static final Guid TEMPLATE_ID = new Guid("1b85420c-b84c-4f29-997e-0eb674b40b79"); - private static final Guid INTERFACE_ID = new Guid("e2817b12-f873-4046-b0da-0098293c14fd"); private static final Guid VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355"); protected static final Guid PRIVILEGED_USER_ID = new Guid("9bf7c640-b620-456f-a550-0348f366544b"); @@ -28,6 +27,7 @@ private VmDeviceDAO vmDevicesDao; private VmNetworkStatisticsDAO StatsDao; + private VmNetworkInterface existingVmInterface; private VmNetworkInterface newVmInterface; private VmDevice newVmDevice = new VmDevice(); @@ -38,6 +38,7 @@ dao = prepareDAO(dbFacade.getVmNetworkInterfaceDao()); vmDevicesDao = prepareDAO(dbFacade.getVmDeviceDao()); StatsDao = prepareDAO(dbFacade.getVmNetworkStatisticsDao()); + existingVmInterface = dao.get(FixturesTool.VM_NETWORK_INTERFACE); newVmInterface = new VmNetworkInterface(); newVmInterface.setStatistics(new VmNetworkStatistics()); @@ -72,10 +73,10 @@ */ @Test public void testGet() { - VmNetworkInterface result = dao.get(INTERFACE_ID); + VmNetworkInterface result = dao.get(FixturesTool.VM_NETWORK_INTERFACE); assertNotNull(result); - assertEquals(INTERFACE_ID, result.getId()); + assertEquals(FixturesTool.VM_NETWORK_INTERFACE, result.getId()); } /** @@ -238,11 +239,12 @@ */ @Test public void testRemove() { - assertNotNull(dao.get(INTERFACE_ID)); + assertNotNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE)); + dao.remove(FixturesTool.VM_NETWORK_INTERFACE); + assertNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE)); - dao.remove(INTERFACE_ID); - - assertNull(dao.get(INTERFACE_ID)); + dao.save(existingVmInterface); + assertNotNull(dao.get(FixturesTool.VM_NETWORK_INTERFACE)); } @Test(expected = NotImplementedException.class) @@ -250,6 +252,12 @@ dao.getAll(); } + @Test + public void testGetAllForTemplatesByNetwork() throws Exception { + List<VmNetworkInterface> result = dao.getAllForTemplatesByNetwork(FixturesTool.NETWORK_ENGINE); + assertEquals(existingVmInterface, result.get(0)); + } + private void assertCorrectResultForTemplate(List<VmNetworkInterface> result) { assertNotNull(result); assertFalse(result.isEmpty()); diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java index 6229938..85fb002 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmTemplateDAOTest.java @@ -260,6 +260,15 @@ assertGetResult(result); } + /** + * Asserts that the correct template is returned for the given network id + */ + @Test + public void testGetAllForNetwork() { + List<VmTemplate> result = dao.getAllForNetwork(FixturesTool.NETWORK_ENGINE); + assertEquals(existingTemplate, result.get(0)); + } + private static void assertGetResult(VmTemplate result) { assertNotNull(result); assertEquals(EXISTING_TEMPLATE_ID, result.getId()); -- To view, visit http://gerrit.ovirt.org/8707 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ifc4ac77abf598b6e1fff1fa4318b39c9f3af5453 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Muli Salem <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
