1{-# LANGUAGE OverloadedStrings #-} 2 3module HPACK.DecodeSpec where 4 5import Network.HPACK 6import Network.HPACK.Table 7import Test.Hspec 8 9import HPACK.HeaderBlock 10 11spec :: Spec 12spec = do 13 describe "fromHeaderBlock" $ do 14 it "decodes HeaderList in request" $ do 15 withDynamicTableForDecoding 4096 4096 $ \dyntabl -> do 16 h1 <- decodeHeader dyntabl d41b 17 h1 `shouldBe` d41h 18 h2 <- decodeHeader dyntabl d42b 19 h2 `shouldBe` d42h 20 h3 <- decodeHeader dyntabl d43b 21 h3 `shouldBe` d43h 22 it "decodes HeaderList in response" $ do 23 withDynamicTableForDecoding 256 4096 $ \dyntabl -> do 24 h1 <- decodeHeader dyntabl d61b 25 h1 `shouldBe` d61h 26 h2 <- decodeHeader dyntabl d62b 27 h2 `shouldBe` d62h 28 h3 <- decodeHeader dyntabl d63b 29 h3 `shouldBe` d63h 30 it "decodes HeaderList in response (deny max table size update to 0)" $ 31 withDynamicTableForDecoding 256 4096 $ \dyntabl -> do 32 h1 <- decodeHeader dyntabl d81b 33 h1 `shouldBe` d81h 34 it "decodes HeaderList even if an entry is larger than DynamicTable" $ 35 withDynamicTableForEncoding 64 $ \etbl -> 36 withDynamicTableForDecoding 64 4096 $ \dtbl -> do 37 hs <- encodeHeader defaultEncodeStrategy 4096 etbl hl1 38 h1 <- decodeHeader dtbl hs 39 h1 `shouldBe` hl1 40 isDynamicTableEmpty etbl `shouldReturn` True 41 isDynamicTableEmpty dtbl `shouldReturn` True 42 43hl1 :: HeaderList 44hl1 = [("custom-key","custom-value") 45 ,("loooooooooooooooooooooooooooooooooooooooooog-key" 46 ,"loooooooooooooooooooooooooooooooooooooooooog-value") 47 ] 48