package mvd.jester.info; import static org.junit.Assert.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.mock; import java.util.HashSet; import java.util.Set; import java.util.concurrent.ThreadLocalRandom; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import mvd.jester.info.TerminationInfo.Level; /** * TestTerminationInfo */ public class TestSchedulingInfo { @Test @DisplayName("Check if SchedulingInfos parameters are calculated correctly.") public void testSchedulingInfo() { for (int run = 0; run < 1000; ++run) { Set terminationInfos = new HashSet<>(); int numberOfTerminationInfos = ThreadLocalRandom.current().nextInt(5, 10); boolean feasibile = true; boolean levelFailed = false; for (int i = 0; i < numberOfTerminationInfos; ++i) { long deadline = ThreadLocalRandom.current().nextLong(50, 100); long responseTime = ThreadLocalRandom.current().nextLong(50, 100); Level taskLevel = ThreadLocalRandom.current().nextLong(0, 100) < 50 ? Level.LOW : Level.HIGH; terminationInfos.add(new TerminationInfo(deadline, responseTime, taskLevel)); if (deadline < responseTime) { feasibile = false; if (taskLevel == Level.HIGH) { levelFailed = true; } } } SchedulingInfo schedulingInfo = new SchedulingInfo(terminationInfos, 2, numberOfTerminationInfos); assertTrue(schedulingInfo.checkLevelFail(Level.HIGH) == levelFailed); assertTrue(schedulingInfo.checkTasksetFeasible() == feasibile); } } @Test @DisplayName("Check Getters and Setters.") public void testGettersAndSetters() { double taskRatio = 0.23; double utilization = 0.49; SchedulingInfo si = new SchedulingInfo(taskRatio, utilization); Set terminationInfos = new HashSet<>(); long numberOfTerminationInfos = ThreadLocalRandom.current().nextLong(5, 10); for (int i = 0; i < numberOfTerminationInfos; ++i) { TerminationInfo ti = mock(TerminationInfo.class); terminationInfos.add(ti); assertTrue(si.addTerminationInfo(ti)); assertFalse(si.addTerminationInfo(ti)); } assertTrue(si.getParallelTaskRatio() == taskRatio); assertTrue(si.getUtilization() == utilization); assertTrue(si.getTerminationInfos().size() == numberOfTerminationInfos); assertTrue(si.getTerminationInfos().equals(terminationInfos)); assertTrue(si.addTerminationInfo(null)); assertFalse(si.getFailedTerminationInfo().isPresent()); TerminationInfo ti = mock(TerminationInfo.class); si.setFailedTerminationInfo(ti); assertTrue(si.getFailedTerminationInfo().isPresent()); assertTrue(si.getFailedTerminationInfo().get().equals(ti)); } }