package org.ovirt.engine.core.bll.storage;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Matchers.any;
import static org.powermock.api.mockito.PowerMockito.*;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ovirt.engine.core.common.action.StoragePoolManagementParameter;
import org.ovirt.engine.core.common.businessentities.storage_pool;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dal.VdcBllMessages;
import org.ovirt.engine.core.dal.dbbroker.DbFacade;
import org.ovirt.engine.core.dao.StoragePoolDAO;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@PrepareForTest({DbFacade.class, Config.class})
@RunWith(PowerMockRunner.class)
public class StorageHandlingCommandBaseTest {
StorageHandlingCommandBase cmd;
StoragePoolDAO dao;
@Before
public void setUp() {
mockStatic(DbFacade.class);
mockStatic(Config.class);
DbFacade facade = mock(DbFacade.class);
dao = mock(StoragePoolDAO.class);
cmd = new TestStorageHandlingCommandBase(new StoragePoolManagementParameter(createStoragePool()));
when(DbFacade.getInstance()).thenReturn(facade);
when(facade.getStoragePoolDAO()).thenReturn(dao);
}
@Test
public void storagePoolNotFound() {
checkStoragePoolFails();
}
@Test
public void storagePoolNull() {
createCommandWithNullPool();
checkStoragePoolFails();
}
@Test
public void storagePoolExists() {
createValidStoragePool();
checkStoragePoolSucceeds();
}
@Test
public void nameTooLong() {
createValidStoragePool();
setAcceptableNameLength(10);
checkStoragePoolNameLengthSucceeds();
}
@Test
public void nameAcceptableLength() {
createValidStoragePool();
setAcceptableNameLength(255);
checkStoragePoolNameLengthFails();
}
private void checkStoragePoolSucceeds() {
assertTrue(cmd.CheckStoragePool());
}
private storage_pool createStoragePool() {
storage_pool pool = new storage_pool();
pool.setname("DefaultStoragePool");
pool.setId(Guid.NewGuid());
return pool;
}
private void checkStoragePoolFails() {
assertFalse(cmd.CheckStoragePool());
assertTrue(cmd.getReturnValue().getCanDoActionMessages().contains(VdcBllMessages
.ACTION_TYPE_FAILED_STORAGE_POOL_NOT_EXIST.toString()));
}
private void createCommandWithNullPool() {
cmd = new TestStorageHandlingCommandBase(new StoragePoolManagementParameter());
}
private void createValidStoragePool() {
when(dao.get(any(Guid.class))).thenReturn(createStoragePool());
}
private void setAcceptableNameLength(final int length) {
when(Config.GetValue(ConfigValues.StoragePoolNameSizeLimit)).thenReturn(length);
}
private void checkStoragePoolNameLengthSucceeds() {
assertFalse(cmd.CheckStoragePoolNameLengthValid());
}
private void checkStoragePoolNameLengthFails() {
assertTrue(cmd.CheckStoragePoolNameLengthValid());
}
private class TestStorageHandlingCommandBase extends StorageHandlingCommandBase<StoragePoolManagementParameter> {
public TestStorageHandlingCommandBase(StoragePoolManagementParameter parameters) {
super(parameters);
}
@Override
protected void executeCommand() {
}
}
}