From 3d322f5fcf00989fd01881b21872c6b7ce19d9f5 Mon Sep 17 00:00:00 2001 From: Evgeny Poberezkin <2769109+epoberezkin@users.noreply.github.com> Date: Wed, 21 Oct 2020 18:17:11 +0100 Subject: [PATCH] test: error when ACK is sent without message --- src/Server.hs | 13 ++++++------- tests/Test.hs | 3 +++ 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/Server.hs b/src/Server.hs index 8c7b78adf..d20f047c0 100644 --- a/src/Server.hs +++ b/src/Server.hs @@ -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 diff --git a/tests/Test.hs b/tests/Test.hs index 899653cfc..c419c82b2 100644 --- a/tests/Test.hs +++ b/tests/Test.hs @@ -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"