Omer Frenkel has uploaded a new change for review.

Change subject: core: add query to get vm devices
......................................................................

core: add query to get vm devices

allow frontend to query for vm devices

http://www.ovirt.org/Features/Expose_VM_Devices

Change-Id: If29e9793b6424e25172fea4d0f461c5dd408e5bd
Signed-off-by: Omer Frenkel <[email protected]>
---
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmDevicesForVmQuery.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/VmDeviceDAO.java
M 
backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
M 
backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDeviceDAOTest.java
M packaging/dbscripts/vm_device_sp.sql
6 files changed, 72 insertions(+), 6 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/39794/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmDevicesForVmQuery.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmDevicesForVmQuery.java
new file mode 100644
index 0000000..7ce95bb
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmDevicesForVmQuery.java
@@ -0,0 +1,17 @@
+package org.ovirt.engine.core.bll;
+
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+
+public class GetVmDevicesForVmQuery<P extends IdQueryParameters> extends 
QueriesCommandBase<P> {
+    public GetVmDevicesForVmQuery(P parameters) {
+        super(parameters);
+    }
+
+    @Override
+    protected void executeQueryCommand() {
+        setReturnValue(getDbFacade().getVmDeviceDao().getVmDeviceByVmId(
+                getParameters().getId(),
+                getUserID(),
+                getParameters().isFiltered()));
+    }
+}
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 f858899..06bbad8 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
@@ -30,6 +30,7 @@
     GetVmNextRunConfiguration(VdcQueryAuthType.User),
     GetVmChangedFieldsForNextRun(VdcQueryAuthType.User),
     GetVmsFromExternalProvider,
+    GetVmDevicesForVm(VdcQueryAuthType.User),
 
     // Vds queries
     GetVdsByVdsId,
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
index ef90a84..0b97861 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAO.java
@@ -19,6 +19,8 @@
 
     List<VmDevice> getVmDeviceByVmId(Guid vmId);
 
+    List<VmDevice> getVmDeviceByVmId(Guid vmId, Guid userID, boolean 
isFiltered);
+
     List<VmDevice> getVmDevicesByDeviceId(Guid deviceId, Guid vmId);
 
     List<VmDevice> getVmDeviceByVmIdAndType(Guid vmId, VmDeviceGeneralType 
type);
diff --git 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
index 59c22a7..6de81d4 100644
--- 
a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
+++ 
b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/VmDeviceDAODbFacadeImpl.java
@@ -69,8 +69,15 @@
 
     @Override
     public List<VmDevice> getVmDeviceByVmId(Guid vmId) {
+        return getVmDeviceByVmId(vmId, null, false);
+    }
+
+    @Override
+    public List<VmDevice> getVmDeviceByVmId(Guid vmId, Guid userID, boolean 
isFiltered) {
         MapSqlParameterSource parameterSource = 
getCustomMapSqlParameterSource()
-                .addValue("vm_id", vmId);
+                .addValue("vm_id", vmId)
+                .addValue("user_id", userID)
+                .addValue("is_filtered", isFiltered);
 
         return getCallsHandler().executeReadList("GetVmDeviceByVmId",
                 createEntityRowMapper(), parameterSource);
diff --git 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDeviceDAOTest.java
 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDeviceDAOTest.java
index 5825c47..43aae10 100644
--- 
a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDeviceDAOTest.java
+++ 
b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/VmDeviceDAOTest.java
@@ -27,7 +27,8 @@
     private static final Guid EXISTING_VM_ID = new 
Guid("77296e00-0cad-4e5a-9299-008a7b6f4355");
     private static final Guid EXISTING_DEVICE_ID = new 
Guid("e14ed6f0-3b12-11e1-b614-63d00126418d");
     private static final int TOTAL_DEVICES = 12;
-    private static final int TOTAL_DEVICES_FOR_EXISTING_VM = 5;
+    private static final int TOTAL_DISK_DEVICES_FOR_EXISTING_VM = 5;
+    private static final int TOTAL_DEVICES_FOR_EXISTING_VM = 7;
 
     @Override
     protected VmDeviceId generateNonExistingId() {
@@ -114,11 +115,21 @@
     }
 
     /**
-     * Asserts all the devices are present in a result of {@link 
VmDeviceDAO#getVmDeviceByVmIdTypeAndDevice(Guid, String, String)
+     * Asserts all the disk devices are present in a result of {@link 
VmDeviceDAO#getVmDeviceByVmIdTypeAndDevice(Guid, String, String)
      * @param devices The result to check
      */
     private static void 
assertGetVMDeviceByIdTypeAndDeviceFullResult(List<VmDevice> devices) {
-        assertEquals("there should only be " + TOTAL_DEVICES_FOR_EXISTING_VM + 
" disks", TOTAL_DEVICES_FOR_EXISTING_VM, devices.size());
+        assertEquals("there should only be " + 
TOTAL_DISK_DEVICES_FOR_EXISTING_VM + " disks",
+                TOTAL_DISK_DEVICES_FOR_EXISTING_VM, devices.size());
+    }
+
+    /**
+     * Asserts all the devices are present in a result of {@link 
VmDeviceDAO#getVmDeviceByVmId(Guid, String, String)
+     * @param devices The result to check
+     */
+    private static void assertGetVMDeviceByIdResult(List<VmDevice> devices) {
+        assertEquals("there should only be " + TOTAL_DEVICES_FOR_EXISTING_VM + 
" devices",
+                TOTAL_DEVICES_FOR_EXISTING_VM, devices.size());
     }
 
     @Test
@@ -212,4 +223,28 @@
         assertEquals(vmDevice.getBootOrder(), newBootOrderValue);
     }
 
