{-# 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" "" }