2 changed files with 90 additions and 0 deletions
@ -0,0 +1,32 @@ |
|||||||
|
{-# LANGUAGE OverloadedStrings #-} |
||||||
|
|
||||||
|
module ATrade.Broker.Client ( |
||||||
|
) where |
||||||
|
|
||||||
|
import ATrade.Types |
||||||
|
import ATrade.Broker.Protocol |
||||||
|
import Control.Concurrent hiding (readChan, writeChan) |
||||||
|
import Control.Concurrent.BoundedChan |
||||||
|
import Control.Concurrent.MVar |
||||||
|
import Control.Exception |
||||||
|
import Data.List.NonEmpty |
||||||
|
import qualified Data.Text as T |
||||||
|
import qualified Data.ByteString.Lazy as BL |
||||||
|
import Data.Text.Encoding |
||||||
|
import System.ZMQ4 |
||||||
|
import System.Log.Logger |
||||||
|
|
||||||
|
data BrokerClientHandle = BrokerClientHandle { |
||||||
|
tid :: ThreadId, |
||||||
|
completionMvar :: compMv, |
||||||
|
submitOrder :: Order -> IO (Either T.Text OrderId), |
||||||
|
cancelOrder :: OrderId -> IO (Either T.Text ()), |
||||||
|
cmdVar :: MVar BrokerServerRequest, |
||||||
|
respVar :: MVar BrokerServerResponse |
||||||
|
} |
||||||
|
|
||||||
|
startBrokerClient :: Context -> T.Text -> IO BrokerClientHandle |
||||||
|
startBrokerClient ctx endpoint = undefined |
||||||
|
|
||||||
|
stopBrokerClient :: BrokerClientHandle -> IO () |
||||||
|
stopBrokerClient handle = undefined |
||||||
@ -0,0 +1,58 @@ |
|||||||
|
|
||||||
|
{-# LANGUAGE OverloadedStrings #-} |
||||||
|
|
||||||
|
module TestBrokerServer ( |
||||||
|
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 qualified Data.ByteString as B |
||||||
|
import qualified Data.ByteString.Lazy as BL |
||||||
|
import ATrade.Broker.Server |
||||||
|
import ATrade.Broker.Protocol |
||||||
|
import ATrade.Util |
||||||
|
import qualified Data.Text as T |
||||||
|
import Control.Monad |
||||||
|
import Control.Monad.Loops |
||||||
|
import Control.Concurrent.MVar |
||||||
|
import Control.Concurrent.BoundedChan |
||||||
|
import Control.Concurrent hiding (writeChan) |
||||||
|
import Control.Exception |
||||||
|
import System.ZMQ4 |
||||||
|
import Data.Aeson |
||||||
|
import Data.Time.Clock |
||||||
|
import Data.Time.Calendar |
||||||
|
import Data.Maybe |
||||||
|
import qualified Data.List as L |
||||||
|
import Data.IORef |
||||||
|
import Data.UUID as U |
||||||
|
import Data.UUID.V4 as UV4 |
||||||
|
import MockBroker |
||||||
|
|
||||||
|
unitTests = testGroup "Broker.Client" [] |
||||||
|
|
||||||
|
makeEndpoint = do |
||||||
|
uid <- toText <$> UV4.nextRandom |
||||||
|
return $ "inproc://brokerserver" `T.append` uid |
||||||
|
|
||||||
|
defaultOrder = mkOrder { |
||||||
|
orderAccountId = "demo", |
||||||
|
orderSecurity = "FOO", |
||||||
|
orderPrice = Market, |
||||||
|
orderQuantity = 10, |
||||||
|
orderOperation = Buy |
||||||
|
} |
||||||
|
|
||||||
|
testBrokerClientStartStop = testCase "Broker client starts and stops" $ withContext (\ctx -> do |
||||||
|
ep <- makeEndpoint |
||||||
|
(mockBroker, broState) <- mkMockBroker ["demo"] |
||||||
|
bracket (startBrokerServer [mockBroker] ctx ep) stopBrokerServer (\broS -> |
||||||
|
bracket (startBrokerClient ctx ep) stopBrokerClient (\broC -> |
||||||
|
oid <- submitOrder broC defaultOrder |
||||||
|
))) |
||||||
|
|
||||||
Loading…
Reference in new issue