package org.ovirt.engine.core.dao; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import java.util.Arrays; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.stream.Collectors; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.storage.BaseDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.compat.Guid; public class DiskDaoTest extends BaseReadDaoTestCase<Guid, Disk, DiskDao> { private static final int TOTAL_DISK_IMAGES = 8; @Override protected Guid getExistingEntityId() { return FixturesTool.DISK_ID; } @Override protected DiskDao prepareDao() { return dbFacade.getDiskDao(); } @Override protected Guid generateNonExistingId() { return Guid.Empty; } @Override protected int getEntitiesTotalCount() { return TOTAL_DISK_IMAGES + DiskLunMapDaoTest.TOTAL_DISK_LUN_MAPS; } @Override @Test public void testGet() { Disk result = dao.get(getExistingEntityId()); assertNotNull(result); assertEquals(getExistingEntityId().toString(), result.getId().toString()); } @Test public void testGetFilteredWithPermissions() { Disk result = dao.get(getExistingEntityId(), PRIVILEGED_USER_ID, true); assertNotNull(result); assertEquals(getExistingEntityId().toString(), result.getId().toString()); } @Test public void testGetFilteredWithoutPermissions() { Disk result = dao.get(getExistingEntityId(), UNPRIVILEGED_USER_ID, true); assertNull(result); } @Test public void testGetFilteredWithoutPermissionsNoFilter() { Disk result = dao.get(getExistingEntityId(), UNPRIVILEGED_USER_ID, false); assertNotNull(result); assertEquals(getExistingEntityId().toString(), result.getId().toString()); } @Test public void testGetFilteredWithPermissionsNoFilter() { Disk result = dao.get(getExistingEntityId(), PRIVILEGED_USER_ID, false); assertNotNull(result); assertEquals(getExistingEntityId().toString(), result.getId().toString()); } @Test public void testGetAllForVMFilteredWithPermissions() { // test user 3 - has permissions List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57, PRIVILEGED_USER_ID, true); assertFullGetAllForVMResult(disks); } @Test public void testGetAllForVMFilteredWithPermissionsNoPermissions() { // test user 2 - hasn't got permissions List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57, UNPRIVILEGED_USER_ID, true); assertTrue("VM should have no disks viewable to the user", disks.isEmpty()); } @Test public void testGetAllForVMFilteredWithPermissionsNoPermissionsAndNoFilter() { // test user 2 - hasn't got permissions, but no filtering was requested List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57, UNPRIVILEGED_USER_ID, false); assertFullGetAllForVMResult(disks); } @Test public void testGetPluggedForVMFilteredWithPermissions() { // test user 3 - has permissions List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57, true, PRIVILEGED_USER_ID, true); assertPluggedGetAllForVMResult(disks); } @Test public void testGetPluggedForVMFilteredWithPermissionsNoPermissions() { // test user 2 - hasn't got permissions List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57, true, UNPRIVILEGED_USER_ID, true); assertTrue("VM should have no disks viewable to the user", disks.isEmpty()); } @Test public void testGetPluggedForVMFilteredWithPermissionsNoPermissionsAndNoFilter() { // test user 2 - hasn't got permissions, but no filtering was requested List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57, true, UNPRIVILEGED_USER_ID, false); assertPluggedGetAllForVMResult(disks); } @Test public void testGetAllForVM() { List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57); assertFullGetAllForVMResult(disks); } @Test public void testGetAllForVMs() { Map<Guid, List<Disk>> vmDisksMap = dao.getAllForVms(Collections.singletonList(FixturesTool.VM_RHEL5_POOL_57)); // TODO - add other VM assertTrue(vmDisksMap.containsKey(FixturesTool.VM_RHEL5_POOL_57)); assertFullGetAllForVMResult(vmDisksMap.get(FixturesTool.VM_RHEL5_POOL_57)); } @Test public void testGetAllAttachableDisksByPoolIdNoDisks() { List<Disk> result = dao.getAllAttachableDisksByPoolId(FixturesTool.STORAGE_POOL_NFS, null, null, false); assertTrue(result.isEmpty()); } @Test public void testGetAllAttachableDisksByPoolIdNull() { List<Disk> result = dao.getAllAttachableDisksByPoolId(null, null, null, false); assertFullGetAllAttachableDisksByPoolId(result); } @Test public void testGetAllAttachableDisksByPoolWithPermissions() { List<Disk> result = dao.getAllAttachableDisksByPoolId(null, null, PRIVILEGED_USER_ID, true); assertFullGetAllAttachableDisksByPoolId(result); } @Test public void testGetAllAttachableDisksByPoolWithNoPermissions() { List<Disk> result = dao.getAllAttachableDisksByPoolId(null, null, UNPRIVILEGED_USER_ID, true); assertTrue(result.isEmpty()); } @Test public void testGetAllAttachableDisksByPoolWithNoPermissionsFilterDisabled() { List<Disk> result = dao.getAllAttachableDisksByPoolId(null, null, UNPRIVILEGED_USER_ID, false); assertFullGetAllAttachableDisksByPoolId(result); } @Test public void testGetVmBootActiveDisk() { Disk bootDisk = dao.getVmBootActiveDisk(FixturesTool.VM_RHEL5_POOL_57); assertNotNull("VM should have a boot disk attached", bootDisk); assertEquals("Wrong boot disk for VM", FixturesTool.BOOTABLE_DISK_ID, bootDisk.getId()); } @Test public void testGetVmPartialData() { List<Disk> disks = dao.getAllForVm(FixturesTool.VM_RHEL5_POOL_57, PRIVILEGED_USER_ID, true); assertFullGetAllForVMResult(disks); assertEquals("New Description", disks.get(0).getDiskDescription()); assertNotNull(disks.get(0).getDiskAlias()); } @Test public void testGetAllFromDisksByDiskStorageType() { List<Disk> disks = dao.getAllFromDisksByDiskStorageType(DiskStorageType.CINDER, PRIVILEGED_USER_ID, true); assertEquals("We should have one disk", 1, disks.size()); } /** * Asserts the result of {@link DiskDao#getAllForVm(Guid)} contains the correct disks. * @param disks * The result to check */ private static void assertFullGetAllForVMResult(List<Disk> disks) { assertEquals("VM should have six disks", 6, disks.size()); } /** * Asserts the result of {@link DiskDao#getAllForVm(Guid)} contains the correct plugged disks. * @param disks * The result to check */ private static void assertPluggedGetAllForVMResult(List<Disk> disks) { Integer numberOfDisks = 5; assertEquals("VM should have " + numberOfDisks + " plugged disk", numberOfDisks.intValue(), disks.size()); } /** * Asserts the result of {@link DiskDao#getAllAttachableDisksByPoolId} contains the floating disk. * @param disks * The result to check */ private static void assertFullGetAllAttachableDisksByPoolId(List<Disk> disks) { assertEquals("There should be only four attachable disks", 4, disks.size()); Set<Guid> expectedFloatingDiskIds = new HashSet<>(Arrays.asList(FixturesTool.FLOATING_DISK_ID, FixturesTool.FLOATING_LUN_ID, FixturesTool.FLOATING_CINDER_DISK_ID)); Set<Guid> actualFloatingDiskIds = disks.stream().map(BaseDisk::getId).collect(Collectors.toSet()); assertEquals("Wrong attachable disks", expectedFloatingDiskIds, actualFloatingDiskIds); } }