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.ArgumentMatchers.anyString; import static org.mockito.Mockito.doReturn; import java.util.Collections; import java.util.List; import java.util.Set; import java.util.stream.Collectors; 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.BusinessEntity; 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.IdQueryParameters; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.ClusterDao; import org.ovirt.engine.core.dao.gluster.GlusterGeoRepDao; import org.ovirt.engine.core.dao.gluster.GlusterVolumeDao; @RunWith(MockitoJUnitRunner.class) public class GetGlusterGeoReplicationEligibleVolumesQueryTest extends AbstractQueryTest<IdQueryParameters, GetGlusterGeoReplicationEligibleVolumesQuery<IdQueryParameters>> { @Mock private GlusterGeoRepDao geoRepDao; @Mock private ClusterDao clusterDao; @Mock private GlusterVolumeDao volumeDao; @Spy private GlusterGeoRepUtil geoRepUtil; private GeoRepCreateEligibilityBaseTest baseTest = new GeoRepCreateEligibilityBaseTest(); @Before public void setupMock() { doReturn(geoRepUtil).when(getQuery()).getGeoRepUtilInstance(); doReturn(Guid.newGuid()).when(geoRepUtil).getUpServerId(any(Guid.class)); doReturn(true).when(geoRepUtil).checkEmptyGlusterVolume(any(Guid.class), anyString()); doReturn(getExpectedVolumes()).when(getQuery()).getAllGlusterVolumesWithMasterCompatibleVersion(baseTest.getMASTER_VOLUME_ID()); baseTest.setupMock(geoRepUtil, geoRepDao, clusterDao); doReturn(baseTest.getMasterVolume()).when(volumeDao).getById(baseTest.getMASTER_VOLUME_ID()); } private List<GlusterVolumeEntity> getExpectedVolumes() { return Collections.singletonList(baseTest.getGlusterVolume(baseTest.getSLAVE_VOLUME_1_ID(), baseTest.getSLAVE_CLUSTER_ID(), GlusterStatus.UP, new GlusterVolumeSizeInfo(10000L, 10000L, 0L))); } private boolean checkEquals(List<GlusterVolumeEntity> actual, List<GlusterVolumeEntity> expected) { Set<Guid> actualSet = actual.stream().map(BusinessEntity::getId).collect(Collectors.toSet()); Set<Guid> expectedSet = expected.stream().map(BusinessEntity::getId).collect(Collectors.toSet()); return actualSet.equals(expectedSet); } @Test public void testGetEligibleVolumeListQuery() { doReturn(new IdQueryParameters(baseTest.getMASTER_VOLUME_ID())).when(getQuery()).getParameters(); getQuery().executeQueryCommand(); List<GlusterVolumeEntity> returnValue = getQuery().getQueryReturnValue().getReturnValue(); List<GlusterVolumeEntity> expectedVolumes = getExpectedVolumes(); assertEquals(expectedVolumes.size(), returnValue.size()); assertTrue(checkEquals(returnValue, expectedVolumes)); } }