package org.ovirt.engine.core.bll;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import static org.ovirt.engine.core.utils.MockConfigRule.mockConfig;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Before;
import org.junit.ClassRule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.bll.interfaces.BackendInternal;
import org.ovirt.engine.core.common.action.VdcActionParametersBase;
import org.ovirt.engine.core.common.action.VdcActionType;
import org.ovirt.engine.core.common.businessentities.StorageDomain;
import org.ovirt.engine.core.common.businessentities.VDS;
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.dao.StorageDomainDao;
import org.ovirt.engine.core.dao.VdsDao;
import org.ovirt.engine.core.dao.network.InterfaceDao;
import org.ovirt.engine.core.dao.network.NetworkDao;
import org.ovirt.engine.core.utils.MockConfigRule;
@RunWith(MockitoJUnitRunner.class)
public class AutoRecoveryManagerTest {
@InjectMocks
private AutoRecoveryManager manager;
@ClassRule
public static MockConfigRule mcr =
new MockConfigRule(mockConfig(ConfigValues.AutoRecoveryAllowedTypes, new HashMap<>()));
@Mock
private BackendInternal backendMock;
@Mock
private VdsDao vdsDaoMock;
@Mock
private StorageDomainDao storageDomainDaoMock;
@Mock
private InterfaceDao interfaceDaoMock;
@Mock
private NetworkDao networkDaoMock;
// Entities needing recovery
private List<VDS> vdss = new ArrayList<>();
private List<StorageDomain> storageDomains = new ArrayList<>();
@Before
public void setup() {
final VDS vds = new VDS();
vdss.add(vds);
when(vdsDaoMock.listFailedAutorecoverables()).thenReturn(vdss);
StorageDomain domain = new StorageDomain();
domain.setStoragePoolId(Guid.newGuid());
storageDomains.add(domain);
when(storageDomainDaoMock.listFailedAutorecoverables()).thenReturn(storageDomains);
}
@Test
public void onTimerFullConfig() {
Config.<Map<String, String>> getValue(ConfigValues.AutoRecoveryAllowedTypes).put("storage domains",
Boolean.TRUE.toString());
Config.<Map<String, String>> getValue(ConfigValues.AutoRecoveryAllowedTypes).put("hosts",
Boolean.TRUE.toString());
manager.onTimer();
verify(backendMock, times(vdss.size())).runInternalAction(eq(VdcActionType.ActivateVds),
any(VdcActionParametersBase.class));
verify(backendMock, times(storageDomains.size())).runInternalAction(eq(VdcActionType.ConnectDomainToStorage),
any(VdcActionParametersBase.class));
}
@Test
public void onTimerFalseConfig() {
Config.<Map<String, String>> getValue(ConfigValues.AutoRecoveryAllowedTypes).put("storage domains",
Boolean.FALSE.toString());
Config.<Map<String, String>> getValue(ConfigValues.AutoRecoveryAllowedTypes).put("hosts",
Boolean.FALSE.toString());
manager.onTimer();
verify(backendMock, never()).runInternalAction(eq(VdcActionType.ActivateVds),
any(VdcActionParametersBase.class));
verify(backendMock, never()).runInternalAction(eq(VdcActionType.ConnectDomainToStorage),
any(VdcActionParametersBase.class));
}
}