package org.ovirt.engine.core.bll.storage.disk.image;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.bll.DbDependentTestBase;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.common.businessentities.storage.StorageType;
import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dao.StorageDomainDao;
/** A test case for {@link ImagesHandler} */
@RunWith(MockitoJUnitRunner.class)
public class ImagesHandlerTest extends DbDependentTestBase {
@Mock
private StorageDomainDao storageDomainDaoMock;
/** The prefix to use for all tests */
private static final String prefix = "PREFIX";
/** The disks to use for testing */
private DiskImage disk1;
private DiskImage disk2;
private DiskImage disk3;
@Before
public void setUp() {
disk1 = new DiskImage();
disk2 = new DiskImage();
disk3 = new DiskImage();
when(DbFacade.getInstance().getStorageDomainDao()).thenReturn(storageDomainDaoMock);
}
@Test
public void testGetSuggestedDiskAliasNullDisk() {
assertEquals("null disk does not give the default name",
prefix + ImagesHandler.DISK + ImagesHandler.DefaultDriveName,
ImagesHandler.getSuggestedDiskAlias(null, prefix, 1));
}
@Test
public void testGetSuggestedDiskAliasNullAliasDisk() {
disk1.setDiskAlias(null);
assertEquals("disk with null alias does not give the default name",
prefix + ImagesHandler.DISK + ImagesHandler.DefaultDriveName,
ImagesHandler.getSuggestedDiskAlias(disk1, prefix, 1));
}
@Test
public void testGetSuggestedDiskAliasNotNullAliasDisk() {
disk1.setDiskAlias("someAlias");
assertEquals("a new alias was generated instead of returning the pre-defined one",
disk1.getDiskAlias(),
ImagesHandler.getSuggestedDiskAlias(disk1, prefix, 1));
}
@Test
public void testGetDiskAliasWithDefaultNullAlias() {
assertEquals("default", ImagesHandler.getDiskAliasWithDefault(disk1, "default"));
}
@Test
public void testGetDiskAliasWithDefaultNotNullAlias() {
disk1.setDiskAlias("alias");
assertEquals("alias", ImagesHandler.getDiskAliasWithDefault(disk1, "default"));
}
@Test
public void testGetAllStorageIdsForImageIds() {
Guid sdIdShared = Guid.newGuid();
Guid sdId1 = Guid.newGuid();
Guid sdId2 = Guid.newGuid();
disk1.setStorageIds(new ArrayList<>(Arrays.asList(sdId1, sdIdShared)));
disk2.setStorageIds(new ArrayList<>(Arrays.asList(sdId2, sdIdShared)));
Set<Guid> result = ImagesHandler.getAllStorageIdsForImageIds(Arrays.asList(disk1, disk2));
assertEquals("Wrong number of Guids returned", 3, result.size());
assertTrue("Wrong Guids returned", result.containsAll(Arrays.asList(sdId1, sdId2, sdIdShared)));
}
@Test
public void testImagesSubtract() {
disk1.setId(Guid.newGuid());
disk2.setId(Guid.newGuid());
disk3.setId(Guid.newGuid());
List<DiskImage> list1 = new ArrayList<>(Arrays.asList(disk1, disk2, disk3));
List<DiskImage> list2 = new ArrayList<>(Arrays.asList(disk2, disk3));
List<DiskImage> intersection = ImagesHandler.imagesSubtract(list1, list2);
assertEquals("Intersection should contain only one disk", 1, intersection.size());
assertTrue("Intersection should contains disk1", intersection.contains(disk1));
}
@Test
public void testImagesIntersection() {
disk1.setId(Guid.newGuid());
disk2.setId(Guid.newGuid());
disk3.setId(Guid.newGuid());
List<DiskImage> list1 = new ArrayList<>(Arrays.asList(disk1, disk2));
List<DiskImage> list2 = new ArrayList<>(Arrays.asList(disk1, disk3));
List<DiskImage> intersection = ImagesHandler.imagesIntersection(list1, list2);
assertTrue("Intersection should contain only disk1", intersection.size() == 1 && intersection.contains(disk1));
}
@Test
public void testDetermineTotalImageInitialSizeFromNfsToCow() {
DiskImage disk = new DiskImage();
disk.setSize(5000);
disk.setActualSizeInBytes(0);
Guid srcDomainGuid = Guid.newGuid();
StorageDomain srcDomain = new StorageDomain();
srcDomain.setId(srcDomainGuid);
srcDomain.setStorageType(StorageType.NFS);
when(storageDomainDaoMock.get(srcDomainGuid)).thenReturn(srcDomain);
Guid dstDomainGuid = Guid.newGuid();
StorageDomain destDomain = new StorageDomain();
destDomain.setId(dstDomainGuid);
destDomain.setStorageType(StorageType.ISCSI);
when(storageDomainDaoMock.get(dstDomainGuid)).thenReturn(destDomain);
assertEquals("Total Initial Size should be 0",
0,
ImagesHandler.determineTotalImageInitialSize(disk,
VolumeFormat.COW,
srcDomainGuid,
dstDomainGuid).longValue());
}
}