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

Reply via email to