on master help sign in
Fix chunked tests, make final CRLF optional
commit744afffe5a8e14bfadf9b8898edcb19717a96617 authorMichael Snoyman <michael@snoyman.com> dateSat 29 Sep 2012, 20:25 (14 years ago) parenta135c9d
2 files changed+9−5
warp/Network/Wai/Handler/Warp/Conduit.hs+5−1 warp/test/RunSpec.hs+4−4
warp/Network/Wai/Handler/Warp/Conduit.hs+5−1
@@ -6,7 +6,9 @@ import Control.Monad (unless)
66import Control.Monad.IO.Class (MonadIO, liftIO)
77import Control.Monad.Trans.Class (lift)
88import Data.ByteString (ByteString)
9+import Data.ByteString.Lazy.Char8 (pack)
910import qualified Data.ByteString as S
11+import qualified Data.ByteString.Lazy as L
1012import Data.Conduit
1113import qualified Data.Conduit.Binary as CB
1214import Data.Conduit.Internal (ResumableSource (..))
@@ -95,7 +97,9 @@ chunkedSource ipair = do
9597 go src NeedLenNewline = go' src (CB.take 2 >>)
9698 go src (HaveLen 0) = do
9799 -- Drop the final CRLF
98− (src', ()) <- lift $ src $$++ CB.drop 2
100+ (src', ()) <- lift $ src $$++ do
101+ crlf <- CB.take 2
102+ unless (crlf == pack "\r\n") $ leftover $ S.concat $ L.toChunks crlf
99103 liftIO $ I.writeIORef ipair (src', HaveLen 0)
100104 go src (HaveLen len) = do
101105 (src', mbs) <- lift $ src $$++ CL.head
warp/test/RunSpec.hs+4−4
@@ -240,9 +240,9 @@ spec = do
240240 handle <- connectTo "127.0.0.1" $ PortNumber $ fromIntegral port
241241 let input = S.concat
242242 [ "POST / HTTP/1.1\r\nTransfer-Encoding: Chunked\r\n\r\n"
243− , "c\r\nHello World\n\r\n3\r\nBye\r\n0\r\n"
243+ , "c\r\nHello World\n\r\n3\r\nBye\r\n0\r\n\r\n"
244244 , "POST / HTTP/1.1\r\nTransfer-Encoding: Chunked\r\n\r\n"
245− , "b\r\nHello World\r\n0\r\n"
245+ , "b\r\nHello World\r\n0\r\n\r\n"
246246 ]
247247 hPutStr handle input
248248 hFlush handle
@@ -266,7 +266,7 @@ spec = do
266266 let input = concat $ replicate 2 $
267267 ["POST / HTTP/1.1\r\nTransfer-Encoding: Chunked\r\n\r\n"] ++
268268 (replicate 50 "5\r\n12345\r\n") ++
269− ["0\r\n"]
269+ ["0\r\n\r\n"]
270270 mapM_ (\bs -> hPutStr handle bs >> hFlush handle) input
271271 hClose handle
272272 threadDelay 1000
@@ -286,7 +286,7 @@ spec = do
286286 [ "POST / HTTP/1.1\r\nTransfer-Encoding: Chunked\r\n\r\n"
287287 , "c\r\nHello World\n\r\n3\r\nBye\r\n0\r\n"
288288 , "POST / HTTP/1.1\r\nTransfer-Encoding: Chunked\r\n\r\n"
289− , "b\r\nHello World\r\n0\r\n"
289+ , "b\r\nHello World\r\n0\r\n\r\n"
290290 ]
291291 mapM_ (\bs -> hPutStr handle bs >> hFlush handle) $ map S.singleton $ S.unpack input
292292 hClose handle