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)); } } }