mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-09-30 09:26:44 +00:00
refactored listener/receiver concept for more reproducable test case execution
This commit is contained in:
+15
-4
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
+28
-16
@@ -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 {
|
||||
|
||||
+31
-23
@@ -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) {
|
||||
|
||||
+1
-1
@@ -73,7 +73,7 @@ public class ReceiveTrackingDataTest extends AbstractTracTracLiveTest {
|
||||
listeners.add(raceListener);
|
||||
}
|
||||
}
|
||||
addListenersForStoredDataAndStartController(listeners.toArray(new TypeController[0]));
|
||||
addListenersForStoredDataAndStartController(domainFactory.getUpdateReceivers(trackedEvent));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+28
-17
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user