package org.ovirt.engine.core.bll.gluster;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnitRunner;
import org.ovirt.engine.core.bll.AbstractQueryTest;
import org.ovirt.engine.core.bll.utils.GlusterGeoRepUtil;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterGeoRepNonEligibilityReason;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterStatus;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeSizeInfo;
import org.ovirt.engine.core.common.queries.gluster.GlusterVolumeGeoRepEligibilityParameters;
import org.ovirt.engine.core.compat.Guid;
import org.ovirt.engine.core.dao.ClusterDao;
import org.ovirt.engine.core.dao.gluster.GlusterGeoRepDao;
@RunWith(MockitoJUnitRunner.class)
public class GetNonEligibilityReasonsOfVolumeForGeoRepSessionQueryTest extends AbstractQueryTest<GlusterVolumeGeoRepEligibilityParameters, GetNonEligibilityReasonsOfVolumeForGeoRepSessionQuery<GlusterVolumeGeoRepEligibilityParameters>> {
@Mock
private GlusterGeoRepDao geoRepDao;
@Mock
private ClusterDao clusterDao;
private GeoRepCreateEligibilityBaseTest baseTest = new GeoRepCreateEligibilityBaseTest();
@Spy
private GlusterGeoRepUtil geoRepUtil;
@Before
public void setupMock() {
doReturn(geoRepUtil).when(getQuery()).getGeoRepUtilInstance();
baseTest.setupMock(geoRepUtil, geoRepDao, clusterDao);
}
protected List<GlusterGeoRepNonEligibilityReason> getNonEligibilityReasonsForSlaveVolume2() {
List<GlusterGeoRepNonEligibilityReason> nonEligibilityreasons = new ArrayList<>();
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_SHOULD_BE_UP);
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_SIZE_SHOULD_BE_GREATER_THAN_MASTER_VOLUME_SIZE);
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_SHOULD_NOT_BE_SLAVE_OF_ANOTHER_GEO_REP_SESSION);
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_TO_BE_EMPTY);
return nonEligibilityreasons;
}
protected List<GlusterGeoRepNonEligibilityReason> getNonEligibilityReasonsForSlaveVolume3() {
List<GlusterGeoRepNonEligibilityReason> nonEligibilityreasons = new ArrayList<>();
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_AND_MASTER_VOLUMES_SHOULD_NOT_BE_IN_SAME_CLUSTER);
return nonEligibilityreasons;
}
protected List<GlusterGeoRepNonEligibilityReason> getNonEligibilityReasonsForSlaveVolume4() {
List<GlusterGeoRepNonEligibilityReason> nonEligibilityreasons = new ArrayList<>();
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_SIZE_TO_BE_AVAILABLE);
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.MASTER_VOLUME_SIZE_TO_BE_AVAILABLE);
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_SIZE_SHOULD_BE_GREATER_THAN_MASTER_VOLUME_SIZE);
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.NO_UP_SLAVE_SERVER);
nonEligibilityreasons.add(GlusterGeoRepNonEligibilityReason.SLAVE_VOLUME_TO_BE_EMPTY);
return nonEligibilityreasons;
}
@Test
public void testExecuteQueryCommnadOnVolume1() {
GlusterVolumeEntity slaveVolume = baseTest.getGlusterVolume(baseTest.getSLAVE_VOLUME_1_ID(), baseTest.getSLAVE_CLUSTER_ID(), GlusterStatus.UP, new GlusterVolumeSizeInfo(10000L, 4000L, 6000L));
Guid slaveUpServerId = Guid.newGuid();
doReturn(slaveUpServerId).when(geoRepUtil).getUpServerId(any(Guid.class));
doReturn(true).when(geoRepUtil).checkEmptyGlusterVolume(slaveUpServerId, slaveVolume.getName());
List<GlusterGeoRepNonEligibilityReason> actualNonEligibilityReasons = getQuery().getNonEligibilityReasons(baseTest.getGlusterVolume(baseTest.getMASTER_VOLUME_ID(), baseTest.getMASTER_CLUSTER_ID(), GlusterStatus.UP, new GlusterVolumeSizeInfo(10000L, 4000L, 6000L)), slaveVolume);
assertTrue(actualNonEligibilityReasons.isEmpty());
}
@Test
public void testExecuteQueryCommnadOnVolume2() {
GlusterVolumeEntity slaveVolume = baseTest.getGlusterVolume(baseTest.getSLAVE_VOLUME_2_ID(), baseTest.getSLAVE_CLUSTER_ID(), GlusterStatus.DOWN, new GlusterVolumeSizeInfo(4000L, 0L, 0L));
Guid slaveUpServerID = Guid.newGuid();
doReturn(slaveUpServerID).when(geoRepUtil).getUpServerId(any(Guid.class));
doReturn(false).when(geoRepUtil).checkEmptyGlusterVolume(slaveUpServerID, slaveVolume.getName());
List<GlusterGeoRepNonEligibilityReason> actual = getQuery().getNonEligibilityReasons(baseTest.getGlusterVolume(baseTest.getMASTER_VOLUME_ID(), baseTest.getMASTER_CLUSTER_ID(), GlusterStatus.UP, new GlusterVolumeSizeInfo(10000L, 4000L, 6000L)), slaveVolume);
assertEquals(actual.size(), getNonEligibilityReasonsForSlaveVolume2().size());
assertTrue(getNonEligibilityReasonsForSlaveVolume2().containsAll(actual));
}
@Test
public void testExecuteQueryCommnadOnVolume3() {
GlusterVolumeEntity slaveVolume = baseTest.getGlusterVolume(baseTest.getSLAVE_VOLUME_3_ID(), baseTest.getMASTER_CLUSTER_ID(), GlusterStatus.UP, new GlusterVolumeSizeInfo(10000L, 4000L, 6000L));
Guid slaveUpServerId = Guid.newGuid();
doReturn(slaveUpServerId).when(geoRepUtil).getUpServerId(any(Guid.class));
doReturn(true).when(geoRepUtil).checkEmptyGlusterVolume(slaveUpServerId, slaveVolume.getName());
List<GlusterGeoRepNonEligibilityReason> actual = getQuery().getNonEligibilityReasons(baseTest.getGlusterVolume(baseTest.getMASTER_VOLUME_ID(), baseTest.getMASTER_CLUSTER_ID(), GlusterStatus.UP, new GlusterVolumeSizeInfo(10000L, 4000L, 6000L)), slaveVolume);
assertEquals(actual.size(), getNonEligibilityReasonsForSlaveVolume3().size());
assertTrue(getNonEligibilityReasonsForSlaveVolume3().containsAll(actual));
}
@Test
public void testExecuteQueryCommnadOnVolume4() {
doReturn(null).when(geoRepUtil).getUpServerId(any(Guid.class));
List<GlusterGeoRepNonEligibilityReason> actual = getQuery().getNonEligibilityReasons(baseTest.getGlusterVolume(baseTest.getMASTER_VOLUME_ID(), baseTest.getMASTER_CLUSTER_ID(), GlusterStatus.UP, null), baseTest.getGlusterVolume(baseTest.getSLAVE_VOLUME_4_ID(), baseTest.getSLAVE_CLUSTER_ID(), GlusterStatus.UP, null));
assertEquals(actual.size(), getNonEligibilityReasonsForSlaveVolume4().size());
assertTrue(getNonEligibilityReasonsForSlaveVolume4().containsAll(actual));
}
}