Browse Source

Cert support

master
Denis Tereshkin 4 years ago
parent
commit
9f170a6ba7
  1. 2
      broker-client-test.cabal
  2. 1
      client-cert.json
  3. 1
      client-cert.pub.json
  4. 49
      src/Main.hs

2
broker-client-test.cabal

@ -26,3 +26,5 @@ executable broker-client-test
, containers , containers
, optparse-applicative , optparse-applicative
, libatrade , libatrade
, random
, text

1
client-cert.json

@ -0,0 +1 @@
{"public_key":"GJpIIMI1/EiClY5S2HN7e+22HqEdO+OlwpjMFwqLAiA=","secret_key":"qnOKIVob5m7fIEI2SllRV2eQ8WtqcQtBJztLk7KGIb4="}

1
client-cert.pub.json

@ -0,0 +1 @@
{"public_key":"GJpIIMI1/EiClY5S2HN7e+22HqEdO+OlwpjMFwqLAiA="}

49
src/Main.hs

@ -5,21 +5,38 @@ module Main where
import ATrade.Broker.Client (NotificationCallback, cancelOrder, import ATrade.Broker.Client (NotificationCallback, cancelOrder,
startBrokerClient, stopBrokerClient, startBrokerClient, stopBrokerClient,
submitOrder) submitOrder)
import ATrade.Types (Operation (..), Order (..), import ATrade.Types (ClientSecurityParams (ClientSecurityParams),
Operation (..), Order (..),
OrderPrice (..), OrderPrice (..),
OrderState (Unsubmitted), OrderState (Unsubmitted),
SignalId (..), SignalId (..))
defaultClientSecurityParams)
import Control.Concurrent (threadDelay) import Control.Concurrent (threadDelay)
import Control.Monad (forever, void) import Control.Monad (forever, void)
import Data.String (IsString (fromString))
import qualified Data.Text as T
import Options.Applicative
import System.IO import System.IO
import System.Log.Formatter import System.Log.Formatter
import System.Log.Handler (setFormatter) import System.Log.Handler (setFormatter)
import System.Log.Handler.Simple import System.Log.Handler.Simple
import System.Log.Logger import System.Log.Logger
import System.ZMQ4 import System.Random
import System.ZMQ4 hiding (identity)
import System.ZMQ4.ZAP import System.ZMQ4.ZAP
data Config = Config
{
identity :: String
} deriving (Show, Eq)
argParser :: Parser Config
argParser = Config <$>
strOption
( long "identity"
<> short 'i'
<> metavar "ID"
<> help "Client identity")
initLogging :: [Char] -> IO () initLogging :: [Char] -> IO ()
initLogging inst = do initLogging inst = do
handler <- streamHandler stderr DEBUG >>= handler <- streamHandler stderr DEBUG >>=
@ -36,18 +53,27 @@ callback = infoM "notification" . show
main :: IO () main :: IO ()
main = do main = do
cfg <- execParser opts
initLogging "broker-client-test" initLogging "broker-client-test"
infoM "broker-client-test" "Starting" infoM "broker-client-test" "Starting"
withContext (\ctx -> do withContext (\ctx ->
bro <- startBrokerClient "test" ctx "tcp://127.0.0.1:5530" "tcp://127.0.0.1:5531" [callback] defaultClientSecurityParams withZapHandler ctx $ \_ -> do
maybeServerCert <- loadCertificateFromFile "../broker-server-test/server-cert.pub.json"
maybeMyCert <- loadCertificateFromFile "./client-cert.json"
case (maybeServerCert, maybeMyCert) of
(Right serverCert, Right myCert) -> do
let clientParams = ClientSecurityParams (Just myCert) (Just serverCert)
bro <- startBrokerClient (fromString . identity $ cfg) ctx "tcp://127.0.0.1:5530" "tcp://127.0.0.1:5531" [callback] clientParams
void $ submitAndCancelOrder bro 1 void $ submitAndCancelOrder bro 1
void $ forever $ do void $ forever $ do
threadDelay 10000000 threadDelay 10000000
stopBrokerClient bro) stopBrokerClient bro
(_, _) -> error "Unable to load certs"
)
where where
submitAndCancelOrder bro oid = do submitAndCancelOrder bro oid = do
threadDelay 1000000 randomRIO (1000000, 10000000) >>= threadDelay
infoM "broker-client-test" "Submitting order" infoM "broker-client-test" "Submitting order"
void $ submitOrder bro Order void $ submitOrder bro Order
{ {
@ -61,9 +87,14 @@ main = do
orderState = Unsubmitted, orderState = Unsubmitted,
orderSignalId = SignalId "" "" "" orderSignalId = SignalId "" "" ""
} }
threadDelay 1000000 randomRIO (1000000, 10000000) >>= threadDelay
infoM "broker-client-test" "Cancelling order" infoM "broker-client-test" "Cancelling order"
void $ cancelOrder bro oid void $ cancelOrder bro oid
submitAndCancelOrder bro (oid + 1) submitAndCancelOrder bro (oid + 1)
opts = info (argParser <**> helper)
( fullDesc
<> progDesc "Testing utility for broker-client facility"
<> header "broker-client-test" )

Loading…
Cancel
Save