test: error when ACK is sent without message

This commit is contained in:
Evgeny Poberezkin
2020-10-21 18:17:11 +01:00
parent 527a22c1ef
commit 3d322f5fcf
2 changed files with 9 additions and 7 deletions
+6 -7
View File
@@ -64,9 +64,8 @@ runClient h = do
`finally` cancelSubscribers c
cancelSubscribers :: (MonadUnliftIO m) => Client -> m ()
cancelSubscribers Client {subscriptions} = do
cs <- readTVarIO subscriptions
forM_ cs cancelSub
cancelSubscribers Client {subscriptions} =
readTVarIO subscriptions >>= mapM_ cancelSub
cancelSub :: (MonadUnliftIO m) => Sub -> m ()
cancelSub = \case
@@ -84,7 +83,7 @@ receive h Client {rcvQ} = forever $ do
(signature, (connId, cmdOrError)) <- tGet fromClient h
-- TODO maybe send Either to queue?
signed <- case cmdOrError of
Left e -> return . (connId,) . Cmd SBroker $ ERR e
Left e -> return . mkResp connId $ ERR e
Right cmd -> verifyTransmission signature connId cmd
atomically $ writeTBQueue rcvQ signed
@@ -93,6 +92,9 @@ send h Client {sndQ} = forever $ do
signed <- atomically $ readTBQueue sndQ
tPut h (B.empty, signed)
mkResp :: ConnId -> Command 'Broker -> Signed
mkResp connId command = (connId, Cmd SBroker command)
verifyTransmission :: forall m. (MonadUnliftIO m, MonadReader Env m) => Signature -> ConnId -> Cmd -> m Signed
verifyTransmission signature connId cmd = do
(connId,) <$> case cmd of
@@ -253,9 +255,6 @@ client clnt@Client {subscriptions, rcvQ, sndQ} Server {subscribedQ} =
Left e -> return $ err e
Right _ -> delMsgQueue ms connId $> ok
mkResp :: ConnId -> Command 'Broker -> Signed
mkResp cId command = (cId, Cmd SBroker command)
ok :: Signed
ok = mkResp connId OK
+3
View File
@@ -56,6 +56,9 @@ testCreateSecure =
Resp _ ok4 <- sendRecv h ("1234", rId, "ACK")
(ok4, OK) #== "replies OK when message acknowledged if no more messages"
Resp _ err6 <- sendRecv h ("1234", rId, "ACK")
(err6, ERR PROHIBITED) #== "replies ERR when message acknowledged without messages"
Resp sId2 err1 <- sendRecv h ("4567", sId, "SEND :hello")
(err1, ERR AUTH) #== "rejects signed SEND"
(sId2, sId) #== "same connection ID in response 2"