ATrade core infrastructure
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.

47 lines
1.3 KiB

{-# LANGUAGE OverloadedStrings #-}
module TestZMQTradeSink (
unitTests
) where
import Test.Tasty
import Test.Tasty.HUnit
import ATrade.Types
import ATrade.Broker.Protocol
import ATrade.Broker.TradeSinks.ZMQTradeSink
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 :: TestTree
unitTests = testGroup "Broker.Server.TradeSinks.ZMQTradeSink" [ testZMQTradeSink ]
testZMQTradeSink :: TestTree
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,
tradeCommission = 0,
tradeSignalId = SignalId "foo" "bar" "" }