@@ -24,9 +24,13 @@ import System.IO.Unsafe (unsafePerformIO)
2424import Test.Hspec
2525import Control.Concurrent.MVar (newEmptyMVar, takeMVar, putMVar)
2626import Control.Exception.Lifted (bracket, try, IOException, onException)
27−import Data.Streaming.Network (bindPortTCP)
27+import Data.Streaming.Network (bindPortTCP, getSocketTCP, safeRecv)
2828import Network.Socket (sClose)
2929import qualified Network.HTTP as HTTP
30+import Data.Conduit (Flush (Chunk), ($=))
31+import qualified Data.Conduit.List as CL
32+import Blaze.ByteString.Builder (fromByteString)
33+import Network.Socket.ByteString (sendAll)
3034
3135main :: IO ()
3236main = hspec spec
@@ -345,3 +349,14 @@ spec = do
345349 `shouldBe` ["server"]
346350 map HTTP.hdrValue (HTTP.retrieveHeaders HTTP.HdrDate res)
347351 `shouldBe` ["date"]
352+
353+ it "streaming echo #249" $ do
354+ let app req = return $ responseSource status200 []
355+ $ requestBody req $= CL.map (Chunk . fromByteString)
356+ withApp defaultSettings app $ \port -> do
357+ (socket, _addr) <- getSocketTCP "127.0.0.1" port
358+ sendAll socket "POST / HTTP/1.1\r\ntransfer-encoding: chunked\r\n\r\n"
359+ threadDelay 10000
360+ sendAll socket "5\r\nhello\r\n0\r\n\r\n"
361+ bs <- safeRecv socket 4096
362+ S.takeWhile (/= 13) bs `shouldBe` "HTTP/1.1 200 OK"