1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53
|
{-# LANGUAGE OverloadedStrings #-}
module HTTP2.FrameSpec where
import Test.Hspec
import Data.ByteString.Char8 ()
import Data.Either
import Network.HTTP2.Frame
spec :: Spec
spec = do
describe "encodeFrameHeader & decodeFrameHeader" $ do
it "encode/decodes frames properly" $ do
let header =
FrameHeader
{ payloadLength = 500
, flags = defaultFlags
, streamId = 10
}
wire = encodeFrameHeader FramePriority header
fibHeader = decodeFrameHeader wire
fibHeader `shouldBe` (FramePriority, header)
describe "encodeFrame & decodeFrame" $ do
it "encode/decodes frames properly" $ do
let einfo =
EncodeInfo
{ encodeFlags = defaultFlags
, encodeStreamId = 2
, encodePadding = Nothing
}
payload = DataFrame "Hello, world!"
wire = encodeFrame einfo payload
frame =
fromRight (error "encode/decodes frames properly") $
decodeFrame wire
payload' = framePayload frame
payload' `shouldBe` payload
it "encode/decodes padded frames properly" $ do
let einfo =
EncodeInfo
{ encodeFlags = defaultFlags
, encodeStreamId = 2
, encodePadding = Just "padding!"
}
payload = DataFrame "Hello, world!"
wire = encodeFrame einfo payload
frame =
fromRight (error "encode/decodes padded frames properly") $
decodeFrame wire
payload' = framePayload frame
payload' `shouldBe` payload
|