refactored listener/receiver concept for more reproducable test case execution

This commit is contained in:
Axel Uhl
2011-05-31 13:34:27 +02:00
parent c176c2ad9d
commit f7c7301b02
5 changed files with 103 additions and 61 deletions
@@ -9,13 +9,16 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
import java.net.URLConnection;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import com.maptrack.client.io.TypeController;
import com.sap.sailing.domain.tractracadapter.Receiver;
import com.sap.tractrac.clientmodule.util.Base64;
import com.tractrac.clientmodule.Event;
import com.tractrac.clientmodule.data.DataController;
@@ -30,6 +33,7 @@ public abstract class AbstractTracTracLiveTest implements Listener {
private final URI liveUri;
private final URI storedUri;
private Event event;
private final Collection<Receiver> receivers;
private Thread ioThread;
private DataController controller;
@@ -38,6 +42,7 @@ public abstract class AbstractTracTracLiveTest implements Listener {
paramUrl = new URL("http://www.traclive.dk/simulateconf/j80race12.txt");
liveUri = new URI("tcp://localhost:4410");
storedUri = new URI("tcp://localhost:4411");
receivers = new HashSet<Receiver>();
}
@Before
@@ -56,9 +61,12 @@ public abstract class AbstractTracTracLiveTest implements Listener {
// after adding their listeners
}
protected void addListenersForStoredDataAndStartController(TypeController... listenersForStoredData) {
for (TypeController listener : listenersForStoredData) {
getController().add(listener);
protected void addListenersForStoredDataAndStartController(Iterable<Receiver> receivers) {
for (Receiver receiver : receivers) {
this.receivers.add(receiver);
for (TypeController typeController : receiver.getTypeControllers()) {
getController().add(typeController);
}
}
startController();
}
@@ -86,6 +94,9 @@ public abstract class AbstractTracTracLiveTest implements Listener {
} catch (InterruptedException ex) {
Assert.fail(ex.getMessage());
}
for (Receiver receiver : receivers) {
receiver.stop();
}
}
private void startRaceSimulation(int speedMultiplier, int raceNumber)
@@ -147,7 +158,7 @@ public abstract class AbstractTracTracLiveTest implements Listener {
@Override
public void storedDataProgress(float progress) {
System.out.println("Stored data progreess: "+progress);
System.out.println("Stored data progress: "+progress);
}
@@ -5,12 +5,14 @@ import static org.junit.Assert.assertNotNull;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.util.Collections;
import org.junit.Test;
import com.maptrack.client.io.TypeController;
import com.sap.sailing.domain.base.Position;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.Receiver;
import com.tractrac.clientmodule.ControlPoint;
import com.tractrac.clientmodule.data.ControlPointPositionData;
import com.tractrac.clientmodule.data.ICallbackData;
@@ -33,23 +35,33 @@ public class PositionConversionTest extends AbstractTracTracLiveTest {
final ControlPointPositionData[] firstData = new ControlPointPositionData[1];
final Object semaphor = new Object();
TypeController listener = ControlPointPositionData.subscribe(getEvent(),
new ICallbackData<ControlPoint, ControlPointPositionData>() {
private boolean first = true;
public void gotData(ControlPoint tracked,
ControlPointPositionData record, boolean isLiveData) {
if (first) {
synchronized (semaphor) {
firstTracked[0] = tracked;
firstData[0] = record;
semaphor.notifyAll();
Receiver receiver = new Receiver() {
@Override
public void stop() {
}
@Override
public Iterable<TypeController> getTypeControllers() {
TypeController listener = ControlPointPositionData.subscribe(getEvent(),
new ICallbackData<ControlPoint, ControlPointPositionData>() {
private boolean first = true;
public void gotData(ControlPoint tracked, ControlPointPositionData record,
boolean isLiveData) {
if (first) {
synchronized (semaphor) {
firstTracked[0] = tracked;
firstData[0] = record;
semaphor.notifyAll();
}
first = false;
}
}
first = false;
}
}
}, /* fromTime */0 /* means ALL */, /* toTime */ Long.MAX_VALUE);
addListenersForStoredDataAndStartController(listener);
}, /* fromTime */0 /* means ALL */, /* toTime */Long.MAX_VALUE);
return Collections.singleton(listener);
}
};
addListenersForStoredDataAndStartController(Collections.singleton(receiver));
synchronized (semaphor) {
while (firstTracked[0] == null) {
try {
@@ -6,6 +6,7 @@ import static org.junit.Assert.assertTrue;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.junit.Before;
@@ -42,34 +43,41 @@ public class ReceiveMarkPassingDataTest extends AbstractTracTracLiveTest {
*/
@Before
public void setupListener() {
Race race = getEvent().getRaceList().iterator().next();
TypeController markPassingsListener = MarkPassingsData.subscribe(race,
new ICallbackData<RaceCompetitor, MarkPassingsData>() {
private boolean first = true;
@Override
public void gotData(RaceCompetitor route,
MarkPassingsData record, boolean isLiveData) {
if (first) {
synchronized (semaphor) {
firstData[0] = record;
semaphor.notifyAll();
final Race race = getEvent().getRaceList().iterator().next();
Receiver receiver = new Receiver() {
@Override
public Iterable<TypeController> getTypeControllers() {
TypeController markPassingsListener = MarkPassingsData.subscribe(race,
new ICallbackData<RaceCompetitor, MarkPassingsData>() {
private boolean first = true;
@Override
public void gotData(RaceCompetitor route, MarkPassingsData record, boolean isLiveData) {
if (first) {
synchronized (semaphor) {
firstData[0] = record;
semaphor.notifyAll();
}
first = false;
}
}
first = false;
}
}
});
List<TypeController> listeners = new ArrayList<TypeController>();
listeners.add(markPassingsListener);
for (Receiver receiver : DomainFactory.INSTANCE.getUpdateReceivers(
});
return Collections.singleton(markPassingsListener);
}
@Override
public void stop() {
}
};
List<Receiver> receivers = new ArrayList<Receiver>();
receivers.add(receiver);
for (Receiver r : DomainFactory.INSTANCE.getUpdateReceivers(
DomainFactory.INSTANCE.trackEvent(DomainFactory.INSTANCE.createEvent(getEvent())),
ReceiverType.RACECOURSE, ReceiverType.MARKPOSITIONS, ReceiverType.RACESTARTFINISH,
ReceiverType.RAWPOSITIONS)) {
for (TypeController tc : receiver.getTypeControllers()) {
listeners.add(tc);
}
receivers.add(r);
}
addListenersForStoredDataAndStartController(markPassingsListener);
addListenersForStoredDataAndStartController(receivers);
raceDefinition = DomainFactory.INSTANCE.getRaceDefinition(race);
synchronized (semaphor) {
while (firstData[0] == null) {
@@ -73,7 +73,7 @@ public class ReceiveTrackingDataTest extends AbstractTracTracLiveTest {
listeners.add(raceListener);
}
}
addListenersForStoredDataAndStartController(listeners.toArray(new TypeController[0]));
addListenersForStoredDataAndStartController(domainFactory.getUpdateReceivers(trackedEvent));
}
@Test
@@ -5,6 +5,7 @@ import static org.junit.Assert.assertNotNull;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.util.Collections;
import org.junit.Test;
@@ -12,6 +13,7 @@ import com.maptrack.client.io.TypeController;
import com.sap.sailing.domain.base.Course;
import com.sap.sailing.domain.base.impl.Util;
import com.sap.sailing.domain.tractracadapter.DomainFactory;
import com.sap.sailing.domain.tractracadapter.Receiver;
import com.tractrac.clientmodule.Route;
import com.tractrac.clientmodule.data.ICallbackData;
import com.tractrac.clientmodule.data.RouteData;
@@ -29,24 +31,33 @@ public class RouteAssemblyTest extends AbstractTracTracLiveTest {
final RouteData[] firstData = new RouteData[1];
final Object semaphor = new Object();
TypeController routeListener = RouteData.subscribe(getEvent().getRaceList().iterator().next(),
new ICallbackData<Route, RouteData>() {
private boolean first = true;
@Override
public void gotData(Route route,
RouteData record, boolean isLiveData) {
if (first) {
synchronized (semaphor) {
firstRoute[0] = route;
firstData[0] = record;
semaphor.notifyAll();
Receiver receiver = new Receiver() {
@Override
public void stop() {
}
@Override
public Iterable<TypeController> getTypeControllers() {
TypeController routeListener = RouteData.subscribe(getEvent().getRaceList().iterator().next(),
new ICallbackData<Route, RouteData>() {
private boolean first = true;
@Override
public void gotData(Route route, RouteData record, boolean isLiveData) {
if (first) {
synchronized (semaphor) {
firstRoute[0] = route;
firstData[0] = record;
semaphor.notifyAll();
}
first = false;
}
}
first = false;
}
}
});
addListenersForStoredDataAndStartController(routeListener);
});
return Collections.singleton(routeListener);
}
};
addListenersForStoredDataAndStartController(Collections.singleton(receiver));
synchronized (semaphor) {
while (firstRoute[0] == null) {
try {