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

Reply via email to