Search in sources :

Example 1 with SchedulingStrategy

use of org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy in project abstools by abstools.

the class SchedulingTest method testNStepScheduler.

@Test
public void testNStepScheduler() {
    final SchedulingStrategy ss = mock(SchedulingStrategy.class);
    doCallRealMethod().when(ss).setBaseScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).setCurrentScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).doSingleStep();
    TotalScheduler ts = mock(TotalScheduler.class);
    ScheduleAction scheduleAction = mock(ScheduleAction.class, Mockito.RETURNS_DEEP_STUBS);
    when(ts.choose(any(ScheduleOptions.class))).thenReturn(scheduleAction);
    TaskInfo taskInfo = mock(TaskInfo.class);
    when(ts.schedule(any(TaskScheduler.class), any(List.class))).thenReturn(taskInfo);
    ss.setBaseScheduler(ts);
    final int numberSteps = new Random().nextInt(100);
    final NStepScheduler nss = new NStepScheduler(ss, numberSteps);
    ss.setCurrentScheduler(nss);
    Thread schedulingThread = new Thread(new Runnable() {

        @Override
        public void run() {
            ScheduleOptions scheduleOptions = mock(ScheduleOptions.class, Mockito.RETURNS_DEEP_STUBS);
            for (int i = 0; i < numberSteps; i++) {
                ss.curScheduler.choose(scheduleOptions);
            }
            assertEquals(nss, ss.curScheduler);
            ss.curScheduler.choose(scheduleOptions);
        }
    });
    try {
        schedulingThread.start();
        schedulingThread.join();
        verify(ss).awaitGUIAction(any(ScheduleOptions.class));
    } catch (InterruptedException e) {
        fail();
    }
}
Also used : TotalScheduler(org.absmodels.abs.plugin.debug.scheduling.TotalScheduler) NStepScheduler(org.absmodels.abs.plugin.debug.scheduling.NStepScheduler) TaskScheduler(abs.backend.java.scheduling.TaskScheduler) TaskInfo(abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo) SchedulingStrategy(org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy) ScheduleOptions(abs.backend.java.scheduling.ScheduleOptions) ScheduleAction(abs.backend.java.scheduling.ScheduleAction) Random(java.util.Random) ArrayList(java.util.ArrayList) List(java.util.List) Test(org.junit.Test)

Example 2 with SchedulingStrategy

use of org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy in project abstools by abstools.

the class SchedulingTest method testRunToLineScheduler.

@Test
public void testRunToLineScheduler() {
    final SchedulingStrategy ss = mock(SchedulingStrategy.class);
    doCallRealMethod().when(ss).setBaseScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).setCurrentScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).doSingleStep();
    TotalScheduler ts = mock(TotalScheduler.class);
    ScheduleAction scheduleAction = mock(ScheduleAction.class, Mockito.RETURNS_DEEP_STUBS);
    when(ts.choose(any(ScheduleOptions.class))).thenReturn(scheduleAction);
    TaskInfo taskInfo = mock(TaskInfo.class);
    when(ts.schedule(any(TaskScheduler.class), any(List.class))).thenReturn(taskInfo);
    ss.setBaseScheduler(ts);
    final int line = new Random().nextInt(1000);
    final String fileName = "filename";
    abs.backend.java.debugging.TaskInfo ti = mock(abs.backend.java.debugging.TaskInfo.class);
    when(ti.getCurrentFile()).thenReturn("filename");
    when(ti.getCurrentLine()).thenReturn(line - 5).thenReturn(line - 4).thenReturn(line - 3).thenReturn(line - 2).thenReturn(line - 1).thenReturn(line);
    ss.steppedTask = ti;
    RunToLineScheduler rtls = new RunToLineScheduler(ss, fileName, line);
    ss.setCurrentScheduler(rtls);
    ScheduleOptions scheduleOptions = mock(ScheduleOptions.class, Mockito.RETURNS_DEEP_STUBS);
    for (int i = 0; i < 6; i++) {
        ss.curScheduler.choose(scheduleOptions);
    }
    verify(ss).awaitGUIAction(any(ScheduleOptions.class));
}
Also used : TotalScheduler(org.absmodels.abs.plugin.debug.scheduling.TotalScheduler) TaskScheduler(abs.backend.java.scheduling.TaskScheduler) TaskInfo(abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo) SchedulingStrategy(org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy) ScheduleOptions(abs.backend.java.scheduling.ScheduleOptions) RunToLineScheduler(org.absmodels.abs.plugin.debug.scheduling.RunToLineScheduler) ScheduleAction(abs.backend.java.scheduling.ScheduleAction) Random(java.util.Random) ArrayList(java.util.ArrayList) List(java.util.List) Test(org.junit.Test)

