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
