package org.ovirt.engine.core.bll; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.Mockito.when; import static org.powermock.api.mockito.PowerMockito.spy; import java.util.Map; import org.junit.Test; import org.junit.runner.RunWith; import org.ovirt.engine.core.common.action.AddVmPoolWithVmsParameters; import org.ovirt.engine.core.common.businessentities.DiskImageTemplate; 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.powermock.core.classloader.annotations.PrepareForTest; import org.powermock.modules.junit4.PowerMockRunner; @RunWith(PowerMockRunner.class) @PrepareForTest({ DbFacade.class, Backend.class, Config.class, VmHandler.class, VmTemplateHandler.class }) public class AddVmPoolWithVmsCommandTest extends CommonVmPoolWithVmsCommandTestAbstract { /** * The command under test. */ private AddVmPoolWithVmsCommand<AddVmPoolWithVmsParameters> command; protected AddVmPoolWithVmsCommand<AddVmPoolWithVmsParameters> createCommand() { AddVmPoolWithVmsParameters param = new AddVmPoolWithVmsParameters(vmPools, testVm, VM_COUNT, DISK_SIZE); param.setStorageDomainId(Guid.Empty); command = new AddVmPoolWithVmsCommand<AddVmPoolWithVmsParameters>(param); return spy(command); } public AddVmPoolWithVmsCommandTest() { super(); } @Test public void validateCanDoAction() { setupMocks(); assertTrue(createCommand().canDoAction()); } @Test public void validateFreeSpaceOnDestinationDomains() { setupMocks(); assertTrue(createCommand().CheckFreeSpaceOnDestinationDomains()); } @Test public void validateMultiDisksWithNotEnoughSpaceOnDomains() { setupMocks(); AddVmPoolWithVmsCommand<AddVmPoolWithVmsParameters> cmd = createCommand(); when(Config.<Integer> GetValue(ConfigValues.FreeSpaceCriticalLowInGB)).thenReturn(80); setNewDisksForTemplate(10, cmd.getVmTemplate().getDiskMap()); assertFalse(cmd.CheckFreeSpaceOnDestinationDomains()); assertTrue(cmd.getReturnValue() .getCanDoActionMessages() .contains(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW.toString())); } @Test public void validateNoFreeSpaceOnDomains() { setupMocks(); AddVmPoolWithVmsCommand<AddVmPoolWithVmsParameters> cmd = createCommand(); when(Config.<Integer> GetValue(ConfigValues.FreeSpaceCriticalLowInGB)).thenReturn(100); assertFalse(cmd.CheckFreeSpaceOnDestinationDomains()); assertTrue(cmd.getReturnValue() .getCanDoActionMessages() .contains(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW.toString())); } @Test public void validateNoFreeSpacePctOnDomains() { setupMocks(); mockGetImageDomainsListVdsCommand(2, 2); AddVmPoolWithVmsCommand<AddVmPoolWithVmsParameters> cmd = createCommand(); when(Config.<Integer> GetValue(ConfigValues.FreeSpaceLow)).thenReturn(50); assertFalse(cmd.CheckFreeSpaceOnDestinationDomains()); assertTrue(cmd.getReturnValue() .getCanDoActionMessages() .contains(VdcBllMessages.ACTION_TYPE_FAILED_DISK_SPACE_LOW.toString())); } private void setNewDisksForTemplate(int numberOfNewDisks, Map<String, DiskImageTemplate> disksMap) { for (int newDiskInd = 0; newDiskInd < numberOfNewDisks; newDiskInd++) { DiskImageTemplate diskImageTempalte = new DiskImageTemplate(); disksMap.put(Guid.NewGuid().toString(), diskImageTempalte); } } }