Example 3 with SchedulingStrategy

use of org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy in project abstools by abstools.

the class SchedulingTest method testStepOverScheduler.

@Test
public void testStepOverScheduler() {
    final SchedulingStrategy ss = mock(SchedulingStrategy.class);
    doCallRealMethod().when(ss).setBaseScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).setCurrentScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).doSingleStep();
    TotalScheduler ts = mock(TotalScheduler.class);
    ScheduleAction scheduleAction = mock(ScheduleAction.class, Mockito.RETURNS_DEEP_STUBS);
    when(ts.choose(any(ScheduleOptions.class))).thenReturn(scheduleAction);
    TaskInfo taskInfo = mock(TaskInfo.class);
    when(ts.schedule(any(TaskScheduler.class), any(List.class))).thenReturn(taskInfo);
    ss.setBaseScheduler(ts);
    TaskStackFrameView tsfv = mock(TaskStackFrameView.class);
    StepOverScheduler sos = new StepOverScheduler(ss, tsfv);
    ss.setCurrentScheduler(sos);
    ScheduleOptions scheduleOptions = mock(ScheduleOptions.class, Mockito.RETURNS_DEEP_STUBS);
    ss.curScheduler.choose(scheduleOptions);
    verify(ts).reset();
    verify(ts).choose(any(ScheduleOptions.class));
    abs.backend.java.debugging.TaskInfo ti = mock(abs.backend.java.debugging.TaskInfo.class);
    TaskView tv = mock(TaskView.class);
    TaskStackView tsv = mock(TaskStackView.class);
    when(tsv.hasFrames()).thenReturn(true);
    TaskStackFrameView testStackFrame = mock(TaskStackFrameView.class);
    OngoingStubbing<TaskStackFrameView> ongoingStubbing = when(tsv.getCurrentFrame()).thenReturn(testStackFrame);
    for (int i = 0; i < 9; i++) {
        testStackFrame = mock(TaskStackFrameView.class);
        ongoingStubbing = ongoingStubbing.thenReturn(testStackFrame);
    }
    ongoingStubbing.thenReturn(tsfv);
    when(tv.getStack()).thenReturn(tsv);
    when(ti.getTaskView()).thenReturn(tv);
    ss.steppedTask = ti;
    for (int i = 0; i < 10; i++) {
        ss.curScheduler.choose(scheduleOptions);
    }
    assertEquals(sos, ss.curScheduler);
    verify(ss, never()).awaitGUIAction(any(ScheduleOptions.class));
    ss.curScheduler.choose(scheduleOptions);
    verify(ss).awaitGUIAction(any(ScheduleOptions.class));
}
Also used : TotalScheduler(org.absmodels.abs.plugin.debug.scheduling.TotalScheduler) TaskView(abs.backend.java.observing.TaskView) TaskStackView(abs.backend.java.observing.TaskStackView) TaskScheduler(abs.backend.java.scheduling.TaskScheduler) TaskStackFrameView(abs.backend.java.observing.TaskStackFrameView) TaskInfo(abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo) SchedulingStrategy(org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy) ScheduleOptions(abs.backend.java.scheduling.ScheduleOptions) ScheduleAction(abs.backend.java.scheduling.ScheduleAction) StepOverScheduler(org.absmodels.abs.plugin.debug.scheduling.StepOverScheduler) ArrayList(java.util.ArrayList) List(java.util.List) Test(org.junit.Test)

