diff options
Diffstat (limited to 'dsf/org.eclipse.cdt.examples.dsf.pda/src/org/eclipse/cdt/tests/dsf/pda/service/command/CommandControlTestsBase.java')
-rw-r--r-- | dsf/org.eclipse.cdt.examples.dsf.pda/src/org/eclipse/cdt/tests/dsf/pda/service/command/CommandControlTestsBase.java | 165 |
1 files changed, 165 insertions, 0 deletions
diff --git a/dsf/org.eclipse.cdt.examples.dsf.pda/src/org/eclipse/cdt/tests/dsf/pda/service/command/CommandControlTestsBase.java b/dsf/org.eclipse.cdt.examples.dsf.pda/src/org/eclipse/cdt/tests/dsf/pda/service/command/CommandControlTestsBase.java new file mode 100644 index 00000000000..c4d2e7b4690 --- /dev/null +++ b/dsf/org.eclipse.cdt.examples.dsf.pda/src/org/eclipse/cdt/tests/dsf/pda/service/command/CommandControlTestsBase.java @@ -0,0 +1,165 @@ +/******************************************************************************* + * Copyright (c) 2007, 2008 Wind River Systems and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * Wind River Systems - initial API and implementation + *******************************************************************************/ +package org.eclipse.cdt.tests.dsf.pda.service.command; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.LinkedBlockingQueue; + +import junit.framework.Assert; + +import org.eclipse.cdt.dsf.concurrent.DataRequestMonitor; +import org.eclipse.cdt.dsf.concurrent.DefaultDsfExecutor; +import org.eclipse.cdt.dsf.concurrent.DsfExecutor; +import org.eclipse.cdt.dsf.concurrent.Query; +import org.eclipse.cdt.dsf.debug.service.command.IEventListener; +import org.eclipse.cdt.dsf.service.DsfSession; +import org.eclipse.cdt.examples.dsf.pda.service.PDABackend; +import org.eclipse.cdt.examples.dsf.pda.service.PDACommandControl; +import org.eclipse.cdt.examples.dsf.pda.service.commands.PDACommandResult; +import org.eclipse.cdt.tests.dsf.pda.util.Launching; +import org.eclipse.core.runtime.CoreException; +import org.junit.After; +import org.junit.Before; + +/** + * + */ +public class CommandControlTestsBase { + + protected static String fProgram; + + protected DsfExecutor fExecutor; + protected DsfSession fSession; + protected PDABackend fPDABackend; + protected PDACommandControl fCommandControl; + private BlockingQueue<Object> fEventsQueue = new LinkedBlockingQueue<Object>(); + + private BufferedReader fOutputReader; + + @Before + public void startup() throws CoreException, InterruptedException, ExecutionException, IOException { + + class InitializeCommandServiceQuery extends Query<Object> { + @Override + protected void execute(DataRequestMonitor<Object> rm) { + fCommandControl.initialize(rm); + } + }; + + fExecutor = new DefaultDsfExecutor(); + fSession = DsfSession.startSession(fExecutor, "PDA Test"); + + Process proc = Launching.launchPDA(fSession, null, fProgram); + Assert.assertNotNull(proc); + + // Remember the backend service of this session. + // Note this must be called after the above LaunchPDA(). + fPDABackend = Launching.getBackendService(); + + fOutputReader = new BufferedReader(new InputStreamReader(proc.getInputStream())); + Assert.assertTrue(fOutputReader.readLine().contains("-debug")); + + fCommandControl = new PDACommandControl(fSession); + + fCommandControl.addEventListener(new IEventListener() { + public void eventReceived(Object output) { + fEventsQueue.add(output); + } + }); + + InitializeCommandServiceQuery initQuery = new InitializeCommandServiceQuery(); + fExecutor.execute(initQuery); + initQuery.get(); + Assert.assertEquals("debug connection accepted", fOutputReader.readLine()); + } + + @After + public void shutdown() throws CoreException, InterruptedException, ExecutionException, IOException { + if (fOutputReader != null) { + fOutputReader.close(); + } + + class ShutdownCommandServiceQuery extends Query<Object> { + @Override + protected void execute(DataRequestMonitor<Object> rm) { + fCommandControl.shutdown(rm); + } + }; + + if (fExecutor != null) { + ShutdownCommandServiceQuery shutdownQuery = new ShutdownCommandServiceQuery(); + fExecutor.execute(shutdownQuery); + shutdownQuery.get(); + } + + class ShutdownBackendServiceQuery extends Query<Object> { + @Override + protected void execute(DataRequestMonitor<Object> rm) { + fPDABackend.shutdown(rm); + } + }; + + if (fExecutor != null) { + ShutdownBackendServiceQuery shutdownQuery = new ShutdownBackendServiceQuery(); + fExecutor.execute(shutdownQuery); + shutdownQuery.get(); + } + } + + protected void sendCommand(String command) throws Throwable { + sendCommand(command, "ok"); + } + + protected void sendCommand(String command, String expectedResult) throws Throwable { + + final PDATestCommand testCommand = new PDATestCommand(fCommandControl.getContext(), command); + + // Test sending the command and checking all listeners were called. + Query<PDACommandResult> sendCommandQuery = new Query<PDACommandResult>() { + @Override + protected void execute(DataRequestMonitor<PDACommandResult> rm) { + fCommandControl.queueCommand(testCommand, rm); + } + }; + + String responseText = null; + fExecutor.execute(sendCommandQuery); + try { + PDACommandResult result = sendCommandQuery.get(); + responseText = result.fResponseText; + } catch (ExecutionException e) { + if (e.getCause() instanceof CoreException) { + responseText = ((CoreException)e.getCause()).getStatus().getMessage(); + } else { + throw e.getCause(); + } + } + Assert.assertEquals("Command returned an unexpected result", expectedResult, responseText); + + } + + protected void clearEvents() { + fEventsQueue.clear(); + } + + protected void expectEvent(String expectedEvent) throws InterruptedException { + Assert.assertEquals("Unexpected event received", expectedEvent, fEventsQueue.take()); + } + + protected void expectOutput(String expectedOutput) throws IOException { + Assert.assertEquals("Unexpected output received", expectedOutput, fOutputReader.readLine()); + } + +} |