package org.ovirt.engine.core.dao; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.ovirt.engine.core.dao.FixturesTool.IMAGE_ID; import static org.ovirt.engine.core.dao.FixturesTool.TEMPLATE_IMAGE_ID; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Set; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.VmEntityType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.compat.Guid; /** * {@code DiskImageDaoTest} provides unit tests to validate {@link DiskImageDao}. */ public class DiskImageDaoTest extends BaseReadDaoTestCase<Guid, DiskImage, DiskImageDao> { private static final Guid ANCESTOR_IMAGE_ID = new Guid("c9a559d9-8666-40d1-9967-759502b19f0b"); private static final Guid PARENT_SNAPSHOT_ID = new Guid("c9a559d9-8666-40d1-9967-759502b19f0c"); private static final Guid CHILD_SNAPSHOT_ID = new Guid("c9a559d9-8666-40d1-9967-759502b19f0d"); private DiskImage existingTemplate; private static final int TOTAL_DISK_IMAGES = 7; private BaseDiskDao diskDao; @Override protected Guid generateNonExistingId() { return Guid.newGuid(); } @Override protected int getEntitiesTotalCount() { return TOTAL_DISK_IMAGES; } @Override protected DiskImageDao prepareDao() { return dbFacade.getDiskImageDao(); } @Override protected Guid getExistingEntityId() { return IMAGE_ID; } @Override public void setUp() throws Exception { super.setUp(); diskDao = dbFacade.getBaseDiskDao(); existingTemplate = dao.get(TEMPLATE_IMAGE_ID); } @Test @Override public void testGet() { DiskImage result = dao.get(existingEntity.getImageId()); assertNotNull(result); assertEquals(existingEntity, result); } @Override @Test(expected = UnsupportedOperationException.class) public void testGetAll() { super.testGetAll(); } @Test public void testGetAncestorForSon() { DiskImage result = dao.getAncestor(existingEntity.getImageId()); assertNotNull(result); assertEquals(ANCESTOR_IMAGE_ID, result.getImageId()); } @Test public void testGetAncestorForFather() { DiskImage result = dao.getAncestor(ANCESTOR_IMAGE_ID); assertNotNull(result); assertEquals(ANCESTOR_IMAGE_ID, result.getImageId()); } @Test public void getDiskSnapshotForVmSnapshotSameSnapshot() { DiskImage result = dao.getDiskSnapshotForVmSnapshot(existingEntity.getId(), existingEntity.getVmSnapshotId()); assertNotNull(result); assertEquals(existingEntity.getId(), result.getId()); assertEquals(existingEntity.getVmSnapshotId(), result.getVmSnapshotId()); } @Test public void getDiskSnapshotForVmSnapshotDifferentSnapshot() { DiskImage result1 = dao.getDiskSnapshotForVmSnapshot(existingEntity.getId(), FixturesTool.EXISTING_SNAPSHOT_ID); DiskImage result2 = dao.getDiskSnapshotForVmSnapshot(existingEntity.getId(), FixturesTool.EXISTING_SNAPSHOT_ID2); assertNotNull(result1); assertNotNull(result2); assertEquals(result1.getId(), result2.getId()); assertNotSame("Images should be different", result1.getImageId(), result2.getImageId()); assertNotSame("Vm snapshots should be different", result1.getVmSnapshotId(), result2.getVmSnapshotId()); } @Test public void testGetTemplate() { DiskImage result = dao.get(TEMPLATE_IMAGE_ID); assertNotNull(result); assertEquals(existingTemplate, result); } @Test public void testGetImagesWithNoDisk() { List<DiskImage> result = dao.getImagesWithNoDisk(FixturesTool.VM_RHEL5_POOL_57); assertNotNull(result); assertFalse(result.isEmpty()); for (DiskImage image : result) { assertFalse(diskDao.exists(image.getId())); } } @Test public void testGetDiskSnapshotForVmSnapshot() { DiskImage result = dao.getDiskSnapshotForVmSnapshot(FixturesTool.IMAGE_GROUP_ID, FixturesTool.EXISTING_SNAPSHOT_ID); assertNotNull(result); assertEquals(FixturesTool.IMAGE_GROUP_ID, result.getId()); assertEquals(FixturesTool.EXISTING_SNAPSHOT_ID, result.getVmSnapshotId()); } @Test public void testGetDiskSnapshotForVmSnapshotNonExisting() { DiskImage result = dao.getDiskSnapshotForVmSnapshot(Guid.Empty, FixturesTool.EXISTING_SNAPSHOT_ID); assertNull(result); } @Test public void testGetImagesWithNoDiskReturnsEmptyList() { List<DiskImage> result = dao.getImagesWithNoDisk(Guid.newGuid()); assertNotNull(result); assertTrue(result.isEmpty()); } @Test public void testGetAllSnapshotsForLeaf() { List<DiskImage> images = dao.getAllSnapshotsForLeaf(FixturesTool.IMAGE_ID); assertFalse(images.isEmpty()); assertTrue(images.stream().noneMatch(d -> d.getVmEntityType() == VmEntityType.TEMPLATE)); } @Test public void testGetAllSnapshotsForLeafInvalidGuid() { List<DiskImage> images = dao.getAllSnapshotsForLeaf(Guid.newGuid()); assertTrue(images.isEmpty()); } @Test public void testEmptyGetAllDisksByDiskProfiles() { List<DiskImage> diskImages = dao.getAllForDiskProfiles(Collections.singletonList(Guid.newGuid())); assertNotNull(diskImages); assertTrue(diskImages.isEmpty()); } @Test public void testGetAllDisksByDiskProfiles() { List<DiskImage> diskImages = dao.getAllForDiskProfiles( Arrays.asList(FixturesTool.DISK_PROFILE_1, FixturesTool.DISK_PROFILE_2)); assertNotNull(diskImages); assertEquals(6, diskImages.size()); } @Test public void testGetAllSnapshotsForParents() { Set<DiskImage> childSnapshots = dao .getAllSnapshotsForParents(Collections.singletonList(PARENT_SNAPSHOT_ID)); DiskImage diskImage = childSnapshots .stream() .findFirst() .get(); assertNotNull(childSnapshots); assertEquals(1, childSnapshots.size()); assertEquals(CHILD_SNAPSHOT_ID, diskImage.getImageId()); } }