From 18e02c69ae4e33b7c1dfc764b6ad39dc87307c2e Mon Sep 17 00:00:00 2001 From: Marc Khouzam Date: Wed, 25 Jun 2008 17:57:45 +0000 Subject: [PATCH] Bug 238445 The Register unit tests made calls to createExecutionContext outside the executor. This change fixes this and also one register test that didn't do what it was meant to do. --- .../dd/tests/gdb/GDBProcessesTest.java | 15 ++-- .../eclipse/dd/tests/gdb/MIRegistersTest.java | 81 +++++-------------- .../dd/tests/gdb/framework/SyncUtil.java | 13 +++ 3 files changed, 40 insertions(+), 69 deletions(-) diff --git a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/GDBProcessesTest.java b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/GDBProcessesTest.java index 893a20a328d..930aaf98ed0 100644 --- a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/GDBProcessesTest.java +++ b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/GDBProcessesTest.java @@ -135,6 +135,7 @@ public class GDBProcessesTest extends BaseTestCase { } } + IMIExecutionDMContext fExecDmc = null; /* * getThreadData() for multiple threads */ @@ -151,17 +152,15 @@ public class GDBProcessesTest extends BaseTestCase { } }; - /* - * Create an execution DMC - */ - final IMIExecutionDMContext dmc = fRunCtrl.createMIExecutionContext(fGdbCtrl.getGDBDMContext(), 1); - + /* - * getModelData for Execution DMC + * Create an execution DMC then getModelData for Execution DMC */ fRunCtrl.getExecutor().submit(new Runnable() { public void run() { - fRunCtrl.getThreadData(dmc, rm); + fExecDmc = fRunCtrl.createMIExecutionContext(fGdbCtrl.getGDBDMContext(), 1); + + fRunCtrl.getThreadData(fExecDmc, rm); } }); fWait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER); @@ -169,7 +168,7 @@ public class GDBProcessesTest extends BaseTestCase { GDBThreadData threadData = rm.getData(); if(threadData == null) - fail("Thread data not returned for thread id = " + dmc.getThreadId()); + fail("Thread data not returned for thread id = " + fExecDmc.getThreadId()); else{ // Thread id is only a series of numbers Pattern pattern = Pattern.compile("\\d*", Pattern.MULTILINE); //$NON-NLS-1$ diff --git a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/MIRegistersTest.java b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/MIRegistersTest.java index 5933dbbc9a5..6b956fe583d 100644 --- a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/MIRegistersTest.java +++ b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/MIRegistersTest.java @@ -28,9 +28,6 @@ import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControlDMContext; import org.eclipse.dd.mi.service.IMIExecutionDMContext; -import org.eclipse.dd.mi.service.MIRunControl; -import org.eclipse.dd.mi.service.MIStack; -import org.eclipse.dd.mi.service.command.events.MIStoppedEvent; import org.eclipse.dd.tests.gdb.framework.AsyncCompletionWaitor; import org.eclipse.dd.tests.gdb.framework.BackgroundRunner; import org.eclipse.dd.tests.gdb.framework.BaseTestCase; @@ -57,15 +54,14 @@ public class MIRegistersTest extends BaseTestCase { * Name of the executable */ private static final String EXEC_NAME = "MultiThread.exe"; - + private static final String SRC_NAME = "MultiThread.cc"; + // Will be used to wait for asynchronous call to complete //private final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor(); private DsfSession fSession; private DsfServicesTracker fServicesTracker; private GDBControlDMContext fGdbControlDmc; private IRegisters fRegService; - private MIRunControl fRunControl; - private MIStack fStack; @Before public void init() throws Exception { @@ -78,17 +74,6 @@ public class MIRegistersTest extends BaseTestCase { fGdbControlDmc = gdbControl.getGDBDMContext(); fRegService = fServicesTracker.getService(IRegisters.class); - fRunControl = fServicesTracker.getService(MIRunControl.class); - fStack = fServicesTracker.getService(MIStack.class); - -// This is the way to have the entire application run -// final IDMContext execDMContext = ((MIRunControl)fRunControl).getExecutionDMC(); -// fRunControl.getExecutor().submit(new Runnable() { -// public void run() { -// fRunControl.resume(execDMContext, null); -// } -// }); - } @BeforeClass @@ -101,8 +86,6 @@ public class MIRegistersTest extends BaseTestCase { @After public void tearDown() { fRegService = null; - fRunControl = null; - fStack = null; } /* @@ -207,7 +190,7 @@ public class MIRegistersTest extends BaseTestCase { @Test public void getRegistersLength() throws Throwable { - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); assertTrue("The number of registers should have been " + NUMBER_OF_REGISTERS + @@ -218,7 +201,7 @@ public class MIRegistersTest extends BaseTestCase { @Test public void getRegisters() throws Throwable { - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); List regNames = Arrays.asList("eax","ecx","edx","ebx","esp","ebp","esi","edi","eip","eflags","cs","ss","ds","es","fs","gs","st0","st1","st2","st3","st4","st5","st6","st7","fctrl","fstat","ftag","fiseg","fioff","foseg","fooff","fop","xmm0","xmm1","xmm2","xmm3","xmm4","xmm5","xmm6","xmm7","mxcsr","orig_eax","mm0","mm1","mm2","mm3","mm4","mm5","mm6","mm7"); @@ -256,9 +239,8 @@ public class MIRegistersTest extends BaseTestCase { } } - //private static String REGISTER_VALUE = "16"; private String getModelDataForRegisterDataValue(IFrameDMContext frameDmc, String format, int regNo) throws Throwable { - final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor(); + final AsyncCompletionWaitor wait = new AsyncCompletionWaitor(); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); final FormattedValueDMContext valueDmc = fRegService.getFormattedValueContext(regDMCs[regNo], format); @@ -268,10 +250,10 @@ public class MIRegistersTest extends BaseTestCase { @Override protected void handleCompleted() { if (isSuccess()) { - fWait.setReturnInfo(getData()); + wait.setReturnInfo(getData()); } - fWait.waitFinished(getStatus()); + wait.waitFinished(getStatus()); } }; @@ -281,21 +263,19 @@ public class MIRegistersTest extends BaseTestCase { } }); - fWait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER); - assertTrue(fWait.getMessage(), fWait.isOK()); + wait.waitUntilDone(AsyncCompletionWaitor.WAIT_FOREVER); + assertTrue(wait.getMessage(), wait.isOK()); - FormattedValueDMData data = (FormattedValueDMData)fWait.getReturnInfo(); - String val = data.getFormattedValue(); - fWait.waitReset(); - return val; + FormattedValueDMData data = (FormattedValueDMData)wait.getReturnInfo(); + return data.getFormattedValue(); } private static String REGISTER_VALUE = ""; @Test public void getModelDataForRegisterDataValueInDifferentNumberFormats() throws Throwable { - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); String val = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); REGISTER_VALUE = val; @@ -317,21 +297,9 @@ public class MIRegistersTest extends BaseTestCase { @Test public void compareRegisterForMultipleExecutionContexts() throws Throwable { - final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor(); - - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + SyncUtil.SyncRunToLine(SRC_NAME, "22"); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 2); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); - - String regVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); - String regVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1); - String regVal2 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 2); - String regVal3 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 3); - String regVal4 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 4); - String regVal5 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 5); - - MIStoppedEvent stoppedEvent = SyncUtil.SyncRunToLine(EXEC_NAME + ".cc", "22"); - execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 2); - frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); String thread2RegVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); String thread2RegVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1); String thread2RegVal2 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 2); @@ -340,12 +308,12 @@ public class MIRegistersTest extends BaseTestCase { String thread2RegVal5 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 5); // Set execution context to 1 - execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); // Re-set the execution context to 2 and Fetch from the Cache - execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 2); + execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 2); frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); String dupliThread2RegVal0 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 0); String dupliThread2RegVal1 = getModelDataForRegisterDataValue(frameDmc, IFormattedValues.NATURAL_FORMAT, 1); @@ -368,15 +336,6 @@ public class MIRegistersTest extends BaseTestCase { final AsyncCompletionWaitor fWait = new AsyncCompletionWaitor(); final IRegisterDMContext[] regDMCs = getRegisters(frameDmc); - - - final RequestMonitor writeDone = - new RequestMonitor(fRegService.getExecutor(), null) { - @Override - protected void handleCompleted() { - fWait.waitFinished(getStatus()); - } - }; fRegService.getExecutor().submit(new Runnable() { public void run() { @@ -400,7 +359,7 @@ public class MIRegistersTest extends BaseTestCase { @Test public void writeRegisterNaturalFormat() throws Throwable{ - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); String regValue = "10"; int regIndex = 3; @@ -411,7 +370,7 @@ public class MIRegistersTest extends BaseTestCase { @Test public void writeRegisterHEXFormat() throws Throwable{ - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); String regValue = "0x10"; int regIndex = 3; @@ -423,7 +382,7 @@ public class MIRegistersTest extends BaseTestCase { @Test @Ignore public void writeRegisterBinaryFormat() throws Throwable{ - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); //String regValue = "0100101001"; String regValue = "10"; @@ -435,7 +394,7 @@ public class MIRegistersTest extends BaseTestCase { @Test public void writeRegisterOctalFormat() throws Throwable{ - IMIExecutionDMContext execDmc = fRunControl.createMIExecutionContext(fGdbControlDmc, 1); + IMIExecutionDMContext execDmc = SyncUtil.SyncCreateExecutionContext(fGdbControlDmc, 1); IFrameDMContext frameDmc = SyncUtil.SyncGetStackFrame(execDmc, 0); //String regValue = "10"; String regValue = "012"; diff --git a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/framework/SyncUtil.java b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/framework/SyncUtil.java index 39af5993f76..260e9ca1b18 100644 --- a/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/framework/SyncUtil.java +++ b/plugins/org.eclipse.dd.tests.gdb/src/org/eclipse/dd/tests/gdb/framework/SyncUtil.java @@ -26,12 +26,14 @@ import org.eclipse.dd.dsf.debug.service.IFormattedValues; import org.eclipse.dd.dsf.debug.service.IExpressions.IExpressionDMContext; import org.eclipse.dd.dsf.debug.service.IFormattedValues.FormattedValueDMContext; import org.eclipse.dd.dsf.debug.service.IFormattedValues.IFormattedDataDMContext; +import org.eclipse.dd.dsf.debug.service.IRunControl.IContainerDMContext; import org.eclipse.dd.dsf.debug.service.IRunControl.IExecutionDMContext; import org.eclipse.dd.dsf.debug.service.IRunControl.StepType; import org.eclipse.dd.dsf.debug.service.IStack.IFrameDMContext; import org.eclipse.dd.dsf.service.DsfServicesTracker; import org.eclipse.dd.dsf.service.DsfSession; import org.eclipse.dd.gdb.internal.provisional.service.command.GDBControl; +import org.eclipse.dd.mi.service.IMIExecutionDMContext; import org.eclipse.dd.mi.service.MIRunControl; import org.eclipse.dd.mi.service.MIStack; import org.eclipse.dd.mi.service.command.commands.MIBreakDelete; @@ -311,4 +313,15 @@ public class SyncUtil { }; return fSession.getExecutor().submit(callable).get(); } + + public static IMIExecutionDMContext SyncCreateExecutionContext(final IContainerDMContext parentCtx, final int threadId) + throws Throwable { + Callable callable = new Callable() { + public IMIExecutionDMContext call() throws Exception { + return fRunControl.createMIExecutionContext(parentCtx, threadId); + } + }; + return fSession.getExecutor().submit(callable).get(); +} + }