package org.ovirt.engine.core.bll.storage;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;
import static org.mockito.Mockito.withSettings;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.mockito.Answers;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.ovirt.engine.core.bll.BaseCommandTest;
import org.ovirt.engine.core.common.action.StoragePoolManagementParameter;
import org.ovirt.engine.core.common.businessentities.StoragePool;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.common.errors.EngineMessage;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.StoragePoolDao;
import org.ovirt.engine.core.dao.StoragePoolIsoMapDao;
import org.ovirt.engine.core.utils.MockConfigRule;
public class StorageHandlingCommandBaseTest extends BaseCommandTest {
@InjectMocks
private StorageHandlingCommandBase<StoragePoolManagementParameter> cmd = mock(
StorageHandlingCommandBase.class,
withSettings().defaultAnswer(Answers.CALLS_REAL_METHODS)
.useConstructor(new StoragePoolManagementParameter(createStoragePool()), null));
@Mock
private StoragePoolDao storagePoolDao;
@Mock
private StoragePoolIsoMapDao storagePoolIsoMapDao;
private StoragePool storagePool;
@ClassRule
public static MockConfigRule mcr = new MockConfigRule();
@Before
public void setUp() {
storagePool = cmd.getParameters().getStoragePool();
cmd.init();
when(storagePoolDao.get(storagePool.getId())).thenReturn(storagePool);
}
@Test
public void storagePoolNotFound() {
when(storagePoolDao.get(storagePool.getId())).thenReturn(null);
checkStoragePoolFails();
}
@Test
public void storagePoolNull() {
createCommandWithNullPool();
checkStoragePoolFails();
}
@Test
public void storagePoolExists() {
checkStoragePoolSucceeds();
}
@Test
public void nameTooLong() {
setAcceptableNameLength(10);
checkStoragePoolNameLengthSucceeds();
}
@Test
public void nameAcceptableLength() {
setAcceptableNameLength(255);
checkStoragePoolNameLengthFails();
}
private void checkStoragePoolSucceeds() {
assertTrue(cmd.checkStoragePool());
}
private static StoragePool createStoragePool() {
StoragePool pool = new StoragePool();
pool.setName("DefaultStoragePool");
pool.setId(Guid.newGuid());
pool.setIsLocal(false);
return pool;
}
private void checkStoragePoolFails() {
assertFalse(cmd.checkStoragePool());
assertTrue(cmd.getReturnValue().getValidationMessages().contains(EngineMessage
.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST.toString()));
}
private void createCommandWithNullPool() {
cmd = mock(StorageHandlingCommandBase.class,
withSettings().defaultAnswer(Answers.CALLS_REAL_METHODS)
.useConstructor(new StoragePoolManagementParameter(), null));
}
private static void setAcceptableNameLength(final int length) {
mcr.mockConfigValue(ConfigValues.StoragePoolNameSizeLimit, length);
}
private void checkStoragePoolNameLengthSucceeds() {
assertFalse(cmd.checkStoragePoolNameLengthValid());
}
private void checkStoragePoolNameLengthFails() {
assertTrue(cmd.checkStoragePoolNameLengthValid());
}
}