package org.ovirt.engine.api.restapi.resource;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.ovirt.engine.api.model.Job;
import org.ovirt.engine.api.model.Statistic;
import org.ovirt.engine.api.model.Step;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusEntity;
import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeTaskStatusForHost;
import org.ovirt.engine.core.common.job.JobExecutionStatus;
import org.ovirt.engine.core.compat.Guid;
public class GlusterTaskStatisticalQueryTest {
private static final Guid[] GUIDS = {new Guid("afce7a39-8e8c-4819-ba9c-796d316592e6"),
new Guid("afce7a39-8e8c-4819-ba9c-796d316592e7")};
private static final double EPSILON = 1000;
private static final long[] FILES_FAILED = {4576, 7890};
private static final long[] FILES_SKIPPED = {56, 89};
private static final long[] FILES_MOVED = {24576, 3679891};
private static final long[] SIZE_MOVED = {24576345L, 3247389L};
private static final double[] RUN_TIME = {14.1, 34.5};
private StepStatisticalQuery query = new StepStatisticalQuery(null, getParent());
@Test
public void testQuery() {
List<Statistic> statistics = query.getStatistics(getTaskEntity());
assertEquals(14, statistics.size());
for (Statistic statistic : statistics) {
verifyStatistic(statistic);
}
}
private GlusterVolumeTaskStatusEntity getTaskEntity() {
GlusterVolumeTaskStatusEntity entity = new GlusterVolumeTaskStatusEntity();
List<GlusterVolumeTaskStatusForHost> hostStatusList = new ArrayList<>();
hostStatusList.add(getTaskStatusForHost(0));
hostStatusList.add(getTaskStatusForHost(1));
entity.setHostwiseStatusDetails(hostStatusList);
return entity;
}
private GlusterVolumeTaskStatusForHost getTaskStatusForHost(int index) {
GlusterVolumeTaskStatusForHost hostStatus = new GlusterVolumeTaskStatusForHost();
hostStatus.setFilesFailed(FILES_FAILED[index]);
hostStatus.setFilesSkipped(FILES_SKIPPED[index]);
hostStatus.setFilesMoved(FILES_MOVED[index]);
hostStatus.setTotalSizeMoved(SIZE_MOVED[index]);
hostStatus.setRunTime(RUN_TIME[index]);
hostStatus.setStatus(JobExecutionStatus.STARTED);
hostStatus.setHostId(GUIDS[index]);
return hostStatus;
}
private Step getParent() {
Step step = new Step();
step.setId(Guid.Empty.toString());
step.setJob(new Job());
step.getJob().setId(Guid.Empty.toString());
return step;
}
private void verifyStatistic(Statistic statistic) {
if (statistic.getName().equals(StepStatisticalQuery.FILES_FAILED.getName())) {
if (GUIDS[0].toString().equals(statistic.getHost().getId())) {
assertEquals(statistic.getValues().getValues().get(0).getDatum().longValue(), FILES_FAILED[0]);
} else {
assertEquals(statistic.getValues().getValues().get(0).getDatum().longValue(), FILES_FAILED[1]);
}
}
if (statistic.getName().equals(StepStatisticalQuery.FILES_MOVED.getName())) {
if (GUIDS[0].toString().equals(statistic.getHost().getId())) {
assertEquals(statistic.getValues().getValues().get(0).getDatum().longValue(), FILES_MOVED[0]);
} else {
assertEquals(statistic.getValues().getValues().get(0).getDatum().longValue(), FILES_MOVED[1]);
}
}
if (statistic.getName().equals(StepStatisticalQuery.SIZE_MOVED.getName())) {
if (GUIDS[0].toString().equals(statistic.getHost().getId())) {
assertEquals(statistic.getValues().getValues().get(0).getDatum().longValue(), SIZE_MOVED[0]);
} else {
assertEquals(statistic.getValues().getValues().get(0).getDatum().longValue(), SIZE_MOVED[1]);
}
}
if (statistic.getName().equals(StepStatisticalQuery.RUN_TIME.getName())) {
if (GUIDS[0].toString().equals(statistic.getHost().getId())) {
assertEquals(statistic.getValues().getValues().get(0).getDatum().doubleValue(), RUN_TIME[0], EPSILON);
} else {
assertEquals(statistic.getValues().getValues().get(0).getDatum().doubleValue(), RUN_TIME[1], EPSILON);
}
}
if (statistic.getName().equals(StepStatisticalQuery.STATUS.getName())) {
assertEquals(statistic.getValues().getValues().get(0).getDetail(), JobExecutionStatus.STARTED.toString());
}
}
}