You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.3 KiB
48 lines
1.3 KiB
|
9 years ago
|
{-# LANGUAGE OverloadedStrings #-}
|
||
|
|
|
||
|
|
module TestZMQTradeSink (
|
||
|
|
unitTests
|
||
|
|
) where
|
||
|
|
|
||
|
|
import Test.Tasty
|
||
|
|
import Test.Tasty.SmallCheck as SC
|
||
|
|
import Test.Tasty.QuickCheck as QC
|
||
|
|
import Test.Tasty.HUnit
|
||
|
|
|
||
|
|
import ATrade.Types
|
||
|
|
import ATrade.Broker.Protocol
|
||
|
|
import ATrade.Broker.TradeSinks.ZMQTradeSink
|
||
|
|
import Control.Concurrent
|
||
|
|
import System.ZMQ4
|
||
|
|
import Data.Aeson
|
||
|
|
import Data.Time.Calendar
|
||
|
|
import Data.Time.Clock
|
||
|
|
import qualified Data.ByteString as B
|
||
|
|
import qualified Data.ByteString.Lazy as BL
|
||
|
|
|
||
|
|
unitTests = testGroup "Broker.Server.TradeSinks.ZMQTradeSink" [ testZMQTradeSink ]
|
||
|
|
|
||
|
|
testZMQTradeSink = testCase "Test ZMQTradeSink trade serialization" $
|
||
|
|
withContext (\ctx -> withSocket ctx Rep (\insock -> do
|
||
|
|
bind insock "inproc://test-sink"
|
||
|
|
withZMQTradeSink ctx "inproc://test-sink" (\f -> do
|
||
|
|
f trade
|
||
|
|
raw <- receive insock
|
||
|
|
send insock [] B.empty
|
||
|
|
case decode $ BL.fromStrict raw of
|
||
|
|
Just t -> mkTradeMessage trade @?= t
|
||
|
|
Nothing -> assertFailure "Unable to decode incoming message")))
|
||
|
|
where
|
||
|
|
trade = Trade {
|
||
|
|
tradeOrderId = 0,
|
||
|
|
tradePrice = 10,
|
||
|
|
tradeQuantity = 20,
|
||
|
|
tradeVolume = 30,
|
||
|
|
tradeVolumeCurrency = "TEST",
|
||
|
|
tradeOperation = Buy,
|
||
|
|
tradeAccount = "FOO",
|
||
|
|
tradeSecurity = "BAR",
|
||
|
|
tradeTimestamp = UTCTime (fromGregorian 1970 1 1) 0,
|
||
|
|
tradeSignalId = SignalId "foo" "bar" "" }
|
||
|
|
|