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.assertNull; import static org.junit.Assert.assertTrue; import java.util.List; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.DiskImageDynamic; import org.ovirt.engine.core.common.businessentities.DiskInterface; import org.ovirt.engine.core.common.businessentities.DiskType; import org.ovirt.engine.core.common.businessentities.VolumeFormat; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.businessentities.image_vm_map; import org.ovirt.engine.core.common.businessentities.image_vm_pool_map; import org.ovirt.engine.core.common.businessentities.stateless_vm_image_map; import org.ovirt.engine.core.compat.Guid; /** * <code.DiskImageDAOTest</code> provides unit tests to validate {@link DiskImageDAO}. * * */ public class DiskImageDAOTest extends BaseGenericDaoTestCase<Guid, DiskImage, DiskImageDAO> { private static final Guid EXISTING_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4355"); private static final Guid FREE_VM_ID = new Guid("77296e00-0cad-4e5a-9299-008a7b6f4354"); private static final Guid EXISTING_IMAGE_ID = new Guid("42058975-3d5e-484a-80c1-01c31207f578"); private static final Guid FREE_IMAGE_ID = new Guid("42058975-3d5e-484a-80c1-01c31207f579"); private static final Guid EXISTING_IMAGE_DISK_TEMPLATE = new Guid("42058975-3d5e-484a-80c1-01c31207f578"); private static final Guid ANCESTOR_IMAGE_ID = new Guid("c9a559d9-8666-40d1-9967-759502b19f0b"); private static final int TOTAL_DISK_IMAGES = 4; private DiskImageDynamicDAO diskImageDynamicDao; private DiskImage newImage; private image_vm_pool_map existingVmPoolMapping; private image_vm_pool_map newImageVmPoolMapping; private stateless_vm_image_map existingStatelessDiskImageMap; private stateless_vm_image_map newStatelessVmImageMap; @Override protected Guid generateNonExistingId() { return Guid.NewGuid(); } @Override protected int getEneitiesTotalCount() { return TOTAL_DISK_IMAGES; } @Override protected DiskImage generateNewEntity() { return newImage; } @Override protected void updateExistingEntity() { existingEntity.setdescription("This is a new description"); } @Override protected DiskImageDAO prepareDao() { return prepareDAO(dbFacade.getDiskImageDAO()); } @Override protected Guid getExistingEntityId() { return EXISTING_IMAGE_ID; } @Override public void setUp() throws Exception { super.setUp(); diskImageDynamicDao = prepareDAO(dbFacade.getDiskImageDynamicDAO()); existingVmPoolMapping = dao.getImageVmPoolMapByImageId(EXISTING_IMAGE_ID); newImage = new DiskImage(); newImage.setactive(true); newImage.setvm_guid(EXISTING_VM_ID); newImage.setit_guid(EXISTING_IMAGE_DISK_TEMPLATE); newImage.setId(Guid.NewGuid()); newImage.setinternal_drive_mapping("4"); newImage.setvolume_format(VolumeFormat.COW); newImage.setvolume_type(VolumeType.Sparse); newImage.setdisk_interface(DiskInterface.IDE); newImage.setdisk_type(DiskType.Data); newImage.setimage_group_id(Guid.NewGuid()); newImageVmPoolMapping = new image_vm_pool_map(FREE_IMAGE_ID, "z", FREE_VM_ID); existingStatelessDiskImageMap = dao.getStatelessVmImageMapForImageId(existingEntity.getId()); newStatelessVmImageMap = new stateless_vm_image_map(FREE_IMAGE_ID, "q", FREE_VM_ID); } /** * Ensures that saving a disk image works as expected. */ @Test @Override public void testSave() { dao.save(newImage); // TODO this call is only necessary when we have a DbFacade implementation if (dao instanceof BaseDAODbFacade) { dbFacade.getImageVmMapDAO().save(new image_vm_map(true, newImage.getId(), EXISTING_VM_ID)); } DiskImageDynamic dynamic = new DiskImageDynamic(); dynamic.setId(newImage.getId()); diskImageDynamicDao.save(dynamic); DiskImageDynamic dynamicFromDB = diskImageDynamicDao.get(dynamic.getId()); assertNotNull(dynamicFromDB); DiskImage result = dao.get(newImage.getId()); assertNotNull(result); assertEquals(newImage, result); image_vm_map mapping = dbFacade.getImageVmMapDAO().getByImageId(result.getId()); assertNotNull(mapping); assertTrue(mapping.getactive()); assertEquals(newImage.getId(), mapping.getimage_id()); assertEquals(newImage.getvm_guid(), mapping.getvm_id()); } @Test public void testGetImageVmPoolMapByImageIdWithWrongImage() { image_vm_pool_map result = dao.getImageVmPoolMapByImageId(Guid.NewGuid()); assertNull(result); } @Test public void testGetImageVmPoolMapByImageId() { image_vm_pool_map result = dao.getImageVmPoolMapByImageId(EXISTING_IMAGE_ID); assertNotNull(result); assertEquals(existingVmPoolMapping, result); } @Test public void testAddImageVmPoolMap() { dao.addImageVmPoolMap(newImageVmPoolMapping); image_vm_pool_map result = dao.getImageVmPoolMapByImageId(newImageVmPoolMapping.getimage_guid()); assertNotNull(result); assertEquals(newImageVmPoolMapping, result); } @Test public void testRemoveImageVmPoolMap() { dao.removeImageVmPoolMap(existingVmPoolMapping.getimage_guid()); image_vm_pool_map result = dao.getImageVmPoolMapByImageId(existingVmPoolMapping.getimage_guid()); assertNull(result); } @Test public void testGetImageVmPoolMapByVmId() { List<image_vm_pool_map> result = dao.getImageVmPoolMapByVmId(EXISTING_VM_ID); assertNotNull(result); assertFalse(result.isEmpty()); for (image_vm_pool_map map : result) { assertEquals(EXISTING_VM_ID, map.getvm_guid()); } } @Test public void testGetStatelessDiskImageForImageId() { stateless_vm_image_map result = dao.getStatelessVmImageMapForImageId(EXISTING_IMAGE_ID); assertNotNull(result); assertEquals(existingStatelessDiskImageMap, result); } @Test public void testAddStatelessDiskImage() { dao.addStatelessVmImageMap(newStatelessVmImageMap); stateless_vm_image_map result = dao.getStatelessVmImageMapForImageId(FREE_IMAGE_ID); assertNotNull(result); assertEquals(newStatelessVmImageMap, result); } @Test public void testRemoveStatelessDiskImage() { dao.removeStatelessVmImageMap(existingStatelessDiskImageMap.getimage_guid()); stateless_vm_image_map result = dao.getStatelessVmImageMapForImageId(EXISTING_IMAGE_ID); assertNull(result); } @Test public void testGetAllStatelessDiskImagesForVm() { List<stateless_vm_image_map> result = dao.getAllStatelessVmImageMapsForVm(EXISTING_VM_ID); assertNotNull(result); assertFalse(result.isEmpty()); for (stateless_vm_image_map mapping : result) { assertEquals(EXISTING_VM_ID, mapping.getvm_guid()); } } @Test public void testGetAncestorForSon() { DiskImage result = dao.getAncestor(existingEntity.getId()); assertNotNull(result); assertEquals(ANCESTOR_IMAGE_ID, result.getId()); } @Test public void testGetAncestorForFather() { DiskImage result = dao.getAncestor(ANCESTOR_IMAGE_ID); assertNotNull(result); assertEquals(ANCESTOR_IMAGE_ID, result.getId()); } }