Example 4 with SchedulingStrategy

use of org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy in project abstools by abstools.

the class SchedulingTest method testGUIScheduler.

// @Test
// public void testRunTaskScheduler(){
// SchedulingStrategy ss = mock(SchedulingStrategy.class);
// TaskView tv = mock(TaskView.class);
// COGView cogv = mock(COGView.class);
// int testCogId = new Random().nextInt();
// int testTaskId = new Random().nextInt();
// when(cogv.getID()).thenReturn(testCogId);
// when(tv.getCOG()).thenReturn(cogv);
// when(tv.getID()).thenReturn(testTaskId);
// RunTaskScheduler rts = new RunTaskScheduler(ss);
// rts.setTask(tv);
// 
// ScheduleOptions so = mock(ScheduleOptions.class);
// List<ScheduleAction> sal = new ArrayList<ScheduleAction>();
// ScheduleTask st;
// COG cogfa;
// int cogId = testCogId;
// Random cogIdRandom = new Random();
// for(int i=0; i<40; i++){
// st = mock(ScheduleTask.class);
// while(cogId==testCogId){
// cogId = cogIdRandom.nextInt();
// }
// cogfa = mock(COG.class);
// when(cogfa.getID()).thenReturn(cogId);
// when(st.getCOG()).thenReturn(cogfa);
// sal.add(st);
// }
// 
// ScheduleAction sa;
// TaskView tvfa;
// int taskId = testTaskId;
// for(int i=0; i<40; i++){
// sa = mock(ScheduleAction.class);
// while(taskId==testTaskId){
// taskId = cogIdRandom.nextInt();
// }
// tvfa = mock(TaskView.class);
// when(tvfa.getID()).thenReturn(taskId);
// when(sa.getTask()).thenReturn(tvfa);
// sal.add(sa);
// }
// 
// 
// for(int i=0; i<10; i++){
// st = mock(ScheduleTask.class);
// cogfa = mock(COG.class);
// when(cogfa.getID()).thenReturn(testCogId);
// when(st.getCOG()).thenReturn(cogfa);
// sal.add(st);
// }
// for(int i=0; i<10; i++){
// sa = mock(ScheduleAction.class);
// tvfa = mock(TaskView.class);
// when(tvfa.getID()).thenReturn(testTaskId);
// when(sa.getTask()).thenReturn(tvfa);
// sal.add(sa);
// }
// when(so.allOptions()).thenReturn(sal);
// when(so.numOptions()).thenReturn(100);
// 
// //TODO choose and remove actions till no more actions to choose -> switch to GUI
// ScheduleAction csa;
// for(int i=0; i<20; i++){
// csa = rts.choose(so);
// if(csa instanceof ScheduleTask){
// assertEquals("Element "+i+" must correspond to the task.", csa.getCOG().getID(), testCogId);
// } else{
// assertEquals("Element "+i+" must correspond to the task.", csa.getTask().getID(), testTaskId);
// }
// }
// }
@Test
public void testGUIScheduler() {
    SchedulingStrategy ss = mock(SchedulingStrategy.class);
    doCallRealMethod().when(ss).setBaseScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).setCurrentScheduler(any(TotalScheduler.class));
    doCallRealMethod().when(ss).doSingleStep();
    TotalScheduler ts = mock(TotalScheduler.class);
    ScheduleAction scheduleAction = mock(ScheduleAction.class, Mockito.RETURNS_DEEP_STUBS);
    when(ts.choose(any(ScheduleOptions.class))).thenReturn(scheduleAction);
    TaskInfo taskInfo = mock(TaskInfo.class);
    when(ts.schedule(any(TaskScheduler.class), any(List.class))).thenReturn(taskInfo);
    ss.setBaseScheduler(ts);
    final GUIScheduler gs = new GUIScheduler(ss);
    ss.setCurrentScheduler(gs);
    Thread schedulingThread = new Thread(new Runnable() {

        @Override
        public void run() {
            ScheduleOptions scheduleOptions = mock(ScheduleOptions.class, Mockito.RETURNS_DEEP_STUBS);
            ScheduleAction chosenAction = gs.choose(scheduleOptions);
        }
    });
    try {
        schedulingThread.start();
        ss.doSingleStep();
        schedulingThread.join(1000);
        assertEquals(gs, ss.curScheduler);
        assertEquals(ts, ss.baseScheduler);
    } catch (InterruptedException e) {
        fail();
    }
}
Also used : TaskInfo(abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo) TotalScheduler(org.absmodels.abs.plugin.debug.scheduling.TotalScheduler) SchedulingStrategy(org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy) ScheduleOptions(abs.backend.java.scheduling.ScheduleOptions) GUIScheduler(org.absmodels.abs.plugin.debug.scheduling.GUIScheduler) ScheduleAction(abs.backend.java.scheduling.ScheduleAction) ArrayList(java.util.ArrayList) List(java.util.List) TaskScheduler(abs.backend.java.scheduling.TaskScheduler) Test(org.junit.Test)

