package org.ovirt.engine.core.bll.storage.repoimage;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.when;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.bll.ValidateTestUtils;
import org.ovirt.engine.core.bll.provider.storage.OpenStackImageProviderProxy;
import org.ovirt.engine.core.common.action.ImportRepoImageParameters;
import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.StoragePoolDao;
/** A test case for {@link ImportRepoImageCommand} */
@RunWith(MockitoJUnitRunner.class)
public class ImportRepoImageCommandTest extends ImportExportRepoImageCommandTest {
private String repoImageId = Guid.newGuid().toString();
@Mock
private StoragePoolDao storagePoolDao;
@Mock
private OpenStackImageProviderProxy providerProxy;
@Spy
@InjectMocks
protected ImportRepoImageCommand<ImportRepoImageParameters> cmd =
new ImportRepoImageCommand<>(new ImportRepoImageParameters(), null);
@Override
@Before
public void setUp() {
super.setUp();
when(storagePoolDao.get(storagePoolId)).thenReturn(storagePool);
when(providerProxy.getImageAsDiskImage(repoImageId)).thenReturn(diskImage);
cmd.getParameters().setSourceRepoImageId(repoImageId);
cmd.getParameters().setSourceStorageDomainId(repoStorageDomainId);
cmd.getParameters().setStoragePoolId(storagePoolId);
cmd.getParameters().setStorageDomainId(storageDomainId);
doReturn(true).when(cmd).validateSpaceRequirements(any(DiskImage.class));
}
@Test
public void testValidateSuccess() {
ValidateTestUtils.runAndAssertValidateSuccess(cmd);
}
@Test
public void testValidateImageDoesNotExist() {
when(providerProxy.getImageAsDiskImage(repoImageId)).thenReturn(null);
ValidateTestUtils.runAndAssertValidateFailure(cmd,
EngineMessage.ACTION_TYPE_FAILED_DISK_NOT_EXIST);
}
@Test
public void testValidatePoolInMaintenance() {
storagePool.setStatus(StoragePoolStatus.Maintenance);
ValidateTestUtils.runAndAssertValidateFailure(cmd,
EngineMessage.ACTION_TYPE_FAILED_IMAGE_REPOSITORY_NOT_FOUND);
}
}