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