http2-1.6.5: test/HPACK/DecodeSpec.hs
{-# LANGUAGE OverloadedStrings #-}
module HPACK.DecodeSpec where
import Network.HPACK
import Network.HPACK.Table
import Test.Hspec
import HPACK.HeaderBlock
spec :: Spec
spec = do
describe "fromHeaderBlock" $ do
it "decodes HeaderList in request" $ do
withDynamicTableForDecoding 4096 4096 $ \dyntabl -> do
h1 <- decodeHeader dyntabl d41b
h1 `shouldBe` d41h
h2 <- decodeHeader dyntabl d42b
h2 `shouldBe` d42h
h3 <- decodeHeader dyntabl d43b
h3 `shouldBe` d43h
it "decodes HeaderList in response" $ do
withDynamicTableForDecoding 256 4096 $ \dyntabl -> do
h1 <- decodeHeader dyntabl d61b
h1 `shouldBe` d61h
h2 <- decodeHeader dyntabl d62b
h2 `shouldBe` d62h
h3 <- decodeHeader dyntabl d63b
h3 `shouldBe` d63h
it "decodes HeaderList in response (deny max table size update to 0)" $
withDynamicTableForDecoding 256 4096 $ \dyntabl -> do
h1 <- decodeHeader dyntabl d81b
h1 `shouldBe` d81h
it "decodes HeaderList even if an entry is larger than DynamicTable" $
withDynamicTableForEncoding 64 $ \etbl ->
withDynamicTableForDecoding 64 4096 $ \dtbl -> do
hs <- encodeHeader defaultEncodeStrategy 4096 etbl hl1
h1 <- decodeHeader dtbl hs
h1 `shouldBe` hl1
isDynamicTableEmpty etbl `shouldReturn` True
isDynamicTableEmpty dtbl `shouldReturn` True
hl1 :: HeaderList
hl1 = [("custom-key","custom-value")
,("loooooooooooooooooooooooooooooooooooooooooog-key"
,"loooooooooooooooooooooooooooooooooooooooooog-value")
]