TestSystemSetup.java 5.02 KB
Newer Older
1 2 3
package mvd.jester.model;

import static org.junit.jupiter.api.Assertions.assertTrue;
4 5
import java.util.Set;
import java.util.concurrent.ThreadLocalRandom;
6 7 8
import com.google.common.math.DoubleMath;
import org.jgrapht.experimental.dag.DirectedAcyclicGraph;
import org.jgrapht.graph.DefaultEdge;
9 10
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
Michael Schmid committed
11
import mvd.jester.model.SystemManager.DagTaskBuilder;
12 13


14
public class TestSystemSetup {
15

16
    private static final int NUMBER_OF_RUNS = 1000;
17 18 19 20

    @Test
    @DisplayName("Check if randomly generated task parameters lie within the specified ranges.")
    public void testRandomTaskSetGeneration() {
21 22
        for (int i = 0; i < NUMBER_OF_RUNS; ++i) {
            long numberOfProcessors = ThreadLocalRandom.current().nextLong(2, 8);
Michael Schmid committed
23 24
            SystemManager.SynchronousTaskBuilder systemSetupBuilder =
                    new SystemManager.SynchronousTaskBuilder()//
25 26 27 28
                            .setNumberOfSegments(1, 7)//
                            .setNumberOfJobs(2, 10)//
                            .setPeriods(100, 1000, 1000)//
                            .setNumberOfProcessors(numberOfProcessors);
29

30
            Set<SynchronousTask> taskSet = systemSetupBuilder.generateTaskSet();
31

32
            // assertTrue(systemSetup.getNumberOfProcessors() == numberOfProcessors);
33

34
            for (SynchronousTask t : taskSet) {
35 36 37 38
                assertTrue(t.getPeriod() >= 100);
                assertTrue(t.getPeriod() <= 1000);
                assertTrue(t.getDeadline() == t.getPeriod());

39
                long maxJobWcet = t.getPeriod() / t.getWorkloadDistribution().size();
40

41
                for (Segment s : t.getWorkloadDistribution()) {
42 43 44
                    assertTrue(s.getJobWcet() >= 1);
                    assertTrue(s.getJobWcet() <= maxJobWcet);
                    assertTrue(s.getNumberOfJobs() >= 1);
45
                    assertTrue(s.getNumberOfJobs() <= 10);
46 47
                }

48 49
                assertTrue(t.getWorkloadDistribution().size() >= 1);
                assertTrue(t.getWorkloadDistribution().size() <= 7);
50

51
            }
52

53
            assertTrue(systemSetupBuilder.addTask(taskSet));
54
        }
55
    }
56

57 58 59
    @Test
    @DisplayName("Check Getters and Setters.")
    void testGettersAndSetters() {
Michael Schmid committed
60 61
        // @SuppressWarnings("unchecked")
        // Set<SynchronousTask> t1 = mock(Set.class);
62

Michael Schmid committed
63 64
        // @SuppressWarnings("unchecked")
        // Set<SynchronousTask> t2 = mock(Set.class);
65

Michael Schmid committed
66
        // SystemManager<SynchronousTask> systemSetup = new SystemManager<>(t1, 2);
67

Michael Schmid committed
68 69
        // systemSetup.setTasks(t2);
        // assertTrue(systemSetup.getTasks() == t2);
70
    }
71

72 73 74
    @Test
    @DisplayName("Check if DagTaskBuilder works correctly")
    void testDagTaskBuilder() {
75
        for (int i = 0; i < 100; ++i) {
Michael Schmid committed
76
            DagTaskBuilder builder = new DagTaskBuilder();
77 78
            DagTask task = builder.generateTask();
            DirectedAcyclicGraph<Job, DefaultEdge> jobDag = task.getJobDag();
79

80 81
            assertTrue(task.getCriticalPath() <= task.getPeriod());
            assertTrue(task.getPeriod() <= (long) (task.getWorkload() / builder.getBeta()));
82

83 84 85 86 87 88 89 90 91 92 93 94
            for (Job j : jobDag) {
                assertTrue(1 <= j.getWcet() && j.getWcet() <= 100);
                assertTrue(j.getRelativeCompletionTime() <= task.getCriticalPath());
                if (jobDag.outDegreeOf(j) == 0) {
                    assertTrue(j.getRelativeCompletionTime() == task.getCriticalPath());
                }
            }
            for (DefaultEdge e : jobDag.edgeSet()) {
                Job source = jobDag.getEdgeSource(e);
                Job target = jobDag.getEdgeTarget(e);
                assertTrue(source.getRelativeCompletionTime() < target.getRelativeCompletionTime());
            }
95 96 97 98 99 100 101 102
        }

    }


    @Test
    @DisplayName("Check if utilization works correctly.")
    void testUtil() {
Michael Schmid committed
103
        for (int i = 0; i < 10; ++i) {
104
            for (double d = 0.25; d < 4; d += 0.25) {
Michael Schmid committed
105
                DagTaskBuilder builder = new DagTaskBuilder();
106 107 108 109 110
                Set<DagTask> taskSet = builder.generateTaskSet(d);
                double taskSetUtil = 0;
                for (DagTask t : taskSet) {
                    taskSetUtil += t.getUtilization();
                }
111

Michael Schmid committed
112
                assertTrue(DoubleMath.fuzzyEquals(taskSetUtil, d, 0.1));
113
            }
114 115 116
        }
    }

Michael Schmid committed
117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
    @Test
    @DisplayName("Check if UUnifast Algorithm works correctly.")
    void testUUnifast() {
        for (int i = 1; i <= 100; ++i) {
            long numberOfTasks = ThreadLocalRandom.current().nextLong(1, 20);
            double utilization = ThreadLocalRandom.current().nextDouble(0.25, 8);
            DagTaskBuilder builder = new DagTaskBuilder();
            Set<DagTask> taskSet = builder.generateUUnifastTaskSet(numberOfTasks, utilization);

            double taskSetUtil = 0;
            for (DagTask t : taskSet) {
                taskSetUtil += t.getUtilization();
            }

            assertTrue(taskSet.size() == numberOfTasks);
            assertTrue(DoubleMath.fuzzyEquals(taskSetUtil, utilization, 0.1));
        }
    }
135

136
}