Example 5 with SchedulingStrategy

use of org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy in project abstools by abstools.

the class Debugger method addSchedulingStrategy.

private static boolean addSchedulingStrategy(String debuggerArgsScheduler, final ABSRuntime r) {
    if (debuggerArgsScheduler != null && !debuggerArgsScheduler.isEmpty()) {
        String scheduler = debuggerArgsScheduler.replaceFirst("-Dabs.totalscheduler=", "");
        if (!scheduler.isEmpty()) {
            try {
                Class<?> c = Class.forName(scheduler);
                Object o = c.newInstance();
                TotalSchedulingStrategy ss = (TotalSchedulingStrategy) o;
                r.setTotalSchedulingStrategy(ss);
                return (ss instanceof SchedulingStrategy);
            } catch (ClassNotFoundException e) {
                standardExceptionHandling(e);
                showErrorMessage("Not able to instantiate total scheduler");
            } catch (InstantiationException e) {
                standardExceptionHandling(e);
                showErrorMessage("Not able to instantiate total scheduler");
            } catch (IllegalAccessException e) {
                standardExceptionHandling(e);
                showErrorMessage("Not able to instantiate total scheduler");
            }
        }
    }
    return false;
}
Also used : TotalSchedulingStrategy(abs.backend.java.scheduling.TotalSchedulingStrategy) SchedulingStrategy(org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy) TotalSchedulingStrategy(abs.backend.java.scheduling.TotalSchedulingStrategy)

Aggregations

SchedulingStrategy (org.absmodels.abs.plugin.debug.scheduling.SchedulingStrategy)5 ScheduleAction (abs.backend.java.scheduling.ScheduleAction)4 ScheduleOptions (abs.backend.java.scheduling.ScheduleOptions)4 TaskInfo (abs.backend.java.scheduling.SimpleTaskScheduler.TaskInfo)4 TaskScheduler (abs.backend.java.scheduling.TaskScheduler)4 ArrayList (java.util.ArrayList)4 List (java.util.List)4 TotalScheduler (org.absmodels.abs.plugin.debug.scheduling.TotalScheduler)4 Test (org.junit.Test)4 Random (java.util.Random)2 TaskStackFrameView (abs.backend.java.observing.TaskStackFrameView)1 TaskStackView (abs.backend.java.observing.TaskStackView)1 TaskView (abs.backend.java.observing.TaskView)1 TotalSchedulingStrategy (abs.backend.java.scheduling.TotalSchedulingStrategy)1 GUIScheduler (org.absmodels.abs.plugin.debug.scheduling.GUIScheduler)1 NStepScheduler (org.absmodels.abs.plugin.debug.scheduling.NStepScheduler)1 RunToLineScheduler (org.absmodels.abs.plugin.debug.scheduling.RunToLineScheduler)1 StepOverScheduler (org.absmodels.abs.plugin.debug.scheduling.StepOverScheduler)1