From 4ea3f2d437a906613263d52c82db0c917bc50167 Mon Sep 17 00:00:00 2001 From: fmittag Date: Mon, 14 Nov 2011 17:48:27 +0100 Subject: [PATCH] first version of a new test executing a storeAndForward test from a list of raw messages (source is here a file) --- .../SwissTimingAdapterPersistence.java | 1 + .../SwissTimingAdapterPersistenceImpl.java | 13 ++ .../resources/InitMessagesScript.txt | 5 + .../test/ScriptedMessages.java | 52 ++++++++ .../test/ScriptedStoreAndForwardTest.java | 126 ++++++++++++++++++ 5 files changed, 197 insertions(+) create mode 100644 java/com.sap.sailing.domain.swisstimingadapter.test/resources/InitMessagesScript.txt create mode 100644 java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedMessages.java create mode 100644 java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedStoreAndForwardTest.java diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java index 7464e0aa920..3e2c932e26a 100644 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/SwissTimingAdapterPersistence.java @@ -46,4 +46,5 @@ public interface SwissTimingAdapterPersistence extends RaceSpecificMessageLoader void dropAllRaceMasterData(); + void dropAllMessageData(); } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java index a781e048797..33d259c0df5 100755 --- a/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java +++ b/java/com.sap.sailing.domain.swisstimingadapter.persistence/src/com/sap/sailing/domain/swisstimingadapter/persistence/impl/SwissTimingAdapterPersistenceImpl.java @@ -243,4 +243,17 @@ public class SwissTimingAdapterPersistenceImpl implements SwissTimingAdapterPers DBCollection racesCollection = database.getCollection(CollectionNames.RACES_MASTERDATA.name()); racesCollection.drop(); } + + @Override + public void dropAllMessageData() { + + DBCollection rawMessageCollection = database.getCollection(CollectionNames.RAW_MESSAGES.name()); + rawMessageCollection.drop(); + + DBCollection racesMessageCollection = database.getCollection(CollectionNames.RACES_MESSAGES.name()); + racesMessageCollection.drop(); + + DBCollection cmdMessageCollection = database.getCollection(CollectionNames.COMMAND_MESSAGES.name()); + cmdMessageCollection.drop(); + } } diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/resources/InitMessagesScript.txt b/java/com.sap.sailing.domain.swisstimingadapter.test/resources/InitMessagesScript.txt new file mode 100644 index 00000000000..fe2beb45737 --- /dev/null +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/resources/InitMessagesScript.txt @@ -0,0 +1,5 @@ +RAC|2|4711;A wonderful test race|4712;Not such a wonderful race +STL|4711|2|GER 8414;GER;Polgar/Koy|GER 8140;GER;Schlonski/Bohn +STL|4712|3|GER 8340;GER;Stanjek/Kleen|GER 8433;GER;Babendererde/Jacobs|GER 8299;GER;Elsner/Schulz +CCG|4711|2|1;Lee Gate;LG1;LG2|2;Windward;WW1 +CCG|4712|3|1;Lee Gate;LG1;LG2|2;Windward;WW1|3;Offset;OS1 diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedMessages.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedMessages.java new file mode 100644 index 00000000000..b4467918bc5 --- /dev/null +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedMessages.java @@ -0,0 +1,52 @@ +package com.sap.sailing.domain.swisstimingadapter.test; + +import java.io.BufferedReader; +import java.io.DataInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public class ScriptedMessages { + + protected List messages; + + public ScriptedMessages(InputStream scriptInputStream) { + super(); + + messages = new ArrayList(); + + try { + // read the script from an inputstream + DataInputStream in = new DataInputStream(scriptInputStream); + BufferedReader br = new BufferedReader(new InputStreamReader(in)); + + String strLine; + + // read line by line + while ((strLine = br.readLine()) != null) { + messages.add(strLine); + } + + in.close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + + public ScriptedMessages(List scriptMessages) { + super(); + + this.messages = scriptMessages; + } + + public List getMessages() { + return messages; + } + + public void setMessages(List scriptMessages) { + this.messages = scriptMessages; + } + +} diff --git a/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedStoreAndForwardTest.java b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedStoreAndForwardTest.java new file mode 100644 index 00000000000..9d95dc10e64 --- /dev/null +++ b/java/com.sap.sailing.domain.swisstimingadapter.test/src/com/sap/sailing/domain/swisstimingadapter/test/ScriptedStoreAndForwardTest.java @@ -0,0 +1,126 @@ +package com.sap.sailing.domain.swisstimingadapter.test; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.net.UnknownHostException; +import java.text.ParseException; +import java.util.ArrayList; +import java.util.List; +import java.util.logging.Logger; + +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import com.mongodb.BasicDBObject; +import com.mongodb.DB; +import com.mongodb.DBCollection; +import com.sap.sailing.domain.swisstimingadapter.Competitor; +import com.sap.sailing.domain.swisstimingadapter.Race; +import com.sap.sailing.domain.swisstimingadapter.SailMasterAdapter; +import com.sap.sailing.domain.swisstimingadapter.SailMasterConnector; +import com.sap.sailing.domain.swisstimingadapter.SailMasterTransceiver; +import com.sap.sailing.domain.swisstimingadapter.StartList; +import com.sap.sailing.domain.swisstimingadapter.SwissTimingFactory; +import com.sap.sailing.domain.swisstimingadapter.persistence.StoreAndForward; +import com.sap.sailing.domain.swisstimingadapter.persistence.SwissTimingAdapterPersistence; +import com.sap.sailing.domain.swisstimingadapter.persistence.impl.CollectionNames; +import com.sap.sailing.domain.swisstimingadapter.persistence.impl.FieldNames; +import com.sap.sailing.mongodb.Activator; + +public class ScriptedStoreAndForwardTest { + private static final Logger logger = Logger.getLogger(ScriptedStoreAndForwardTest.class.getName()); + + private static final int RECEIVE_PORT = 6543; + private static final int CLIENT_PORT = 6544; + + private DB db; + private StoreAndForward storeAndForward; + private Socket sendingSocket; + private OutputStream sendingStream; + private SailMasterTransceiver transceiver; + private SailMasterConnector connector; + private SwissTimingAdapterPersistence swissTimingAdapterPersistence; + private SwissTimingFactory swissTimingFactory; + + @Before + public void setUp() throws UnknownHostException, IOException, InterruptedException, ParseException { + db = Activator.getDefaultInstance().getDB(); + + swissTimingAdapterPersistence = SwissTimingAdapterPersistence.INSTANCE; + + storeAndForward = new StoreAndForward(RECEIVE_PORT, CLIENT_PORT, SwissTimingFactory.INSTANCE, SwissTimingAdapterPersistence.INSTANCE); + sendingSocket = new Socket("localhost", RECEIVE_PORT); + sendingStream = sendingSocket.getOutputStream(); + swissTimingFactory = SwissTimingFactory.INSTANCE; + transceiver = swissTimingFactory.createSailMasterTransceiver(); + connector = swissTimingFactory.getOrCreateSailMasterConnector("localhost", CLIENT_PORT, swissTimingAdapterPersistence); + DBCollection lastMessageCountCollection = db.getCollection(CollectionNames.LAST_MESSAGE_COUNT.name()); + lastMessageCountCollection.update(new BasicDBObject(), new BasicDBObject().append(FieldNames.LAST_MESSAGE_COUNT.name(), 0l), + /* upsert */ true, /* multi */ false); + + swissTimingAdapterPersistence.dropAllRaceMasterData(); + swissTimingAdapterPersistence.dropAllMessageData(); + + connector.trackRace("4711"); + connector.trackRace("4712"); + } + + @After + public void tearDown() throws InterruptedException, IOException { + logger.entering(getClass().getName(), "tearDown"); + storeAndForward.stop(); + connector.stop(); + logger.exiting(getClass().getName(), "tearDown"); + } + + @Test + public void testInitMessages() throws IOException, InterruptedException { + + InputStream is = getClass().getResourceAsStream("/InitMessagesScript.txt"); + + ScriptedMessages scriptedMessages = new ScriptedMessages(is); + + final List racesReceived = new ArrayList(); + final boolean[] receivedSomething = new boolean[1]; + final List receivedCompetitors = new ArrayList(); + + connector.addSailMasterListener(new SailMasterAdapter() { + @Override + public void receivedStartList(String raceID, StartList startList) { + + for(Competitor competitor: startList.getCompetitors()) + receivedCompetitors.add(competitor); + + synchronized (ScriptedStoreAndForwardTest.this) { + receivedSomething[0] = true; + ScriptedStoreAndForwardTest.this.notifyAll(); + } + } + @Override + public void receivedAvailableRaces(Iterable races) { + for (Race race : races) { + racesReceived.add(race); + } + } + }); + + for(String msg: scriptedMessages.getMessages()) { + transceiver.sendMessage(msg, sendingStream); + } + + synchronized (this) { + while (!receivedSomething[0]) { + wait(2000l); // wait for two seconds to receive the messages + } + } + assertEquals(2, racesReceived.size()); + assertEquals(4, receivedCompetitors.size()); + + } + +}