mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-10-04 11:23:50 +00:00
Merge branch 'stoptrackingtest' into gwt
This commit is contained in:
commit
6a8abeaacb
7 files changed
+330
-7
No files matched your search
@@ -23,9 +23,13 @@ public interface TrackedEvent {
|
||||
Iterable<TrackedRace> getTrackedRaces(BoatClass boatClass);
|
||||
|
||||
/**
|
||||
* Creates a {@link TrackedRace} based on the parameter specified and {@link #addTrackedRace(TrackedRace) adds} it to
|
||||
* this tracked event. Afterwards, calling {@link #getTrackedRace(RaceDefinition) getTrackedRace(raceDefinition)} will
|
||||
* return the result of this method call.
|
||||
* Creates a {@link TrackedRace} based on the parameter specified and {@link #addTrackedRace(TrackedRace) adds} it
|
||||
* to this tracked event. Afterwards, calling {@link #getTrackedRace(RaceDefinition) getTrackedRace(raceDefinition)}
|
||||
* will return the result of this method call.
|
||||
*
|
||||
* @param raceDefinitionSetToUpdate
|
||||
* if not <code>null</code>, after creating the {@link TrackedRace}, the <code>raceDefinition</code> is
|
||||
* {@link DynamicRaceDefinitionSet#addRaceDefinition(RaceDefinition) added} to that object.
|
||||
*/
|
||||
TrackedRace createTrackedRace(RaceDefinition raceDefinition, WindStore windStore,
|
||||
long millisecondsOverWhichToAverageWind, long millisecondsOverWhichToAverageSpeed,
|
||||
|
||||
+3
-1
@@ -141,7 +141,9 @@ public class TrackedEventImpl implements TrackedEvent {
|
||||
logger.log(Level.INFO, "Creating DynamicTrackedRaceImpl for RaceDefinition "+raceDefinition.getName());
|
||||
DynamicTrackedRaceImpl result = new DynamicTrackedRaceImpl(this, raceDefinition,
|
||||
windStore, millisecondsOverWhichToAverageWind, millisecondsOverWhichToAverageSpeed);
|
||||
raceDefinitionSetToUpdate.addRaceDefinition(raceDefinition);
|
||||
if (raceDefinitionSetToUpdate != null) {
|
||||
raceDefinitionSetToUpdate.addRaceDefinition(raceDefinition);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,10 @@ Bundle-Version: 1.0.0.qualifier
|
||||
Bundle-Vendor: SAP
|
||||
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
|
||||
Require-Bundle: com.sap.sailing.server,
|
||||
com.sap.sailing.server.api,
|
||||
com.sap.sailing.domain,
|
||||
com.sap.sailing.domain.tractracadapter,
|
||||
com.sap.sailing.domain.swisstimingadapter,
|
||||
org.json.simple;bundle-version="1.1.0",
|
||||
org.junit4
|
||||
Import-Package: com.tractrac.clientmodule
|
||||
@@ -0,0 +1,83 @@
|
||||
package com.sap.sailing.server.test;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.tracking.DynamicTrackedEvent;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.RacesHandle;
|
||||
import com.sap.sailing.domain.tracking.WindStore;
|
||||
|
||||
public class RaceTrackerMock implements RaceTracker{
|
||||
|
||||
private Long id;
|
||||
private Event event;
|
||||
private Set<RaceDefinition> raceDefinitions;
|
||||
private boolean isTracking;
|
||||
|
||||
public RaceTrackerMock() {
|
||||
// TODO check if necesary
|
||||
}
|
||||
|
||||
|
||||
|
||||
public RaceTrackerMock(Long id, Event event, Set<RaceDefinition> raceDefinitions, boolean isTracking) {
|
||||
super();
|
||||
this.id = id;
|
||||
this.event = event;
|
||||
this.raceDefinitions = raceDefinitions;
|
||||
this.isTracking = isTracking;
|
||||
}
|
||||
|
||||
public void setIsTracking(boolean isTracking){
|
||||
this.isTracking = isTracking;
|
||||
}
|
||||
|
||||
public boolean getIsTracking(){
|
||||
return isTracking;
|
||||
}
|
||||
|
||||
public RaceTrackerMock(Long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stop() throws MalformedURLException, IOException, InterruptedException {
|
||||
isTracking = false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Event getEvent() {
|
||||
return event;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Set<RaceDefinition> getRaces() {
|
||||
return raceDefinitions;
|
||||
}
|
||||
|
||||
@Override
|
||||
public RacesHandle getRaceHandle() {
|
||||
throw new RuntimeException("No race Handle in RaceTrackerMock");
|
||||
}
|
||||
|
||||
@Override
|
||||
public DynamicTrackedEvent getTrackedEvent() {
|
||||
// TODO Auto-generated method stub
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public WindStore getWindStore() {
|
||||
throw new RuntimeException("No wind store in racetracker mock");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Object getID() {
|
||||
return id;
|
||||
}
|
||||
|
||||
}
|
||||
+199
@@ -0,0 +1,199 @@
|
||||
package com.sap.sailing.server.test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
import static org.junit.Assert.assertNull;
|
||||
import static org.junit.Assert.assertSame;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.net.MalformedURLException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashSet;
|
||||
import java.util.Iterator;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.BoatClass;
|
||||
import com.sap.sailing.domain.base.Competitor;
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.base.RaceDefinition;
|
||||
import com.sap.sailing.domain.base.Waypoint;
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.base.impl.CourseImpl;
|
||||
import com.sap.sailing.domain.base.impl.EventImpl;
|
||||
import com.sap.sailing.domain.base.impl.RaceDefinitionImpl;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.domain.tracking.TrackedEvent;
|
||||
import com.sap.sailing.domain.tracking.TrackedRace;
|
||||
import com.sap.sailing.domain.tracking.impl.EmptyWindStore;
|
||||
import com.sap.sailing.server.RacingEventService;
|
||||
|
||||
public class RaceTrackerStartStopTest {
|
||||
|
||||
private static final String RACENAME3 = "racedef3";
|
||||
private static final String RACENAME2 = "racedef2";
|
||||
private static final String RACENAME1 = "racedef1";
|
||||
private final static String EVENTNAME = "TESTEVENT";
|
||||
private final static String BOATCLASSNAME = "HAPPYBOATCLASS";
|
||||
|
||||
private RacingEventServiceImplMock racingEventService;
|
||||
private Event event;
|
||||
private BoatClass boatClass;
|
||||
private Set<RaceTracker> raceTrackerSet = new HashSet<RaceTracker>();
|
||||
|
||||
private RaceDefinition raceDef1;
|
||||
private RaceDefinition raceDef2;
|
||||
private RaceDefinition raceDef3;
|
||||
|
||||
private RaceTrackerMock raceTracker1;
|
||||
private RaceTrackerMock raceTracker2;
|
||||
private RaceTrackerMock raceTracker3;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
racingEventService = new RacingEventServiceImplMock();
|
||||
boatClass = new BoatClassImpl(BOATCLASSNAME);
|
||||
event = new EventImpl(EVENTNAME, boatClass);
|
||||
racingEventService.getEventsByName().put(EVENTNAME, event);
|
||||
TrackedEvent trackedEvent1 = racingEventService.getOrCreateTrackedEvent(event);
|
||||
racingEventService.getEventsByNameMap().put(EVENTNAME, event);
|
||||
raceTrackerSet = new HashSet<RaceTracker>();
|
||||
raceDef1 = new RaceDefinitionImpl(RACENAME1, new CourseImpl("Course1", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
raceDef2 = new RaceDefinitionImpl(RACENAME2, new CourseImpl("Course2", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
raceDef3 = new RaceDefinitionImpl(RACENAME3, new CourseImpl("Course3", new ArrayList<Waypoint>()), boatClass, new ArrayList<Competitor>());
|
||||
event.addRace(raceDef1);
|
||||
trackedEvent1.createTrackedRace(raceDef1, /* windStore */ EmptyWindStore.INSTANCE, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||
event.addRace(raceDef2);
|
||||
trackedEvent1.createTrackedRace(raceDef2, /* windStore */ EmptyWindStore.INSTANCE, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||
event.addRace(raceDef3);
|
||||
trackedEvent1.createTrackedRace(raceDef3, /* windStore */ EmptyWindStore.INSTANCE, /* millisecondsOverWhichToAverageWind */ 0l,
|
||||
/* millisecondsOverWhichToAverageSpeed */ 0l, /* raceDefinitionSetToUpdate */ null);
|
||||
Set<RaceDefinition> raceDefinitionSetRace1 = new HashSet<RaceDefinition>();
|
||||
raceDefinitionSetRace1.add(raceDef1);
|
||||
Set<RaceDefinition> raceDefinitionSetRace2 = new HashSet<RaceDefinition>();
|
||||
raceDefinitionSetRace2.add(raceDef1);
|
||||
raceDefinitionSetRace2.add(raceDef2);
|
||||
Set<RaceDefinition> raceDefinitionSetRace3 = new HashSet<RaceDefinition>();
|
||||
raceDefinitionSetRace3.add(raceDef1);
|
||||
raceDefinitionSetRace3.add(raceDef2);
|
||||
raceDefinitionSetRace3.add(raceDef3);
|
||||
Long trackerID1 = new Long(1);
|
||||
Long trackerID2 = new Long(2);
|
||||
Long trackerID3 = new Long(3);
|
||||
raceTracker1 = new RaceTrackerMock(new Long(1), event, raceDefinitionSetRace1, true);
|
||||
raceTracker2 = new RaceTrackerMock(new Long(2), event, raceDefinitionSetRace2, true);
|
||||
raceTracker3 = new RaceTrackerMock(new Long(3), event, raceDefinitionSetRace3, true);
|
||||
raceTrackerSet.add(raceTracker1);
|
||||
raceTrackerSet.add(raceTracker2);
|
||||
raceTrackerSet.add(raceTracker3);
|
||||
racingEventService.getRaceTrackersByEventMap().put(event, raceTrackerSet);
|
||||
racingEventService.getRaceTrackersByIDMap().put(trackerID1, raceTracker1);
|
||||
racingEventService.getRaceTrackersByIDMap().put(trackerID2, raceTracker2);
|
||||
racingEventService.getRaceTrackersByIDMap().put(trackerID3, raceTracker3);
|
||||
}
|
||||
|
||||
/**
|
||||
* This test method tests, if the {@link RacingEventService#stopTracking(Event, RaceDefinition) stopTracking} method works correctly.
|
||||
*/
|
||||
@Test
|
||||
public void testStopTrackingRace() throws MalformedURLException, IOException, InterruptedException {
|
||||
Event event = racingEventService.getEventByName(EVENTNAME);
|
||||
TrackedEvent trackedEvent = racingEventService.getTrackedEvent(event);
|
||||
assertNotNull(event.getRaceByName(RACENAME2));
|
||||
assertNotNull(trackedEvent.getExistingTrackedRace(event.getRaceByName(RACENAME2)));
|
||||
racingEventService.stopTracking(event, raceDef2);
|
||||
// the raceDef2 should still be part of the event, and the corresponding tracked race should still be part
|
||||
// of the tracked event
|
||||
assertNotNull(event.getRaceByName(RACENAME2));
|
||||
boolean foundTrackedRaceForRaceDef2 = false;
|
||||
for (TrackedRace trackedRace : trackedEvent.getTrackedRaces()) {
|
||||
if (trackedRace.getRace().getName().equals(RACENAME2)) {
|
||||
foundTrackedRaceForRaceDef2 = true;
|
||||
}
|
||||
}
|
||||
assertTrue(foundTrackedRaceForRaceDef2);
|
||||
// The raceTracker2 and raceTracker3 should currently not be in track mode.
|
||||
assertTrue(raceTracker1.getIsTracking());
|
||||
assertFalse(raceTracker2.getIsTracking());
|
||||
assertFalse(raceTracker3.getIsTracking());
|
||||
// The RaceTrackersByID map should not contain the trackers raceTracker2 and raceTracker3 anymore
|
||||
assertTrue(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker1));
|
||||
assertFalse(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker2));
|
||||
assertFalse(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker3));
|
||||
// The RaceTrakcersByEvent map should contain a tracker with a set of RaceDefinitions, containing the
|
||||
// raceDefinition1
|
||||
assertEquals(1, racingEventService.getRaceTrackersByEventMap().size());
|
||||
Iterator<RaceTracker> raceTrackerIter = racingEventService.getRaceTrackersByEventMap().get(event).iterator();
|
||||
while (raceTrackerIter.hasNext()) {
|
||||
RaceTracker currentTracker = raceTrackerIter.next();
|
||||
assertSame(raceTracker1, currentTracker);
|
||||
}
|
||||
}
|
||||
/**
|
||||
* This test methods checks if the {@link RacingEventService#removeRace(Event, RaceDefinition) removeRace} method works correctly
|
||||
*/
|
||||
@Test
|
||||
public void testRemoveRace() throws MalformedURLException, IOException, InterruptedException {
|
||||
Event event = racingEventService.getEventByName(EVENTNAME);
|
||||
TrackedEvent trackedEvent = racingEventService.getTrackedEvent(event);
|
||||
assertNotNull(event.getRaceByName(RACENAME2));
|
||||
assertNotNull(trackedEvent.getExistingTrackedRace(event.getRaceByName(RACENAME2)));
|
||||
racingEventService.removeRace(event, raceDef2);
|
||||
// the raceDef2 should be removed from the event, and the corresponding tracked race should be removed
|
||||
// from the tracked event
|
||||
assertNull(event.getRaceByName(RACENAME2));
|
||||
boolean foundTrackedRaceForRaceDef2 = false;
|
||||
for (TrackedRace trackedRace : trackedEvent.getTrackedRaces()) {
|
||||
if (trackedRace.getRace().getName().equals(RACENAME2)) {
|
||||
foundTrackedRaceForRaceDef2 = true;
|
||||
}
|
||||
}
|
||||
assertFalse(foundTrackedRaceForRaceDef2);
|
||||
// The trackers map should still contain the raceTrackers
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker1));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker3));
|
||||
// The raceTrackerMap should still contain the raceTrackers. These raceTracker should not contain the raceDefinition raceDef2 anymore
|
||||
assertTrue(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker1));
|
||||
assertTrue(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker3));
|
||||
// The raceTracker should still exist; it shall still contain raceDef1 and raceDef2 because a tracker keeps tracking what it tracks...
|
||||
assertTrue(raceTracker1.getRaces().contains(raceDef1));
|
||||
assertEquals(1, raceTracker1.getRaces().size());
|
||||
assertTrue(raceTracker2.getRaces().contains(raceDef1));
|
||||
assertTrue(raceTracker2.getRaces().contains(raceDef2));
|
||||
assertEquals(2, raceTracker2.getRaces().size());
|
||||
assertTrue(raceTracker3.getRaces().contains(raceDef1));
|
||||
assertTrue(raceTracker3.getRaces().contains(raceDef2));
|
||||
assertTrue(raceTracker3.getRaces().contains(raceDef3));
|
||||
assertEquals(3, raceTracker3.getRaces().size());
|
||||
}
|
||||
|
||||
/**
|
||||
* This test methods checks if the {@link RacingEventService#removeRace(Event, RaceDefinition) removeRace} method works correctly if the
|
||||
* race to be stopped is the last race of a tracker
|
||||
*/
|
||||
@Test
|
||||
public void testRemoveLastRaceOfTracker() throws MalformedURLException, IOException, InterruptedException {
|
||||
racingEventService.removeRace(event, raceDef1);
|
||||
racingEventService.removeRace(event, raceDef2);
|
||||
// The event map should still contain the raceTrackers except of raceTracker1 and raceTracker2
|
||||
assertFalse(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker1));
|
||||
assertFalse(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByEventMap().get(event).contains(raceTracker3));
|
||||
// The RaceTrackerByID map should still contain raceTracker3, but not raceTracker1 and raceTracker2 anymore
|
||||
assertFalse(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker1));
|
||||
assertFalse(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker2));
|
||||
assertTrue(racingEventService.getRaceTrackersByIDMap().containsValue(raceTracker3));
|
||||
// The raceTracker 3 should exist, and it should contain all race definitions still
|
||||
assertTrue(raceTracker3.getRaces().contains(raceDef3));
|
||||
assertEquals(3, raceTracker3.getRaces().size());
|
||||
}
|
||||
|
||||
}
|
||||
+31
@@ -0,0 +1,31 @@
|
||||
package com.sap.sailing.server.test;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import com.sap.sailing.domain.base.Event;
|
||||
import com.sap.sailing.domain.tracking.RaceTracker;
|
||||
import com.sap.sailing.server.impl.RacingEventServiceImpl;
|
||||
|
||||
public class RacingEventServiceImplMock extends RacingEventServiceImpl {
|
||||
|
||||
public RacingEventServiceImplMock() {
|
||||
super();
|
||||
}
|
||||
|
||||
public Map<String, Event> getEventsByNameMap() {
|
||||
return eventsByName;
|
||||
}
|
||||
|
||||
public Map<Event, Set<RaceTracker>> getRaceTrackersByEventMap() {
|
||||
return raceTrackersByEvent;
|
||||
}
|
||||
|
||||
public Map<Object, RaceTracker> getRaceTrackersByIDMap() {
|
||||
return raceTrackersByID;
|
||||
}
|
||||
|
||||
public Map<String, Event> getEventsByName() {
|
||||
return eventsByName;
|
||||
}
|
||||
}
|
||||
+3
-3
@@ -81,9 +81,9 @@ public class RacingEventServiceImpl implements RacingEventService, EventFetcher,
|
||||
|
||||
private final WindTrackerFactory windTrackerFactory;
|
||||
|
||||
private final Map<String, Event> eventsByName;
|
||||
protected final Map<String, Event> eventsByName;
|
||||
|
||||
private final Map<Event, Set<RaceTracker>> raceTrackersByEvent;
|
||||
protected final Map<Event, Set<RaceTracker>> raceTrackersByEvent;
|
||||
|
||||
/**
|
||||
* Remembers the wind tracker and the port on which the UDP receiver with which the wind tracker is
|
||||
@@ -94,7 +94,7 @@ public class RacingEventServiceImpl implements RacingEventService, EventFetcher,
|
||||
/**
|
||||
* Remembers the trackers by paramURL/liveURI/storedURI to avoid duplication
|
||||
*/
|
||||
private final Map<Object, RaceTracker> raceTrackersByID;
|
||||
protected final Map<Object, RaceTracker> raceTrackersByID;
|
||||
|
||||
/**
|
||||
* Leaderboards managed by this racing event service
|
||||
|
||||
Reference in new issue
Block a user