package org.ovirt.engine.core.vdsbroker.monitoring;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyMap;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.doThrow;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
import org.ovirt.engine.core.common.businessentities.NonOperationalReason;
import org.ovirt.engine.core.common.businessentities.VDS;
import org.ovirt.engine.core.common.businessentities.VDSStatus;
import org.ovirt.engine.core.dao.ClusterDao;
import org.ovirt.engine.core.dao.VdsDao;
public class MultipleServicesMonitoringStrategyTest {
VirtMonitoringStrategy virtStrategy;
GlusterMonitoringStrategy glusterStrategy;
MultipleServicesMonitoringStrategy strategy;
@Rule
public ExpectedException exception = ExpectedException.none();
public MultipleServicesMonitoringStrategyTest() {
virtStrategy = spy(new VirtMonitoringStrategy(mock(ClusterDao.class), mock(VdsDao.class), null));
doReturn(false).when(virtStrategy).isAnyVmRunOnVdsInDb(any());
glusterStrategy = spy(new GlusterMonitoringStrategy());
doNothing().when(virtStrategy).vdsNonOperational(any(VDS.class), any(NonOperationalReason.class), anyMap());
strategy = spy(new MultipleServicesMonitoringStrategy());
strategy.addMonitoringStrategy(virtStrategy);
strategy.addMonitoringStrategy(glusterStrategy);
}
@Test
public void testCanMoveVdsToMaintenanceFalse() {
VDS vds = new VDS();
vds.setStatus(VDSStatus.PreparingForMaintenance);
vds.setVmCount(1);
assertFalse(strategy.canMoveToMaintenance(vds));
}
@Test
public void testCanMoveVdsToMaintenanceTrue() {
VDS vds = new VDS();
vds.setStatus(VDSStatus.PreparingForMaintenance);
vds.setVmCount(0);
assertTrue(strategy.canMoveToMaintenance(vds));
}
@Test
public void testIsmonitoringNeededTrue() {
VDS vds = new VDS();
vds.setStatus(VDSStatus.NonOperational);
vds.setVmCount(1);
assertTrue(strategy.isMonitoringNeeded(vds));
vds.setStatus(VDSStatus.Up);
assertTrue(strategy.isMonitoringNeeded(vds));
}
@Test
public void testIsmonitoringNeededGlusterTrue() {
VDS vds = new VDS();
vds.setStatus(VDSStatus.NonOperational);
vds.setVmCount(0);
assertTrue(strategy.isMonitoringNeeded(vds));
}
@Test
public void testProcessingSoftwareGluster() {
doThrow(new RuntimeException()).when(glusterStrategy).processSoftwareCapabilities(any(VDS.class));
exception.expect(RuntimeException.class);
VDS vds = new VDS();
strategy.processSoftwareCapabilities(vds);
}
@Test
public void testProcessingHardwareVirt() {
doThrow(new RuntimeException()).when(virtStrategy).processHardwareCapabilities(any(VDS.class));
exception.expect(RuntimeException.class);
VDS vds = new VDS();
strategy.processHardwareCapabilities(vds);
}
}