packages feed

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 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+            ]+        ]