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
47 lines
1.3 KiB
{-# 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" "" } |
|
|
|
|