diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaMatchingEngine.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaMatchingEngine.scala deleted file mode 100755 index 11afc3c03f..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaMatchingEngine.scala +++ /dev/null @@ -1,59 +0,0 @@ -package akka.performance.trading.akka - -import akka.actor._ -import akka.dispatch.Future -import akka.dispatch.FutureTimeoutException -import akka.dispatch.MessageDispatcher - -import akka.performance.trading.common.MatchingEngine -import akka.performance.trading.domain._ -import akka.performance.trading.domain.SupportedOrderbooksReq -import akka.dispatch.MessageDispatcher -import akka.actor.ActorRef - -class AkkaMatchingEngine(val meId: String, val orderbooks: List[Orderbook], disp: Option[MessageDispatcher]) extends Actor with MatchingEngine { - for (d ← disp) { - self.dispatcher = d - } - - var standby: Option[ActorRef] = None - - def receive = { - case standbyRef: ActorRef ⇒ - standby = Some(standbyRef) - case SupportedOrderbooksReq ⇒ - self.channel ! orderbooks - case order: Order ⇒ - handleOrder(order) - case unknown ⇒ - println("Received unknown message: " + unknown) - } - - def handleOrder(order: Order) { - orderbooksMap.get(order.orderbookSymbol) match { - case Some(orderbook) ⇒ - // println(meId + " " + order) - - val pendingStandbyReply: Option[Future[_]] = - for (s ← standby) yield { s ? order } - - orderbook.addOrder(order) - orderbook.matchOrders() - // wait for standby reply - pendingStandbyReply.foreach(waitForStandby(_)) - self.channel ! new Rsp(true) - case None ⇒ - println("Orderbook not handled by this MatchingEngine: " + order.orderbookSymbol) - self.channel ! new Rsp(false) - } - } - - def waitForStandby(pendingStandbyFuture: Future[_]) { - try { - pendingStandbyFuture.await - } catch { - case e: FutureTimeoutException ⇒ println("### standby timeout: " + e) - } - } - -} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaOrderReceiver.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaOrderReceiver.scala deleted file mode 100755 index 19f4d6b48f..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaOrderReceiver.scala +++ /dev/null @@ -1,38 +0,0 @@ -package akka.performance.trading.akka - -import akka.performance.trading.common.OrderReceiver -import akka.actor._ -import akka.dispatch.MessageDispatcher - -import akka.performance.trading.domain._ - -class AkkaOrderReceiver(val matchingEngines: List[ActorRef], disp: Option[MessageDispatcher]) - extends Actor with OrderReceiver { - type ME = ActorRef - - for (d ← disp) { - self.dispatcher = d - } - - def receive = { - case order: Order ⇒ placeOrder(order) - case unknown ⇒ println("Received unknown message: " + unknown) - } - - override def supportedOrderbooks(me: ActorRef): List[Orderbook] = { - (me ? SupportedOrderbooksReq).get.asInstanceOf[List[Orderbook]] - } - - def placeOrder(order: Order) = { - if (matchingEnginePartitionsIsStale) refreshMatchingEnginePartitions() - val matchingEngine = matchingEngineForOrderbook.get(order.orderbookSymbol) - matchingEngine match { - case Some(m) ⇒ - // println("receiver " + order) - m.forward(order) - case None ⇒ - println("Unknown orderbook: " + order.orderbookSymbol) - self.channel ! new Rsp(false) - } - } -} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaTradingSystem.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaTradingSystem.scala deleted file mode 100755 index 760f34bf3e..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaTradingSystem.scala +++ /dev/null @@ -1,75 +0,0 @@ -package akka.performance.trading.akka - -import akka.performance.trading.common._ -import akka.performance.trading.domain.Orderbook -import akka.actor.Actor._ -import akka.actor.ActorRef -import akka.dispatch.MessageDispatcher -import akka.actor.PoisonPill - -class AkkaTradingSystem extends TradingSystem { - type ME = ActorRef - type OR = ActorRef - - val orDispatcher = createOrderReceiverDispatcher - val meDispatcher = createMatchingEngineDispatcher - - // by default we use default-dispatcher that is defined in akka.conf - def createOrderReceiverDispatcher: Option[MessageDispatcher] = None - - // by default we use default-dispatcher that is defined in akka.conf - def createMatchingEngineDispatcher: Option[MessageDispatcher] = None - - var matchingEngineForOrderbook: Map[String, ActorRef] = Map() - - override def createMatchingEngines = { - var i = 0 - val pairs = - for (orderbooks: List[Orderbook] ← orderbooksGroupedByMatchingEngine) yield { - i = i + 1 - val me = createMatchingEngine("ME" + i, orderbooks) - val orderbooksCopy = orderbooks map (o ⇒ Orderbook(o.symbol, true)) - val standbyOption = - if (useStandByEngines) { - val meStandby = createMatchingEngine("ME" + i + "s", orderbooksCopy) - Some(meStandby) - } else { - None - } - - (me, standbyOption) - } - - Map() ++ pairs; - } - - def createMatchingEngine(meId: String, orderbooks: List[Orderbook]) = - actorOf(new AkkaMatchingEngine(meId, orderbooks, meDispatcher)) - - override def createOrderReceivers: List[ActorRef] = { - val primaryMatchingEngines = matchingEngines.map(pair ⇒ pair._1).toList - (1 to 10).toList map (i ⇒ createOrderReceiver(primaryMatchingEngines)) - } - - def createOrderReceiver(matchingEngines: List[ActorRef]) = - actorOf(new AkkaOrderReceiver(matchingEngines, orDispatcher)) - - override def start() { - for ((p, s) ← matchingEngines) { - p.start() - // standby is optional - s.foreach(_.start()) - s.foreach(p ! _) - } - orderReceivers.foreach(_.start()) - } - - override def shutdown() { - orderReceivers.foreach(_ ! PoisonPill) - for ((p, s) ← matchingEngines) { - p ! PoisonPill - // standby is optional - s.foreach(_ ! PoisonPill) - } - } -} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangTradingSystem.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangTradingSystem.scala deleted file mode 100755 index a42313c3a3..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangTradingSystem.scala +++ /dev/null @@ -1,16 +0,0 @@ -package akka.performance.trading.akkabang - -import akka.performance.trading.akka._ -import akka.performance.trading.domain.Orderbook -import akka.actor.Actor._ -import akka.actor.ActorRef - -class AkkaBangTradingSystem extends AkkaTradingSystem { - - override def createMatchingEngine(meId: String, orderbooks: List[Orderbook]) = - actorOf(new AkkaBangMatchingEngine(meId, orderbooks, meDispatcher)) - - override def createOrderReceiver(matchingEngines: List[ActorRef]) = - actorOf(new AkkaBangOrderReceiver(matchingEngines, orDispatcher)) - -} \ No newline at end of file diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaPerformanceTest.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/common/AkkaPerformanceTest.scala similarity index 88% rename from akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaPerformanceTest.scala rename to akka-actor-tests/src/test/scala/akka/performance/trading/common/AkkaPerformanceTest.scala index b8a99a9bc5..73152538a6 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akka/AkkaPerformanceTest.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/common/AkkaPerformanceTest.scala @@ -1,4 +1,4 @@ -package akka.performance.trading.akka +package akka.performance.trading.common import org.junit._ import Assert._ @@ -12,8 +12,8 @@ import akka.actor.Actor.actorOf import akka.dispatch.Dispatchers import akka.actor.PoisonPill -class AkkaPerformanceTest extends BenchmarkScenarios // with OtherPerformanceScenarios -{ +abstract class AkkaPerformanceTest extends BenchmarkScenarios { + type TS = AkkaTradingSystem val clientDispatcher = Dispatchers.newDispatcher("client-dispatcher") @@ -24,13 +24,10 @@ class AkkaPerformanceTest extends BenchmarkScenarios // with OtherPerformanceSce override def createTradingSystem: TS = new AkkaTradingSystem - override def placeOrder(orderReceiver: ActorRef, order: Order): Rsp = { - (orderReceiver ? order).get.asInstanceOf[Rsp] - } - - // need this so that junit will detect this as a test case - @Test - def dummy {} + /** + * Implemented in subclass + */ + def placeOrder(orderReceiver: ActorRef, order: Order): Rsp override def runScenario(scenario: String, orders: List[Order], repeat: Int, numberOfClients: Int, delayMs: Int) = { val totalNumberOfRequests = orders.size * repeat diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/common/MatchingEngine.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/common/MatchingEngine.scala index 3e256b552d..f020b001f7 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/common/MatchingEngine.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/common/MatchingEngine.scala @@ -1,6 +1,10 @@ package akka.performance.trading.common -import akka.performance.trading.domain.Orderbook +import akka.performance.trading.domain._ +import akka.actor._ +import akka.dispatch.Future +import akka.dispatch.FutureTimeoutException +import akka.dispatch.MessageDispatcher trait MatchingEngine { val meId: String @@ -10,3 +14,56 @@ trait MatchingEngine { Map() ++ (orderbooks map (o ⇒ (o.symbol, o))) } + +class AkkaMatchingEngine(val meId: String, val orderbooks: List[Orderbook], disp: Option[MessageDispatcher]) + extends Actor with MatchingEngine { + + for (d ← disp) { + self.dispatcher = d + } + + var standby: Option[ActorRef] = None + + def receive = { + case standbyRef: ActorRef ⇒ + standby = Some(standbyRef) + case SupportedOrderbooksReq ⇒ + self.channel ! orderbooks + case order: Order ⇒ + handleOrder(order) + case unknown ⇒ + println("Received unknown message: " + unknown) + } + + def handleOrder(order: Order) { + orderbooksMap.get(order.orderbookSymbol) match { + case Some(orderbook) ⇒ + // println(meId + " " + order) + + val pendingStandbyReply: Option[Future[_]] = + for (s ← standby) yield { s ? order } + + orderbook.addOrder(order) + orderbook.matchOrders() + // wait for standby reply + pendingStandbyReply.foreach(waitForStandby(_)) + done(true) + case None ⇒ + println("Orderbook not handled by this MatchingEngine: " + order.orderbookSymbol) + done(false) + } + } + + def done(status: Boolean) { + self.channel ! new Rsp(status) + } + + def waitForStandby(pendingStandbyFuture: Future[_]) { + try { + pendingStandbyFuture.await + } catch { + case e: FutureTimeoutException ⇒ println("### standby timeout: " + e) + } + } + +} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/common/OrderReceiver.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/common/OrderReceiver.scala index 3d773c8986..5ab5fa84bb 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/common/OrderReceiver.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/common/OrderReceiver.scala @@ -1,6 +1,8 @@ package akka.performance.trading.common -import akka.performance.trading.domain.Orderbook +import akka.performance.trading.domain._ +import akka.actor._ +import akka.dispatch.MessageDispatcher trait OrderReceiver { type ME @@ -22,3 +24,34 @@ trait OrderReceiver { def supportedOrderbooks(me: ME): List[Orderbook] } + +class AkkaOrderReceiver(val matchingEngines: List[ActorRef], disp: Option[MessageDispatcher]) + extends Actor with OrderReceiver { + type ME = ActorRef + + for (d ← disp) { + self.dispatcher = d + } + + def receive = { + case order: Order ⇒ placeOrder(order) + case unknown ⇒ println("Received unknown message: " + unknown) + } + + override def supportedOrderbooks(me: ActorRef): List[Orderbook] = { + (me ? SupportedOrderbooksReq).get.asInstanceOf[List[Orderbook]] + } + + def placeOrder(order: Order) = { + if (matchingEnginePartitionsIsStale) refreshMatchingEnginePartitions() + val matchingEngine = matchingEngineForOrderbook.get(order.orderbookSymbol) + matchingEngine match { + case Some(m) ⇒ + // println("receiver " + order) + m.forward(order) + case None ⇒ + println("Unknown orderbook: " + order.orderbookSymbol) + self.channel ! new Rsp(false) + } + } +} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/common/OtherPerformanceScenarios.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/common/OtherPerformanceScenarios.scala deleted file mode 100755 index 099c89cab1..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/common/OtherPerformanceScenarios.scala +++ /dev/null @@ -1,70 +0,0 @@ -package akka.performance.trading.common - -import org.junit._ -import akka.performance.trading.domain._ - -trait OtherPerformanceScenarios extends PerformanceTest { - - @Test - def simpleScenario { - val repeat = 300 * repeatFactor - val numberOfClients = tradingSystem.orderReceivers.size - - val bid = new Bid("A1", 100, 1000) - val ask = new Ask("A1", 100, 1000) - val orders = bid :: ask :: Nil - - runScenario("simpleScenario", orders, repeat, numberOfClients, 0) - } - - @Test - def manyOrderbooks { - val repeat = 2 * repeatFactor - val numberOfClients = tradingSystem.orderReceivers.size - - val orderbooks = tradingSystem.allOrderbookSymbols - val askOrders = for (o ← orderbooks) yield new Ask(o, 100, 1000) - val bidOrders = for (o ← orderbooks) yield new Bid(o, 100, 1000) - val orders = askOrders ::: bidOrders - - runScenario("manyOrderbooks", orders, repeat, numberOfClients, 5) - } - - @Test - def manyClients { - val repeat = 1 * repeatFactor - val numberOfClients = tradingSystem.orderReceivers.size * 10 - - val orderbooks = tradingSystem.allOrderbookSymbols - val askOrders = for (o ← orderbooks) yield new Ask(o, 100, 1000) - val bidOrders = for (o ← orderbooks) yield new Bid(o, 100, 1000) - val orders = askOrders ::: bidOrders - - runScenario("manyClients", orders, repeat, numberOfClients, 5) - } - - @Test - def oneClient { - val repeat = 10000 * repeatFactor - val numberOfClients = 1 - - val bid = new Bid("A1", 100, 1000) - val ask = new Ask("A1", 100, 1000) - val orders = bid :: ask :: Nil - - runScenario("oneClient", orders, repeat, numberOfClients, 0) - } - - @Test - def oneSlowClient { - val repeat = 300 * repeatFactor - val numberOfClients = 1 - - val bid = new Bid("A1", 100, 1000) - val ask = new Ask("A1", 100, 1000) - val orders = bid :: ask :: Nil - - runScenario("oneSlowClient", orders, repeat, numberOfClients, 5) - } - -} \ No newline at end of file diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/common/TradingSystem.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/common/TradingSystem.scala index b6dd112f05..b974939f45 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/common/TradingSystem.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/common/TradingSystem.scala @@ -2,6 +2,10 @@ package akka.performance.trading.common import akka.performance.trading.domain.Orderbook import akka.performance.trading.domain.OrderbookRepository +import akka.actor.Actor._ +import akka.actor.ActorRef +import akka.actor.PoisonPill +import akka.dispatch.MessageDispatcher trait TradingSystem { type ME @@ -29,3 +33,70 @@ trait TradingSystem { def shutdown() } + +class AkkaTradingSystem extends TradingSystem { + type ME = ActorRef + type OR = ActorRef + + val orDispatcher = createOrderReceiverDispatcher + val meDispatcher = createMatchingEngineDispatcher + + // by default we use default-dispatcher that is defined in akka.conf + def createOrderReceiverDispatcher: Option[MessageDispatcher] = None + + // by default we use default-dispatcher that is defined in akka.conf + def createMatchingEngineDispatcher: Option[MessageDispatcher] = None + + var matchingEngineForOrderbook: Map[String, ActorRef] = Map() + + override def createMatchingEngines = { + var i = 0 + val pairs = + for (orderbooks: List[Orderbook] ← orderbooksGroupedByMatchingEngine) yield { + i = i + 1 + val me = createMatchingEngine("ME" + i, orderbooks) + val orderbooksCopy = orderbooks map (o ⇒ Orderbook(o.symbol, true)) + val standbyOption = + if (useStandByEngines) { + val meStandby = createMatchingEngine("ME" + i + "s", orderbooksCopy) + Some(meStandby) + } else { + None + } + + (me, standbyOption) + } + + Map() ++ pairs; + } + + def createMatchingEngine(meId: String, orderbooks: List[Orderbook]) = + actorOf(new AkkaMatchingEngine(meId, orderbooks, meDispatcher)) + + override def createOrderReceivers: List[ActorRef] = { + val primaryMatchingEngines = matchingEngines.map(pair ⇒ pair._1).toList + (1 to 10).toList map (i ⇒ createOrderReceiver(primaryMatchingEngines)) + } + + def createOrderReceiver(matchingEngines: List[ActorRef]) = + actorOf(new AkkaOrderReceiver(matchingEngines, orDispatcher)) + + override def start() { + for ((p, s) ← matchingEngines) { + p.start() + // standby is optional + s.foreach(_.start()) + s.foreach(p ! _) + } + orderReceivers.foreach(_.start()) + } + + override def shutdown() { + orderReceivers.foreach(_ ! PoisonPill) + for ((p, s) ← matchingEngines) { + p ! PoisonPill + // standby is optional + s.foreach(_ ! PoisonPill) + } + } +} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/DummyOrderbook.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/DummyOrderbook.scala deleted file mode 100755 index 7a7c127a5c..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/DummyOrderbook.scala +++ /dev/null @@ -1,23 +0,0 @@ -package akka.performance.trading.domain - -abstract class DummyOrderbook(symbol: String) extends Orderbook(symbol) { - var count = 0 - var bid: Bid = _ - var ask: Ask = _ - - override def addOrder(order: Order) { - count += 1 - order match { - case b: Bid ⇒ bid = b - case a: Ask ⇒ ask = a - } - } - - override def matchOrders() { - if (count % 2 == 0) - trade(bid, ask) - } - - def trade(bid: Bid, ask: Ask) - -} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Orderbook.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Orderbook.scala index 077651a26f..927c71a785 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Orderbook.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/Orderbook.scala @@ -14,6 +14,7 @@ abstract class Orderbook(val symbol: String) { } } + // this is by intention not tuned for performance to simulate some work def matchOrders() { if (!bidSide.isEmpty && !askSide.isEmpty) { val topOfBook = (bidSide.head, askSide.head) @@ -57,3 +58,25 @@ object Orderbook { case true if useDummyOrderbook ⇒ new DummyOrderbook(symbol) with StandbyTradeObserver } } + +abstract class DummyOrderbook(symbol: String) extends Orderbook(symbol) { + var count = 0 + var bid: Bid = _ + var ask: Ask = _ + + override def addOrder(order: Order) { + count += 1 + order match { + case b: Bid ⇒ bid = b + case a: Ask ⇒ ask = a + } + } + + override def matchOrders() { + if (count % 2 == 0) + trade(bid, ask) + } + + def trade(bid: Bid, ask: Ask) + +} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/SimpleTradeObserver.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/SimpleTradeObserver.scala deleted file mode 100755 index b814e86cd9..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/SimpleTradeObserver.scala +++ /dev/null @@ -1,9 +0,0 @@ -package akka.performance.trading.domain - -trait SimpleTradeObserver extends TradeObserver { - override def trade(bid: Bid, ask: Ask) { - val c = TotalTradeCounter.counter.incrementAndGet - // println("trade " + c + " " + bid + " -- " + ask) - } -} - diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/StandbyTradeObserver.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/StandbyTradeObserver.scala deleted file mode 100755 index abf4adecd1..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/StandbyTradeObserver.scala +++ /dev/null @@ -1,7 +0,0 @@ -package akka.performance.trading.domain - -trait StandbyTradeObserver extends TradeObserver { - override def trade(bid: Bid, ask: Ask) { - } -} - diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/TotalTradeCounter.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/TotalTradeCounter.scala deleted file mode 100755 index 4e1f9429f0..0000000000 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/TotalTradeCounter.scala +++ /dev/null @@ -1,11 +0,0 @@ -package akka.performance.trading.domain - -import java.util.concurrent.atomic.AtomicInteger - -object TotalTradeCounter { - val counter = new AtomicInteger - - def reset() { - counter.set(0) - } -} diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/TradeObserver.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/TradeObserver.scala index 797e4ad43a..f87b6707b1 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/domain/TradeObserver.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/domain/TradeObserver.scala @@ -1,7 +1,27 @@ package akka.performance.trading.domain +import java.util.concurrent.atomic.AtomicInteger + abstract trait TradeObserver { - def trade(bid: Bid, ask: Ask) - } + +trait SimpleTradeObserver extends TradeObserver { + override def trade(bid: Bid, ask: Ask) { + val c = TotalTradeCounter.counter.incrementAndGet + // println("trade " + c + " " + bid + " -- " + ask) + } +} + +trait StandbyTradeObserver extends TradeObserver { + override def trade(bid: Bid, ask: Ask) { + } +} + +object TotalTradeCounter { + val counter = new AtomicInteger + + def reset() { + counter.set(0) + } +} \ No newline at end of file diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangMatchingEngine.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayMatchingEngine.scala similarity index 75% rename from akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangMatchingEngine.scala rename to akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayMatchingEngine.scala index 70fe867be8..469aee5cf3 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangMatchingEngine.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayMatchingEngine.scala @@ -1,13 +1,12 @@ -package akka.performance.trading.akkabang +package akka.performance.trading.oneway import akka.actor._ import akka.dispatch.MessageDispatcher - -import akka.performance.trading.akka._ import akka.performance.trading.domain.Order import akka.performance.trading.domain.Orderbook +import akka.performance.trading.common.AkkaMatchingEngine -class AkkaBangMatchingEngine(meId: String, orderbooks: List[Orderbook], disp: Option[MessageDispatcher]) +class OneWayMatchingEngine(meId: String, orderbooks: List[Orderbook], disp: Option[MessageDispatcher]) extends AkkaMatchingEngine(meId, orderbooks, disp) { override def handleOrder(order: Order) { diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangOrderReceiver.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayOrderReceiver.scala similarity index 74% rename from akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangOrderReceiver.scala rename to akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayOrderReceiver.scala index 377ed53c96..95ffe67a44 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangOrderReceiver.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayOrderReceiver.scala @@ -1,12 +1,11 @@ -package akka.performance.trading.akkabang +package akka.performance.trading.oneway import akka.actor._ import akka.dispatch.MessageDispatcher - -import akka.performance.trading.akka._ import akka.performance.trading.domain._ +import akka.performance.trading.common.AkkaOrderReceiver -class AkkaBangOrderReceiver(matchingEngines: List[ActorRef], disp: Option[MessageDispatcher]) +class OneWayOrderReceiver(matchingEngines: List[ActorRef], disp: Option[MessageDispatcher]) extends AkkaOrderReceiver(matchingEngines, disp) { override def placeOrder(order: Order) = { diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangPerformanceTest.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayPerformanceTest.scala similarity index 64% rename from akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangPerformanceTest.scala rename to akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayPerformanceTest.scala index ce9326ceba..04ffc00366 100755 --- a/akka-actor-tests/src/test/scala/akka/performance/trading/akkabang/AkkaBangPerformanceTest.scala +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayPerformanceTest.scala @@ -1,23 +1,19 @@ -package akka.performance.trading.akkabang +package akka.performance.trading.oneway -import org.junit._ -import Assert._ - -import java.util.concurrent.CountDownLatch import java.util.concurrent.TimeUnit -import akka.performance.trading.akka._ -import akka.performance.trading.domain._ -import akka.performance.trading.common._ +import org.junit.Test -import akka.actor.ActorRef import akka.actor.Actor.actorOf +import akka.actor.ActorRef +import akka.performance.trading.common.AkkaPerformanceTest +import akka.performance.trading.domain._ -class AkkaBangPerformanceTest extends AkkaPerformanceTest { +class OneWayPerformanceTest extends AkkaPerformanceTest { - override def createTradingSystem: TS = new AkkaBangTradingSystem { + override def createTradingSystem: TS = new OneWayTradingSystem { override def createMatchingEngine(meId: String, orderbooks: List[Orderbook]) = - actorOf(new AkkaBangMatchingEngine(meId, orderbooks, meDispatcher) with LatchMessageCountDown) + actorOf(new OneWayMatchingEngine(meId, orderbooks, meDispatcher) with LatchMessageCountDown) } override def placeOrder(orderReceiver: ActorRef, order: Order): Rsp = { @@ -29,7 +25,7 @@ class AkkaBangPerformanceTest extends AkkaPerformanceTest { // need this so that junit will detect this as a test case @Test - override def dummy {} + def dummy {} def createLatchOrder(order: Order) = order match { case bid: Bid ⇒ new Bid(order.orderbookSymbol, order.price, order.volume) with LatchMessage { val count = 2 } @@ -38,7 +34,7 @@ class AkkaBangPerformanceTest extends AkkaPerformanceTest { } -trait LatchMessageCountDown extends AkkaBangMatchingEngine { +trait LatchMessageCountDown extends OneWayMatchingEngine { override def handleOrder(order: Order) { super.handleOrder(order) diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayTradingSystem.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayTradingSystem.scala new file mode 100755 index 0000000000..4d9506c178 --- /dev/null +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/oneway/OneWayTradingSystem.scala @@ -0,0 +1,16 @@ +package akka.performance.trading.oneway + +import akka.actor.Actor.actorOf +import akka.actor.ActorRef +import akka.performance.trading.common.AkkaTradingSystem +import akka.performance.trading.domain.Orderbook + +class OneWayTradingSystem extends AkkaTradingSystem { + + override def createMatchingEngine(meId: String, orderbooks: List[Orderbook]) = + actorOf(new OneWayMatchingEngine(meId, orderbooks, meDispatcher)) + + override def createOrderReceiver(matchingEngines: List[ActorRef]) = + actorOf(new OneWayOrderReceiver(matchingEngines, orDispatcher)) + +} \ No newline at end of file diff --git a/akka-actor-tests/src/test/scala/akka/performance/trading/response/RspPerformanceTest.scala b/akka-actor-tests/src/test/scala/akka/performance/trading/response/RspPerformanceTest.scala new file mode 100755 index 0000000000..179e9e90b3 --- /dev/null +++ b/akka-actor-tests/src/test/scala/akka/performance/trading/response/RspPerformanceTest.scala @@ -0,0 +1,20 @@ +package akka.performance.trading.response + +import org.junit.Test + +import akka.actor.ActorRef +import akka.performance.trading.common.AkkaPerformanceTest +import akka.performance.trading.domain.Order +import akka.performance.trading.domain.Rsp + +class RspPerformanceTest extends AkkaPerformanceTest { + + override def placeOrder(orderReceiver: ActorRef, order: Order): Rsp = { + (orderReceiver ? order).get.asInstanceOf[Rsp] + } + + // need this so that junit will detect this as a test case + @Test + def dummy {} +} +