summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoe <joe@jerkface.net>2018-06-26 05:18:43 -0400
committerjoe <joe@jerkface.net>2018-06-26 05:18:43 -0400
commitec651ddc8ec890feebfbabe456d7515d7d83a012 (patch)
treebada079cf7d277febbf2cbaee094e489b9ee6f7a
parent187e6a58a7b2a3af3f16dab737c485c886f87917 (diff)
Pair of linked transports for testing.
-rw-r--r--src/Network/QueryResponse.hs24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/Network/QueryResponse.hs b/src/Network/QueryResponse.hs
index e4c73cd8..6df9ac5a 100644
--- a/src/Network/QueryResponse.hs
+++ b/src/Network/QueryResponse.hs
@@ -570,6 +570,30 @@ udpTransport' bind_address = do
570 } 570 }
571 return (tr, sock) 571 return (tr, sock)
572 572
573chanTransport :: (addr -> TChan (x, addr)) -> addr -> TChan (x, addr) -> TVar Bool -> Transport err addr x
574chanTransport chanFromAddr self achan aclosed = Transport
575 { awaitMessage = \kont -> do
576 x <- atomically $ (Just <$> readTChan achan)
577 `orElse`
578 (readTVar aclosed >>= check >> return Nothing)
579 kont $ Right <$> x
580 , sendMessage = \them bs -> do
581 atomically $ writeTChan (chanFromAddr them) (bs,self)
582 , closeTransport = atomically $ writeTVar aclosed True
583 }
584
585-- | Returns a pair of transports linked together to simulate two computers talking to each other.
586testPairTransport :: IO (Transport err SockAddr ByteString, Transport err SockAddr ByteString)
587testPairTransport = do
588 achan <- atomically newTChan
589 bchan <- atomically newTChan
590 aclosed <- atomically $ newTVar False
591 bclosed <- atomically $ newTVar False
592 let a = SockAddrInet 1 1
593 b = SockAddrInet 2 2
594 return ( chanTransport (const bchan) a achan aclosed
595 , chanTransport (const achan) b bchan bclosed )
596
573serializeClient :: Client err meth tid addr x -> IO (Client err meth tid addr x) 597serializeClient :: Client err meth tid addr x -> IO (Client err meth tid addr x)
574serializeClient c = do 598serializeClient c = do
575 mvar <- newMVar () 599 mvar <- newMVar ()