Browse Source

Broker client: skeleton

master
Denis Tereshkin 9 years ago
parent
commit
8209181260
  1. 32
      src/ATrade/Broker/Client.hs
  2. 58
      test/TestBrokerClient.hs

32
src/ATrade/Broker/Client.hs

@ -0,0 +1,32 @@ @@ -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

58
test/TestBrokerClient.hs

@ -0,0 +1,58 @@ @@ -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…
Cancel
Save