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

Reply via email to