TestSchedulingInfo.java 3.08 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
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<TerminationInfo> 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<TerminationInfo> 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));
    }

}