TestTaskletContext.java 2.02 KB
Newer Older
Michael Schmid committed
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
package mvd.jester.simulator.schmidmottok;

import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.util.concurrent.ThreadLocalRandom;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import mvd.jester.model.Segment;
import mvd.jester.simulator.internals.schmidmottok.JobContext;
import mvd.jester.simulator.internals.schmidmottok.SegmentContext;
import mvd.jester.simulator.internals.schmidmottok.TaskContext;
import mvd.jester.simulator.internals.schmidmottok.TaskletContext;

/**
 * TestTaskletContext
 */
public class TestTaskletContext {

    @Test
    @DisplayName("Check if the execution of the tasklet is updated correctly.")
    void testUpdateExecution() {
        for (int run = 0; run < 100; ++run) {
            long taskletWcet = ThreadLocalRandom.current().nextLong(20, 50);

            Segment s = mock(Segment.class);
            when(s.getTaskletWcet()).thenReturn(taskletWcet);
            SegmentContext sc = mock(SegmentContext.class);
            when(sc.getSegment()).thenReturn(s);
            TaskContext tc = mock(TaskContext.class);
            JobContext jc = mock(JobContext.class);

            TaskletContext tasklet = new TaskletContext(tc, sc);
            tasklet.setCurrentJob(jc);

            assertTrue(tasklet.checkExecutionTime());

            for (int i = 0; i < taskletWcet - 1; ++i) {
                assertFalse(tasklet.updateExecution(i));
            }
            assertTrue(tasklet.updateExecution(taskletWcet));
            assertFalse(tasklet.getCurrentJob().isPresent());
            assertFalse(tasklet.checkExecutionTime());

            verify(jc, times(1)).setCurrentTasklet(null);
            assertThrows(RuntimeException.class, () -> tasklet.updateExecution(1));
        }
    }
}