package org.ovirt.engine.core.bll.command.utils;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.when;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ovirt.engine.core.common.businessentities.storage_domain_dynamic;
import org.ovirt.engine.core.common.businessentities.storage_domains;
import org.ovirt.engine.core.common.config.Config;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ Config.class })
public class StorageDomainSpaceCheckerTest {
public StorageDomainSpaceCheckerTest() {
mockStatic(Config.class);
}
@Test
public void enoughSpaceAndPct() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 6;
settings.diskSpaceUsed = 4;
settings.spaceThresholdGB = 5;
settings.spaceThresholdPct = 10;
storage_domains domain = setupForSpaceTest(settings);
assertTrue(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void notEnoughSpace() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 4;
settings.diskSpaceUsed = 6;
settings.spaceThresholdGB = 5;
settings.spaceThresholdPct = 10;
storage_domains domain = setupForSpaceTest(settings);
assertFalse(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void tooLowPct() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 6;
settings.diskSpaceUsed = 4;
settings.spaceThresholdGB = 5;
settings.spaceThresholdPct = 70;
storage_domains domain = setupForSpaceTest(settings);
assertFalse(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void equalSpaceThreshold() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 5;
settings.diskSpaceUsed = 5;
settings.spaceThresholdGB = 5;
settings.spaceThresholdPct = 10;
storage_domains domain = setupForSpaceTest(settings);
assertFalse(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void equalPctThreshold() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 5;
settings.diskSpaceUsed = 5;
settings.spaceThresholdGB = 1;
settings.spaceThresholdPct = 50;
storage_domains domain = setupForSpaceTest(settings);
assertFalse(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void zeroDiskSize() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 0;
settings.diskSpaceUsed = 0;
settings.spaceThresholdGB = 5;
settings.spaceThresholdPct = 10;
storage_domains domain = setupForSpaceTest(settings);
assertFalse(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void GBThresholdLessThanZero() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 2;
settings.diskSpaceUsed = 0;
settings.spaceThresholdGB = -5;
settings.spaceThresholdPct = 10;
storage_domains domain = setupForSpaceTest(settings);
assertTrue(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void PctThresholdLessThanZero() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 10;
settings.diskSpaceUsed = 0;
settings.spaceThresholdGB = 5;
settings.spaceThresholdPct = -10;
storage_domains domain = setupForSpaceTest(settings);
assertTrue(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
@Test
public void PctThresholdMoreThan100() {
SpaceTestSettings settings = new SpaceTestSettings();
settings.diskSpaceFree = 10;
settings.diskSpaceUsed = 0;
settings.spaceThresholdGB = 5;
settings.spaceThresholdPct = 110;
storage_domains domain = setupForSpaceTest(settings);
assertFalse(StorageDomainSpaceChecker.isBelowThresholds(domain));
}
public storage_domains setupForSpaceTest(final SpaceTestSettings settings) {
storage_domain_dynamic dynamic = new storage_domain_dynamic();
dynamic.setavailable_disk_size(settings.diskSpaceFree);
dynamic.setused_disk_size(settings.diskSpaceUsed);
storage_domains domain = new storage_domains();
domain.setStorageDynamicData(dynamic);
mockConfig(settings.spaceThresholdGB, settings.spaceThresholdPct);
return domain;
}
private void mockConfig(final int lowGB, final int lowPct) {
when(Config.<Integer> GetValue(ConfigValues.FreeSpaceCriticalLowInGB)).thenReturn(lowGB);
when(Config.<Integer> GetValue(ConfigValues.FreeSpaceLow)).thenReturn(lowPct);
}
final class SpaceTestSettings {
public int diskSpaceUsed;
public int diskSpaceFree;
public int spaceThresholdGB;
public int spaceThresholdPct;
}
}