Skip to content

Commit

Permalink
ouroboros-network-framework: fixed mux test
Browse files Browse the repository at this point in the history
The `socket error during receive` test was failing, because it closed
the socket before mux started.  Add a lock which makes sure that mux
is running when we close the socket.
  • Loading branch information
coot committed May 11, 2021
1 parent dbff166 commit 4452bdf
Showing 1 changed file with 11 additions and 4 deletions.
15 changes: 11 additions & 4 deletions ouroboros-network-framework/test/Test/Ouroboros/Network/Socket.hs
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ import Control.Monad
import Control.Monad.Class.MonadAsync
import Control.Monad.Class.MonadFork hiding (ThreadId)
import Control.Monad.Class.MonadSTM.Strict
import Control.Monad.Class.MonadTimer (threadDelay)
import Control.Monad.Class.MonadThrow
import Control.Concurrent (ThreadId)
import Control.Exception (IOException)
Expand Down Expand Up @@ -327,6 +328,7 @@ prop_socket_recv_error f rerr =
Socket.bind sd (Socket.addrAddress muxAddress)
addr <- Socket.getSocketName sd
Socket.listen sd 1
lock <- newEmptyTMVarIO

withAsync
(
Expand All @@ -343,6 +345,9 @@ prop_socket_recv_error f rerr =
localAddress = Socket.addrAddress muxAddress,
remoteAddress
}
_ <- async $ do
threadDelay 0.1
atomically $ putTMVar lock ()
Mx.muxStart nullTracer (toApplication connectionId (continueForever (Proxy :: Proxy IO)) app) bearer
)
$ \muxAsync -> do
Expand All @@ -357,19 +362,21 @@ prop_socket_recv_error f rerr =
Socket.sendAll sd' $ BL.singleton 0xa
#endif

when (rerr == RecvSocketClosed) $ Socket.close sd'
when (rerr == RecvSocketClosed) $ do
atomically $ takeTMVar lock
Socket.close sd'

res <- waitCatch muxAsync
result <- case res of
Left e ->
case fromException e of
Just me -> return $
case Mx.errorType me of
Mx.MuxBearerClosed -> rerr ===RecvSocketClosed
Mx.MuxBearerClosed -> rerr === RecvSocketClosed
MuxSDUReadTimeout -> rerr === RecvSDUTimeout
_ -> property False
_ -> counterexample (show $ Mx.errorType me) False
Nothing -> return $ counterexample (show e) False
Right _ -> return $ property False
Right _ -> return $ counterexample "expected error" False

when (rerr /= RecvSocketClosed) $ Socket.close sd'
return result
Expand Down

0 comments on commit 4452bdf

Please sign in to comment.