blob: bb0f1b3a9b1b933449a19550d0bceab23cd0c691 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2017 xored software, Inc. 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:
* xored software, Inc. - initial API and Implementation (Alex Panchenko)
*******************************************************************************/
package org.eclipse.dltk.debug.dbgp.tests.service;
import static org.junit.Assert.*;
import java.io.IOException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.dltk.dbgp.IDbgpSession;
import org.eclipse.dltk.internal.debug.core.model.DbgpService;
import org.junit.Before;
import org.junit.Test;
public class DbgpServiceDispatcherTests extends AbstractDbgpServiceTests {
private static final String IDE1 = "IDE001";
private static final String IDE2 = "IDE002";
private static final String IDE3 = "IDE003";
private static final int COUNT1 = 10;
private static final int COUNT2 = 20;
private static final int COUNT3 = 5;
volatile int count1;
volatile int count2;
volatile int count3;
@Override
@Before
public void setUp() throws Exception {
super.setUp();
count1 = 0;
count2 = 0;
count3 = 0;
}
@Test
public void testInitPacketParser() throws IOException {
final DbgpService service = createService(ANY_PORT);
try {
service.registerAcceptor(IDE1, new AbstractDbgpAcceptor() {
@Override
public void acceptDbgpThread(IDbgpSession session, IProgressMonitor monitor) {
synchronized (DbgpServiceDispatcherTests.this) {
++count1;
}
}
});
service.registerAcceptor(IDE2, new AbstractDbgpAcceptor() {
@Override
public void acceptDbgpThread(IDbgpSession session, IProgressMonitor monitor) {
synchronized (DbgpServiceDispatcherTests.this) {
++count2;
}
}
});
service.registerAcceptor(IDE3, new AbstractDbgpAcceptor() {
@Override
public void acceptDbgpThread(IDbgpSession session, IProgressMonitor monitor) {
synchronized (DbgpServiceDispatcherTests.this) {
++count3;
}
}
});
for (int i = 0; i < COUNT1; ++i) {
final byte[] packet = TestInitPacket.build(IDE1);
assertNotNull(packet);
performOperation(service.getPort(), new SendPacketOperation(packet));
}
for (int i = 0; i < COUNT2; ++i) {
final byte[] packet = TestInitPacket.build(IDE2);
assertNotNull(packet);
performOperation(service.getPort(), new SendPacketOperation(packet));
}
for (int i = 0; i < COUNT3; ++i) {
final byte[] packet = TestInitPacket.build(IDE3);
assertNotNull(packet);
performOperation(service.getPort(), new SendPacketOperation(packet));
}
for (int i = 0; i < 40; ++i) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
//
}
synchronized (DbgpServiceDispatcherTests.this) {
if (count1 + count2 + count3 == COUNT1 + COUNT2 + COUNT3) {
break;
}
}
}
} finally {
service.shutdown();
}
assertEquals(COUNT1, count1);
assertEquals(COUNT2, count2);
assertEquals(COUNT3, count3);
}
}