package org.ovirt.engine.core.bll.gluster; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import java.util.Collections; import java.util.List; import java.util.concurrent.TimeUnit; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; import org.ovirt.engine.core.bll.AbstractQueryTest; import org.ovirt.engine.core.bll.utils.GlusterUtil; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; import org.ovirt.engine.core.common.businessentities.gluster.BlockStats; import org.ovirt.engine.core.common.businessentities.gluster.BrickProfileDetails; import org.ovirt.engine.core.common.businessentities.gluster.FopStats; import org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity; import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeProfileInfo; import org.ovirt.engine.core.common.businessentities.gluster.StatsInfo; import org.ovirt.engine.core.common.queries.gluster.GlusterVolumeProfileParameters; import org.ovirt.engine.core.common.utils.Pair; import org.ovirt.engine.core.common.vdscommands.VDSCommandType; import org.ovirt.engine.core.common.vdscommands.VDSParametersBase; import org.ovirt.engine.core.common.vdscommands.VDSReturnValue; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dao.gluster.GlusterBrickDao; @RunWith(MockitoJUnitRunner.class) public class GetGlusterVolumeProfileInfoQueryTest extends AbstractQueryTest<GlusterVolumeProfileParameters, GetGlusterVolumeProfileInfoQuery<GlusterVolumeProfileParameters>> { private static final Guid CLUSTER_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c9d1"); private static final Guid VOLUME_ID = new Guid("b399944a-81ab-4ec5-8266-e19ba7c3c943"); private GlusterVolumeProfileInfo expectedProfileInfo; private GlusterVolumeProfileParameters params; @Mock private GlusterUtil glusterUtils; @Mock private GlusterBrickDao brickDao; @Before @Override public void setUp() throws Exception { super.setUp(); mockDependencies(); setupExpectedGlusterVolumeOptionInfo(); setupMock(); } private VDS getVds(VDSStatus status) { VDS vds = new VDS(); vds.setId(Guid.newGuid()); vds.setVdsName("gfs1"); vds.setClusterId(CLUSTER_ID); vds.setStatus(status); return vds; } private GlusterBrickEntity getBrick() { GlusterBrickEntity brick = new GlusterBrickEntity(); brick.setBrickDirectory("dir"); brick.setServerName("host"); return brick; } private void mockDependencies() { doReturn(getVds(VDSStatus.Up)).when(glusterUtils).getUpServer(CLUSTER_ID); doReturn("test-vol").when(getQuery()).getGlusterVolumeName(VOLUME_ID); doReturn(getBrick()).when(brickDao).getById(any(Guid.class)); } private void setupMock() { VDSReturnValue returnValue = new VDSReturnValue(); returnValue.setSucceeded(true); returnValue.setReturnValue(expectedProfileInfo); doReturn(returnValue).when(getQuery()).runVdsCommand(eq(VDSCommandType.GetGlusterVolumeProfileInfo), any(VDSParametersBase.class)); } private void setupExpectedGlusterVolumeOptionInfo() { params = new GlusterVolumeProfileParameters(CLUSTER_ID, VOLUME_ID); expectedProfileInfo = new GlusterVolumeProfileInfo(); expectedProfileInfo.setVolumeId(VOLUME_ID); expectedProfileInfo.setBrickProfileDetails(getBrickProfileDetails()); } private List<BrickProfileDetails> getBrickProfileDetails() { BrickProfileDetails profileDetails = new BrickProfileDetails(); profileDetails.setBrickId(Guid.newGuid()); profileDetails.setProfileStats(getStatsInfo()); return Collections.singletonList(profileDetails); } private List<StatsInfo> getStatsInfo() { StatsInfo statInfo = new StatsInfo(); statInfo.setDuration(2); statInfo.setDurationFormatted(new Pair<>(2, TimeUnit.SECONDS.toString())); statInfo.setTotalRead(0); statInfo.setTotalWrite(0); statInfo.setBlockStats(getBlockStats()); statInfo.setFopStats(getFopStats()); return Collections.singletonList(statInfo); } private List<FopStats> getFopStats() { FopStats fopStats = new FopStats(); fopStats.setAvgLatency(78.12500); fopStats.setAvgLatencyFormatted(new Pair<>(78.12500, TimeUnit.MICROSECONDS.toString())); fopStats.setName("STATFS"); fopStats.setHits(2); fopStats.setMinLatency(39.00000); fopStats.setMinLatencyFormatted(new Pair<>(39.00000, TimeUnit.MICROSECONDS.toString())); fopStats.setMaxLatency(143.00000); fopStats.setMaxLatencyFormatted(new Pair<>(143.00000, TimeUnit.MICROSECONDS.toString())); return Collections.singletonList(fopStats); } private List<BlockStats> getBlockStats() { BlockStats blockStats = new BlockStats(); blockStats.setSize(128); blockStats.setBlockRead(558); blockStats.setBlockWrite(12345); return Collections.singletonList(blockStats); } @Test public void testExecuteQueryCommand() { doReturn(params.getClusterId()).when(getQueryParameters()).getClusterId(); doReturn(params.getVolumeId()).when(getQueryParameters()).getVolumeId(); doReturn(params.isNfs()).when(getQueryParameters()).isNfs(); getQuery().executeQueryCommand(); GlusterVolumeProfileInfo glusterVolumeProfileInfo = getQuery().getQueryReturnValue().getReturnValue(); assertNotNull(glusterVolumeProfileInfo); assertEquals(expectedProfileInfo, glusterVolumeProfileInfo); } }