Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java165
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());
+ }
+
+}

Back to the top