From 69b9f5ba08ae2d207c60dcbcf289736fd5f290c9 Mon Sep 17 00:00:00 2001 From: Jens Nolte <git@queezle.net> Date: Mon, 24 May 2021 22:49:27 +0200 Subject: [PATCH] Add test cases --- test/Network/Rpc/MultiplexerSpec.hs | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/test/Network/Rpc/MultiplexerSpec.hs b/test/Network/Rpc/MultiplexerSpec.hs index 812303b..63a95fa 100644 --- a/test/Network/Rpc/MultiplexerSpec.hs +++ b/test/Network/Rpc/MultiplexerSpec.hs @@ -36,6 +36,52 @@ spec = describe "runMultiplexerProtocol" $ parallel $ do tryReadMVar recvMVar `shouldReturn` Nothing + it "it can create sub-channels" $ do + recvMVar <- newEmptyMVar + withEchoServer $ \channel -> do + channelSetHandler channel $ ((\_ -> putMVar recvMVar) :: ReceivedMessageResources -> BSL.ByteString -> IO ()) + SentMessageResources{createdChannels=[_]} <- channelSend_ channel [CreateChannelHeader] "create a channel" + takeMVar recvMVar `shouldReturn` "create a channel" + SentMessageResources{createdChannels=[_, _, _]} <- channelSend_ channel [CreateChannelHeader, CreateChannelHeader, CreateChannelHeader] "create more channels" + takeMVar recvMVar `shouldReturn` "create more channels" + tryReadMVar recvMVar `shouldReturn` Nothing + + it "it can send messages on sub-channels" $ do + recvMVar <- newEmptyMVar + c1RecvMVar <- newEmptyMVar + c2RecvMVar <- newEmptyMVar + c3RecvMVar <- newEmptyMVar + withEchoServer $ \channel -> do + channelSetHandler channel $ ((\_ -> putMVar recvMVar) :: ReceivedMessageResources -> BSL.ByteString -> IO ()) + channelSendSimple channel "foobar" + takeMVar recvMVar `shouldReturn` "foobar" + + SentMessageResources{createdChannels=[c1, c2]} <- channelSend_ channel [CreateChannelHeader, CreateChannelHeader] "create channels" + takeMVar recvMVar `shouldReturn` "create channels" + + channelSetHandler c1 $ ((\_ -> putMVar c1RecvMVar) :: ReceivedMessageResources -> BSL.ByteString -> IO ()) + channelSetHandler c2 $ ((\_ -> putMVar c2RecvMVar) :: ReceivedMessageResources -> BSL.ByteString -> IO ()) + + channelSendSimple c1 "test" + takeMVar c1RecvMVar `shouldReturn` "test" + channelSendSimple c2 "test2" + takeMVar c2RecvMVar `shouldReturn` "test2" + channelSendSimple c2 "test3" + takeMVar c2RecvMVar `shouldReturn` "test3" + channelSendSimple c1 "test4" + takeMVar c1RecvMVar `shouldReturn` "test4" + + SentMessageResources{createdChannels=[c3]} <- channelSend_ channel [CreateChannelHeader] "create another channel" + takeMVar recvMVar `shouldReturn` "create another channel" + channelSetHandler c3 $ ((\_ -> putMVar c3RecvMVar) :: ReceivedMessageResources -> BSL.ByteString -> IO ()) + + channelSendSimple c3 "test5" + takeMVar c3RecvMVar `shouldReturn` "test5" + channelSendSimple c1 "test6" + takeMVar c1RecvMVar `shouldReturn` "test6" + + tryReadMVar recvMVar `shouldReturn` Nothing + withEchoServer :: (Channel -> IO a) -> IO a withEchoServer fn = bracket setup close (\(channel, _) -> fn channel) -- GitLab