failing test cases for bug 1113

This commit is contained in:
Axel Uhl
2012-12-21 13:47:25 +01:00
parent df80e481de
commit 565a0ab536
17 changed files with 261 additions and 84 deletions
@@ -5,6 +5,7 @@ import java.util.List;
import com.sap.sailing.domain.swisstimingadapter.Race;
import com.sap.sailing.domain.swisstimingadapter.RaceSpecificMessageLoader;
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingConfiguration;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
import com.sap.sailing.domain.swisstimingadapter.persistence.impl.SwissTimingAdapterPersistenceImpl;
@@ -15,6 +16,8 @@ public interface SwissTimingAdapterPersistence extends RaceSpecificMessageLoader
SwissTimingAdapterPersistence INSTANCE = new SwissTimingAdapterPersistenceImpl(MongoDBService.INSTANCE, SwissTimingFactory.INSTANCE);
Iterable<SwissTimingConfiguration> getSwissTimingConfigurations();
Iterable<SwissTimingArchiveConfiguration> getSwissTimingArchiveConfigurations();
/**
* Loads all messages received and stored to the DB starting with sequence number <code>firstSequenceNumber</code>.
@@ -38,6 +41,8 @@ public interface SwissTimingAdapterPersistence extends RaceSpecificMessageLoader
void storeSwissTimingConfiguration(SwissTimingConfiguration swissTimingConfiguration);
void storeSwissTimingArchiveConfiguration(SwissTimingArchiveConfiguration createSwissTimingArchiveConfiguration);
void storeSailMasterMessage(SailMasterMessage message);
void storeRace(Race race);
@@ -1,6 +1,6 @@
package com.sap.sailing.domain.swisstimingadapter.persistence.impl;
public enum CollectionNames {
SWISSTIMING_CONFIGURATIONS, LAST_MESSAGE_COUNT,
RACES_MASTERDATA, RACES_MESSAGES, COMMAND_MESSAGES
SWISSTIMING_CONFIGURATIONS, SWISSTIMING_ARCHIVE_CONFIGURATIONS, LAST_MESSAGE_COUNT,
RACES_MASTERDATA, RACES_MESSAGES, COMMAND_MESSAGES
}
@@ -2,7 +2,7 @@ package com.sap.sailing.domain.swisstimingadapter.persistence.impl;
public enum FieldNames {
// SwissTiming configuration parameters:
ST_CONFIG_NAME, ST_CONFIG_HOSTNAME, ST_CONFIG_PORT, ST_CONFIG_CAN_SEND_REQUESTS,
ST_CONFIG_NAME, ST_CONFIG_HOSTNAME, ST_CONFIG_PORT, ST_CONFIG_CAN_SEND_REQUESTS, ST_ARCHIVE_JSON_URL,
// last message count field:
LAST_MESSAGE_COUNT,
@@ -11,5 +11,5 @@ public enum FieldNames {
MESSAGE_SEQUENCE_NUMBER, MESSAGE_CONTENT, MESSAGE_COMMAND,
// race specific message and masterdata
RACE_ID, RACE_DESCRIPTION, RACE_STARTTIME,
RACE_ID, RACE_DESCRIPTION, RACE_STARTTIME
}
@@ -16,6 +16,7 @@ import com.sap.sailing.domain.base.impl.MillisecondsTimePoint;
import com.sap.sailing.domain.swisstimingadapter.MessageType;
import com.sap.sailing.domain.swisstimingadapter.Race;
import com.sap.sailing.domain.swisstimingadapter.SailMasterMessage;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingArchiveConfiguration;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingConfiguration;
import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory;
import com.sap.sailing.domain.swisstimingadapter.persistence.SwissTimingAdapterPersistence;
@@ -85,8 +86,8 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
} catch (Throwable t) {
// something went wrong during DB access; report, then use empty new wind track
logger.log(Level.SEVERE,
"Error connecting to MongoDB, unable to load recorded TracTrac configurations. Check MongoDB settings.");
logger.throwing(SwissTimingAdapterPersistenceImpl.class.getName(), "getTracTracConfigurations", t);
"Error connecting to MongoDB, unable to load recorded SwissTiming configurations. Check MongoDB settings.");
logger.throwing(SwissTimingAdapterPersistenceImpl.class.getName(), "getSwissTimingConfigurations", t);
}
return result;
}
@@ -98,6 +99,29 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
.get(FieldNames.ST_CONFIG_PORT.name()), canSendRequests == null ? false : canSendRequests);
}
@Override
public Iterable<SwissTimingArchiveConfiguration> getSwissTimingArchiveConfigurations() {
List<SwissTimingArchiveConfiguration> result = new ArrayList<SwissTimingArchiveConfiguration>();
try {
DBCollection stConfigs = database.getCollection(CollectionNames.SWISSTIMING_ARCHIVE_CONFIGURATIONS.name());
for (DBObject o : stConfigs.find()) {
SwissTimingArchiveConfiguration stConfig = loadSwissTimingArchiveConfiguration(o);
result.add(stConfig);
}
Collections.reverse(result);
} catch (Throwable t) {
// something went wrong during DB access; report, then use empty new wind track
logger.log(Level.SEVERE,
"Error connecting to MongoDB, unable to load recorded SwissTiming archive configurations. Check MongoDB settings.");
logger.throwing(SwissTimingAdapterPersistenceImpl.class.getName(), "getSwissTimingArchiveConfigurations", t);
}
return result;
}
private SwissTimingArchiveConfiguration loadSwissTimingArchiveConfiguration(DBObject object) {
return swissTimingFactory.createSwissTimingArchiveConfiguration((String) object.get(FieldNames.ST_ARCHIVE_JSON_URL.name()));
}
@Override
public List<SailMasterMessage> loadCommandMessages(int firstSequenceNumber) {
DBCollection commandMessages = database.getCollection(CollectionNames.COMMAND_MESSAGES.name());
@@ -192,6 +216,19 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers
stConfigCollection.insert(result);
}
@Override
public void storeSwissTimingArchiveConfiguration(
SwissTimingArchiveConfiguration createSwissTimingArchiveConfiguration) {
DBCollection stArchiveConfigCollection = database.getCollection(CollectionNames.SWISSTIMING_ARCHIVE_CONFIGURATIONS.name());
stArchiveConfigCollection.ensureIndex(CollectionNames.SWISSTIMING_ARCHIVE_CONFIGURATIONS.name());
BasicDBObject result = new BasicDBObject();
result.put(FieldNames.ST_ARCHIVE_JSON_URL.name(), createSwissTimingArchiveConfiguration.getJsonUrl());
for (DBObject equallyNamedConfig : stArchiveConfigCollection.find(result)) {
stArchiveConfigCollection.remove(equallyNamedConfig);
}
stArchiveConfigCollection.insert(result);
}
@Override
public void storeSailMasterMessage(SailMasterMessage message) {
// Attention: this method is very time critical as we will receive thousands of messages in a short time