1{-# LANGUAGE OverloadedStrings #-} 2module Network.HTTP.Client.HeadersSpec where 3 4import Network.HTTP.Client.Internal 5import Network.HTTP.Types 6import Test.Hspec 7 8main :: IO () 9main = hspec spec 10 11spec :: Spec 12spec = describe "HeadersSpec" $ do 13 it "simple response" $ do 14 let input = 15 [ "HTTP/" 16 , "1.1 200" 17 , " OK\r\nfoo" 18 , ": bar\r\n" 19 , "baz:bin\r\n\r" 20 , "\nignored" 21 ] 22 (connection, _, _) <- dummyConnection input 23 statusHeaders <- parseStatusHeaders connection Nothing Nothing 24 statusHeaders `shouldBe` StatusHeaders status200 (HttpVersion 1 1) 25 [ ("foo", "bar") 26 , ("baz", "bin") 27 ] 28 29 it "Expect: 100-continue (success)" $ do 30 let input = 31 [ "HTTP/1.1 100 Continue\r\n\r\n" 32 , "HTTP/1.1 200 OK\r\n" 33 , "foo: bar\r\n\r\n" 34 ] 35 (conn, out, _) <- dummyConnection input 36 let sendBody = connectionWrite conn "data" 37 statusHeaders <- parseStatusHeaders conn Nothing (Just sendBody) 38 statusHeaders `shouldBe` StatusHeaders status200 (HttpVersion 1 1) [ ("foo", "bar") ] 39 out >>= (`shouldBe` ["data"]) 40 41 it "Expect: 100-continue (failure)" $ do 42 let input = 43 [ "HTTP/1.1 417 Expectation Failed\r\n\r\n" 44 ] 45 (conn, out, _) <- dummyConnection input 46 let sendBody = connectionWrite conn "data" 47 statusHeaders <- parseStatusHeaders conn Nothing (Just sendBody) 48 statusHeaders `shouldBe` StatusHeaders status417 (HttpVersion 1 1) [] 49 out >>= (`shouldBe` []) 50 51 it "100 Continue without expectation is OK" $ do 52 let input = 53 [ "HTTP/1.1 100 Continue\r\n\r\n" 54 , "HTTP/1.1 200 OK\r\n" 55 , "foo: bar\r\n\r\n" 56 , "result" 57 ] 58 (conn, out, inp) <- dummyConnection input 59 statusHeaders <- parseStatusHeaders conn Nothing Nothing 60 statusHeaders `shouldBe` StatusHeaders status200 (HttpVersion 1 1) [ ("foo", "bar") ] 61 out >>= (`shouldBe` []) 62 inp >>= (`shouldBe` ["result"]) 63