package org.ovirt.engine.core.bll.scheduling;
import static org.junit.Assert.assertNotNull;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
import java.util.HashSet;
import javax.enterprise.inject.Instance;
import javax.enterprise.inject.Produces;
import javax.inject.Inject;
import javax.inject.Singleton;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.junit.Rule;
import org.junit.Test;
import org.junit.experimental.categories.Category;
import org.mockito.Spy;
import org.ovirt.engine.arquillian.IntegrationTest;
import org.ovirt.engine.arquillian.TransactionalTestBase;
import org.ovirt.engine.core.bll.CpuFlagsManagerHandler;
import org.ovirt.engine.core.bll.interfaces.BackendInternal;
import org.ovirt.engine.core.bll.network.host.NetworkDeviceHelper;
import org.ovirt.engine.core.bll.scheduling.external.ExternalSchedulerDiscovery;
import org.ovirt.engine.core.common.config.ConfigValues;
import org.ovirt.engine.core.compat.Version;
import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
import org.ovirt.engine.core.utils.MockConfigRule;
import org.ovirt.engine.core.vdsbroker.ResourceManager;
@Category(IntegrationTest.class)
public class SchedulingManagerTest extends TransactionalTestBase {
@Rule
public MockConfigRule mockConfigRule = new MockConfigRule(
mockConfig(ConfigValues.ExternalSchedulerEnabled, false),
mockConfig(ConfigValues.EnableVdsLoadBalancing, false),
mockConfig(ConfigValues.MaxSchedulerWeight, 381),
mockConfig(ConfigValues.SupportedClusterLevels, new HashSet<Version>()),
mockConfig(ConfigValues.SpmVmGraceForEvenGuestDistribute, 5),
mockConfig(ConfigValues.MigrationThresholdForEvenGuestDistribute, 5),
mockConfig(ConfigValues.HighVmCountForEvenGuestDistribute, 5)
);
@Inject
@Spy
private Instance<SchedulingManager> schedulingManager;
@Deployment(name = "SchedulingManagerTest")
public static JavaArchive deploy() {
Class<?>[] classes = {
SchedulingManager.class,
Mocks.class,
AuditLogDirector.class,
MigrationHandler.class,
BasicMigrationHandler.class,
CpuFlagsManagerHandler.class,
ExternalSchedulerDiscovery.class
};
return createDeployment(classes);
}
@Test
public void testSchedule() throws Exception {
assertNotNull(schedulingManager.get());
verify(schedulingManager.get()).init();
assertNotNull(schedulingManager.get().getDefaultClusterPolicy());
}
@Singleton
private static class Mocks {
@Produces
@Singleton
private ResourceManager resourceManager = mock(ResourceManager.class);
@Produces
@Singleton
private BackendInternal backendInternal = mock(BackendInternal.class);
@Produces
@Singleton
private NetworkDeviceHelper networkDeviceHelper = mock(NetworkDeviceHelper.class);
}
}