Browse Source

BrokerServer: test order submission from different endpoints

master
Denis Tereshkin 4 years ago
parent
commit
54b3aaecd5
  1. 41
      test/TestBrokerServer.hs

41
test/TestBrokerServer.hs

@ -29,6 +29,7 @@ import System.ZMQ4
unitTests :: TestTree unitTests :: TestTree
unitTests = testGroup "Broker.Server" [testBrokerServerStartStop unitTests = testGroup "Broker.Server" [testBrokerServerStartStop
, testBrokerServerSubmitOrder , testBrokerServerSubmitOrder
, testBrokerServerSubmitOrderDifferentIdentities
, testBrokerServerSubmitOrderToUnknownAccount , testBrokerServerSubmitOrderToUnknownAccount
, testBrokerServerCancelOrder , testBrokerServerCancelOrder
, testBrokerServerCancelUnknownOrder , testBrokerServerCancelUnknownOrder
@ -54,6 +55,15 @@ connectAndSendOrder step sock order ep = do
send sock [] (BL.toStrict . encode $ RequestSubmitOrder 1 "identity" order) send sock [] (BL.toStrict . encode $ RequestSubmitOrder 1 "identity" order)
threadDelay 10000 threadDelay 10000
connectAndSendOrderWithIdentity :: (Sender a) => (String -> IO ()) -> Socket a -> Order -> ClientIdentity -> T.Text -> IO ()
connectAndSendOrderWithIdentity step sock order clientIdentity ep = do
step "Connecting"
connect sock (T.unpack ep)
step $ "Sending request for identity: " ++ show clientIdentity
send sock [] (BL.toStrict . encode $ RequestSubmitOrder 1 clientIdentity order)
threadDelay 10000
defaultOrder :: Order defaultOrder :: Order
defaultOrder = mkOrder { defaultOrder = mkOrder {
orderId = 25, orderId = 25,
@ -102,6 +112,37 @@ testBrokerServerSubmitOrder = testCaseSteps "Broker Server submits order" $ \ste
Just _ -> assertFailure "Invalid response" Just _ -> assertFailure "Invalid response"
Nothing -> assertFailure "Invalid response" Nothing -> assertFailure "Invalid response"
testBrokerServerSubmitOrderDifferentIdentities :: TestTree
testBrokerServerSubmitOrderDifferentIdentities = testCaseSteps "Broker Server submits order: different identities" $ \step -> withContext $ \ctx -> do
step "Setup"
(mockBroker, broState) <- mkMockBroker ["demo"]
ep <- makeEndpoint
let orderId1 = 42
let orderId2 = 76
bracket (startBrokerServer [mockBroker] ctx ep [] defaultServerSecurityParams) stopBrokerServer $ \_ -> do
withSocket ctx Req $ \sock1 -> do
withSocket ctx Req $ \sock2 -> do
connectAndSendOrderWithIdentity step sock1 defaultOrder {orderId = orderId1} "identity1" ep
connectAndSendOrderWithIdentity step sock2 defaultOrder {orderId = orderId2} "identity2" ep
step "Checking that orders are submitted to BrokerInterface"
s <- readIORef broState
(length . orders) s @?= 2
step "Reading response for identity1"
resp <- decode . BL.fromStrict <$> receive sock1
case resp of
Just (ResponseOrderSubmitted localOrderId) -> localOrderId @=? orderId1
Just _ -> assertFailure "Invalid response"
Nothing -> assertFailure "Invalid response"
step "Reading response for identity2"
resp <- decode . BL.fromStrict <$> receive sock2
case resp of
Just (ResponseOrderSubmitted localOrderId) -> localOrderId @=? orderId2
Just _ -> assertFailure "Invalid response"
Nothing -> assertFailure "Invalid response"
testBrokerServerSubmitOrderToUnknownAccount :: TestTree testBrokerServerSubmitOrderToUnknownAccount :: TestTree
testBrokerServerSubmitOrderToUnknownAccount = testCaseSteps "Broker Server returns error if account is unknown" $ testBrokerServerSubmitOrderToUnknownAccount = testCaseSteps "Broker Server returns error if account is unknown" $
\step -> withContext (\ctx -> do \step -> withContext (\ctx -> do

Loading…
Cancel
Save