package org.ovirt.engine.core.bll.storage.repoimage;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNull;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;
import java.util.Collections;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.mockito.Mock;
import org.ovirt.engine.core.bll.AbstractUserQueryTest;
import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.businessentities.storage.ImageFileType;
import org.ovirt.engine.core.common.businessentities.storage.RepoImage;
import org.ovirt.engine.core.common.queries.GetImagesListByStoragePoolIdParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.StorageDomainDao;
import org.ovirt.engine.core.dao.StoragePoolDao;
@RunWith(Parameterized.class)
public class GetImagesListByStoragePoolIdQueryTest
extends AbstractUserQueryTest<GetImagesListByStoragePoolIdParameters, GetImagesListByStoragePoolIdQuery<? extends GetImagesListByStoragePoolIdParameters>> {
@Mock
private StorageDomainDao storageDomainDaoMock;
@Mock
private StoragePoolDao storagePoolDaoMock;
@Parameterized.Parameter
public ImageFileType expectedType;
private Guid storageDomainId;
@Parameterized.Parameters
public static Object[] data() {
return new ImageFileType[] { ImageFileType.ISO, ImageFileType.Floppy };
}
@Override
public void setUp() throws Exception {
super.setUp();
storageDomainId = Guid.newGuid();
}
@Override
protected void setUpMockQueryParameters() {
super.setUpMockQueryParameters();
when(getQueryParameters().getStoragePoolId()).thenReturn(Guid.newGuid());
when(getQueryParameters().getImageType()).thenReturn(expectedType);
}
@Override
protected void initQuery(GetImagesListByStoragePoolIdQuery<? extends GetImagesListByStoragePoolIdParameters> query) {
super.initQuery(query);
RepoImage rfmd = new RepoImage();
rfmd.setFileType(expectedType);
doReturn(Collections.singletonList(rfmd)).when(query).getUserRequestForStorageDomainRepoFileList();
}
@Test
public void testGetStorageDomainIdWithPermissions() {
mockStoragePoolDao(new StoragePool());
when(storageDomainDaoMock.getIsoStorageDomainIdForPool(getQueryParameters().getStoragePoolId(),
StorageDomainStatus.Active)).thenReturn(storageDomainId);
assertEquals("wrong storage domain id", storageDomainId, getQuery().getStorageDomainIdForQuery());
}
@Test
public void testGetStorageDomainIdWithNoPermissions() {
mockStoragePoolDao(null);
assertNull("No storage domains should have been returned", getQuery().getStorageDomainIdForQuery());
}
/**
* Mocks the storage pool Dao to return the given storage pool
* @param sp The storage_pool the Dao should return
*/
private void mockStoragePoolDao(StoragePool pool) {
Guid storagePoolId = getQueryParameters().getStoragePoolId();
if (pool != null) {
pool.setId(storagePoolId);
}
when(storagePoolDaoMock.get(
storagePoolId,
getUser().getId(),
getQueryParameters().isFiltered())).thenReturn(pool);
}
}