blob: a5f2811e3090542274c200033e97719409d94562 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 IBM Corporation 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:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.e4.languages.javascript.debug.connect.test;
import java.io.IOException;
import junit.framework.TestCase;
import org.eclipse.e4.languages.javascript.debug.connect.Connection;
import org.eclipse.e4.languages.javascript.debug.connect.DebugRuntime;
import org.eclipse.e4.languages.javascript.debug.connect.DisconnectException;
import org.eclipse.e4.languages.javascript.debug.connect.EventPacket;
import org.eclipse.e4.languages.javascript.debug.connect.Packet;
import org.eclipse.e4.languages.javascript.debug.connect.PipedTransportService;
import org.eclipse.e4.languages.javascript.debug.connect.Request;
import org.eclipse.e4.languages.javascript.debug.connect.Response;
import org.eclipse.e4.languages.javascript.debug.connect.TimeoutException;
import org.eclipse.e4.languages.javascript.debug.connect.TransportService;
import org.eclipse.e4.languages.javascript.debug.connect.TransportService.ListenerKey;
public class DebugRuntimeTest extends TestCase {
boolean complete = false;
public void testSendEvent() throws IOException, InterruptedException {
final TransportService service = new PipedTransportService();
final ListenerKey key = service.startListening("9000");
Thread t = new Thread() {
public void run() {
Connection c = null;
DebugRuntime runtime = null;
try {
c = service.accept(key, 5000, 5000);
assertNotNull(c);
runtime = new DebugRuntime(c);
runtime.sendEvent(new EventPacket("test"));
synchronized (Thread.currentThread()) {
if (!complete)
Thread.currentThread().wait(5000);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
} catch (DisconnectException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} finally {
if (runtime != null)
runtime.dispose();
}
}
};
t.start();
Connection c = service.attach("9000", 5000, 5000);
assertNotNull(c);
try {
Packet packet = c.readPacket();
assertTrue(packet instanceof EventPacket);
EventPacket event = (EventPacket) packet;
assertTrue(event.getEvent().equals("test"));
} finally {
c.close();
synchronized (t) {
complete = true;
t.notify();
}
}
t.join(5000);
service.stopListening(key);
}
public void testReceiveRequestSendResponse() throws IOException, InterruptedException {
final TransportService service = new PipedTransportService();
final ListenerKey key = service.startListening("9000");
Thread t = new Thread() {
public void run() {
Connection c = null;
DebugRuntime runtime = null;
try {
c = service.accept(key, 5000, 5000);
assertNotNull(c);
runtime = new DebugRuntime(c);
Request request = runtime.receiveRequest(5000);
runtime.sendResponse(new Response(request.getSequence(), request.getCommand()));
synchronized (Thread.currentThread()) {
Thread.currentThread().wait();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
fail();
} catch (DisconnectException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (TimeoutException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if (runtime != null)
runtime.dispose();
}
}
};
t.start();
Connection c = service.attach("9000", 5000, 5000);
assertNotNull(c);
try {
Request request = new Request("test");
c.writePacket(request);
Packet packet = c.readPacket();
assertTrue(packet instanceof Response);
Response response = (Response) packet;
assertTrue(response.getCommand().equals("test"));
assertTrue(response.getRequestSequence() == request.getSequence());
} finally {
c.close();
synchronized (t) {
t.notify();
}
}
t.join(5000);
service.stopListening(key);
}
// public void testSendEventWithConnectionHelper() throws IOException, DisconnectException {
// final TransportService service = new PipedTransportService();
//
// ConnectionHelper helper = new ConnectionHelper(service, "");
// DebugRuntime runtime = new DebugRuntime(helper.getServerConnection());
// Connection c = helper.getClientConnection();
// try {
// runtime.sendEvent(new EventPacket("test"));
// Packet packet = c.readPacket();
// assertTrue(packet instanceof EventPacket);
// EventPacket event = (EventPacket) packet;
// assertTrue(event.getEvent().equals("test"));
// } finally {
// c.close();
// runtime.dispose();
// }
// }
}