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