conduit-connection 0.1.0.0 → 0.1.0.1
raw patch · 3 files changed
+126/−7 lines, 3 filesdep +HUnitdep +conduit-connectiondep +networkdep ~bytestringdep ~conduitdep ~connection
Dependencies added: HUnit, conduit-connection, network, test-framework, test-framework-hunit
Dependency ranges changed: bytestring, conduit, connection
Files
- Network/Connection/Conduit.hs +4/−4
- conduit-connection.cabal +23/−3
- tests/Tests.hs +99/−0
Network/Connection/Conduit.hs view
@@ -1,6 +1,6 @@ {-# LANGUAGE RankNTypes #-}--- | A @conduit@ source and sink based on "Network.Connection" from the--- @connection@ package, and ResourceT aware constructors.+-- | A @conduit@ source and sink based on "Network.Connection", and+-- "Control.Monad.Trans.Resource#t:ResourceT" aware constructors. module Network.Connection.Conduit ( -- * Source and sink sourceConnection@@ -39,13 +39,13 @@ where loop = await >>= maybe (return ()) (\bs -> lift (liftIO $ C.connectionPut connection bs) >> loop) --- | Create a new connection from a handle. See 'Network.Connection.connectFromHandle'.+-- | Create a new connection from a handle. See "Network.Connection.connectFromHandle". connectFromHandle :: (MonadResource m) => C.ConnectionContext -> Handle -> C.ConnectionParams -> m C.Connection connectFromHandle ctx h params = do (_, c) <- liftResourceT $ allocate (C.connectFromHandle ctx h params) C.connectionClose return c --- | Create a new connection. See 'Network.Connection.connectTo'.+-- | Create a new connection. See "Network.Connection.connectTo". connectTo :: (MonadResource m) => C.ConnectionContext -> C.ConnectionParams -> m C.Connection connectTo ctx params = do (_, c) <- liftResourceT $ allocate (C.connectTo ctx params) C.connectionClose
conduit-connection.cabal view
@@ -1,8 +1,9 @@ name: conduit-connection-version: 0.1.0.0+version: 0.1.0.1 synopsis: Conduit source and sink for Network.Connection. description:- @conduit-connection@ provides a @conduit@ source and sink based on @connection@.+ @conduit-connection@ provides a "Data.Conduit" source and sink based on+ "Network.Connection". homepage: https://github.com/sdroege/conduit-connection license: BSD3 license-file: LICENSE@@ -18,10 +19,29 @@ , transformers >= 0.2 && < 0.5 , bytestring >=0.10 && <0.11 , resourcet >= 1.1 && < 1.2- , conduit >=1.1 && <1.2+ , conduit >=1.1 && <1.3 , connection >=0.2 && <0.3 default-language: Haskell2010 ghc-options: -Wall++test-suite Tests+ type: exitcode-stdio-1.0+ x-uses-tf: true+ build-depends: base == 4.*+ , transformers >= 0.2 && < 0.5+ , network == 2.*+ , HUnit >= 1.2 && < 2+ , test-framework >= 0.4.1+ , test-framework-hunit+ , bytestring+ , connection+ , resourcet >= 1.1 && < 1.2+ , conduit >= 1.1 && < 1.3+ , conduit-connection+ ghc-options: -Wall+ hs-source-dirs: tests+ default-language: Haskell2010+ main-is: Tests.hs source-repository head type: git
+ tests/Tests.hs view
@@ -0,0 +1,99 @@+{-# LANGUAGE OverloadedStrings #-}+module Main where++import qualified Data.ByteString as B++import Control.Concurrent (forkIO)+import Control.Concurrent.MVar+import Control.Monad+import Control.Monad.Trans.Resource+import Control.Monad.IO.Class (liftIO)++import Network.Connection++import Data.Conduit+import qualified Data.Conduit.List as CL+import qualified Network.Connection.Conduit as CCon++import Network.Socket hiding (send, sendTo, recv, recvFrom)+import Network.Socket.ByteString++import Test.HUnit++import Test.Framework as TF (defaultMain, testGroup, Test)+import Test.Framework.Providers.HUnit++main :: IO ()+main = defaultMain tests++setupSocket :: IO (Socket, PortNumber)+setupSocket = do+ let addr = SockAddrInet aNY_PORT iNADDR_ANY++ s <- socket AF_INET Stream defaultProtocol+ bind s addr+ listen s 5++ p <- socketPort s++ return (s, p)++testSinkConnection :: Assertion+testSinkConnection = do+ (s, p) <- setupSocket++ let input = ["abcde", "fghij", "klmno"]++ mOutput <- newEmptyMVar++ _ <- forkIO $ do+ (s', _) <- accept s++ let recvAll l = do+ b <- recv s' 4096+ if b == B.empty then+ return l+ else+ recvAll (l ++ [b])+ o <- recvAll []+ putMVar mOutput o+ close s'++ runResourceT $ do+ ctx <- liftIO initConnectionContext+ c <- CCon.connectTo ctx (ConnectionParams "localhost" p Nothing Nothing)+ CL.sourceList input $$ CCon.sinkConnection c++ output <- takeMVar mOutput++ B.concat input @=? B.concat output++ close s++testSourceConnection :: Assertion+testSourceConnection = do+ (s, p) <- setupSocket++ let input = ["abcde", "fghij", "klmno"]++ _ <- forkIO $ do+ (s', _) <- accept s+ forM_ input (send s')+ close s'++ output <- runResourceT $ do+ ctx <- liftIO initConnectionContext+ c <- CCon.connectTo ctx (ConnectionParams "localhost" p Nothing Nothing)+ CCon.sourceConnection c $$ CL.fold (\a b -> a ++ [b]) []++ B.concat input @=? B.concat output++ close s++tests :: [TF.Test]+tests = [+ testGroup "HUnit tests Network.Connection.Conduit" [+ testCase "sourceConnection" testSourceConnection+ , testCase "sinkConnection" testSinkConnection+ ]+ ]