package org.ovirt.engine.core.dao; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNotSame; import java.util.List; import org.junit.Test; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.Image; import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; import org.ovirt.engine.core.common.businessentities.storage.QcowCompat; import org.ovirt.engine.core.common.businessentities.storage.VolumeClassification; import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; import org.ovirt.engine.core.common.businessentities.storage.VolumeType; import org.ovirt.engine.core.compat.Guid; /** * {@code DiskImageDaoTest} provides unit tests to validate {@link ImageDao}. */ public class ImageDaoTest extends BaseGenericDaoTestCase<Guid, Image, ImageDao> { private static final Guid EXISTING_IMAGE_ID = new Guid("42058975-3d5e-484a-80c1-01c31207f578"); private static final Guid EXISTING_IMAGE_DISK_TEMPLATE_ID = new Guid("52058975-3d5e-484a-80c1-01c31207f578"); private static final Guid EXISTING_SNAPSHOT_ID = new Guid("a7bb24df-9fdf-4bd6-b7a9-f5ce52da0f89"); private static final int TOTAL_IMAGES = 13; private Image newImage; @Override protected Guid generateNonExistingId() { return Guid.newGuid(); } @Override protected int getEntitiesTotalCount() { return TOTAL_IMAGES; } @Override protected Image generateNewEntity() { return newImage; } @Override protected void updateExistingEntity() { existingEntity.setVolumeType(VolumeType.Preallocated); existingEntity.setVolumeFormat(VolumeFormat.RAW); } @Override protected ImageDao prepareDao() { return dbFacade.getImageDao(); } @Override protected Guid getExistingEntityId() { return EXISTING_IMAGE_ID; } @Override public void setUp() throws Exception { super.setUp(); newImage = new Image(); newImage.setActive(true); newImage.setVolumeClassification(VolumeClassification.Volume); newImage.setTemplateImageId(EXISTING_IMAGE_DISK_TEMPLATE_ID); newImage.setSnapshotId(EXISTING_SNAPSHOT_ID); newImage.setId(Guid.newGuid()); newImage.setVolumeFormat(VolumeFormat.COW); newImage.setQcowCompat(QcowCompat.QCOW2_V3); newImage.setVolumeType(VolumeType.Sparse); newImage.setDiskId(Guid.newGuid()); } @Test public void testUpdateStatus() { dao.updateStatus(EXISTING_IMAGE_ID, ImageStatus.LOCKED); Image imageFromDb = dao.get(EXISTING_IMAGE_ID); assertNotNull(imageFromDb); assertEquals(ImageStatus.LOCKED, imageFromDb.getStatus()); } @Test public void testUpdateImageVmSnapshotId() { Guid guid = Guid.newGuid(); dao.updateImageVmSnapshotId(EXISTING_IMAGE_ID, guid); Image imageFromDb = dao.get(EXISTING_IMAGE_ID); assertNotNull(imageFromDb); assertEquals("Image snapshot id wasn't updated properly", guid, imageFromDb.getSnapshotId()); } @Test public void updateStatusOfImagesByImageGroupId() { Image image = dao.get(EXISTING_IMAGE_ID); List<DiskImage> snapshots = dbFacade.getDiskImageDao().getAllSnapshotsForImageGroup(image.getDiskId()); assertNotEquals(1, snapshots.size()); for (DiskImage diskImage : snapshots) { assertNotSame(ImageStatus.LOCKED, diskImage.getImageStatus()); } dao.updateStatusOfImagesByImageGroupId(image.getDiskId(), ImageStatus.LOCKED); snapshots = dbFacade.getDiskImageDao().getAllSnapshotsForImageGroup(image.getDiskId()); for (DiskImage diskImage : snapshots) { assertEquals(ImageStatus.LOCKED, diskImage.getImageStatus()); } } }