+    @Test
+    public void testGetVmDeviceByVmIdFilteringSetToFlase() {
+        List<VmDevice> devices =
+                dao.getVmDeviceByVmId(EXISTING_VM_ID);
+        assertGetVMDeviceByIdResult(devices);
+    }
+
+    @Test
+    public void testGetVmDeviceByVmIdFilteringWithPermissions() {
+        List<VmDevice> devices =
+                dao.getVmDeviceByVmId(EXISTING_VM_ID,
+                        PRIVILEGED_USER_ID,
+                        true);
+        assertGetVMDeviceByIdResult(devices);
+    }
+
+    @Test
+    public void testGetVmDeviceByVmIdFilteringWithoutPermissions() {
+        List<VmDevice> devices =
+                dao.getVmDeviceByVmId(EXISTING_VM_ID,
+                        UNPRIVILEGED_USER_ID,
+                        true);
+        assertTrue("A user without any permissions should not see any 
devices", devices.isEmpty());
+    }
 }
diff --git a/packaging/dbscripts/vm_device_sp.sql 
b/packaging/dbscripts/vm_device_sp.sql
index 19212f9..afc74c7 100644
--- a/packaging/dbscripts/vm_device_sp.sql
+++ b/packaging/dbscripts/vm_device_sp.sql
@@ -171,14 +171,18 @@
 END; $procedure$
 LANGUAGE plpgsql;
 
-Create or replace FUNCTION GetVmDeviceByVmId(v_vm_id UUID)
+Create or replace FUNCTION GetVmDeviceByVmId(v_vm_id UUID, v_user_id UUID, 
v_is_filtered BOOLEAN)
 RETURNS SETOF vm_device_view STABLE
 AS $procedure$
 BEGIN
     RETURN QUERY
     SELECT *
     FROM   vm_device_view
-    WHERE  vm_id = v_vm_id order by device_id;
+    WHERE  vm_id = v_vm_id
+    AND (NOT v_is_filtered OR EXISTS (SELECT 1
+                                      FROM   user_vm_permissions_view
+                                      WHERE  user_id = v_user_id AND entity_id 
= v_vm_id))
+    order by device_id;
 END; $procedure$
 LANGUAGE plpgsql;
 


-- 
To view, visit https://gerrit.ovirt.org/39794
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If29e9793b6424e25172fea4d0f461c5dd408e5bd
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Omer Frenkel <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to