packages feed

second-transfer-0.7.1.0: tests/tests-hs-src/Tests/HTTP1Parse.hs

{-# LANGUAGE OverloadedStrings #-}
module Tests.HTTP1Parse where


import qualified Data.ByteString                     as B
import           Data.Maybe                          (isJust)

import           Test.HUnit

import           SecondTransfer                      (Headers)
import           SecondTransfer.Http1.Parse


testParse :: Test
testParse = TestCase $ do
    let
        headers_text                   = "GET /helo.html HTTP/1.1\r\nHost: www.auther.com \r\n\r\n"
        headers_text2                   = "POST /helo.html HTTP/1.1\r\nHost: www.auther.com \r\nContent-Length: 1\r\n\r\np"
        a0                             = newIncrementalHttp1Parser
        isDone (OnlyHeaders_H1PC _ _)  = True
        isDone _                       = False
        a1                             = addBytes a0 headers_text
        (OnlyHeaders_H1PC h0 leftovers)= a1
        (HeadersAndBody_H1PC h1 cond0 l2) = addBytes a0 headers_text2
        waitForBodyOk (HeadersAndBody_H1PC _ _ _)   = True
        waitForBodyOk _ = False
    assertBool "testParse.IsDone" (isDone a1)
    assertEqual "testParse.NoLeftovers" leftovers ""
    assertEqual "testParse.YesLeftovers" l2 "p"
    assertEqual "testParse.FinishWellSeen" (UseBodyLength_BSC 1) cond0


testGenerate :: Test
testGenerate = TestCase $ do
    let
        headers_list :: Headers
        headers_list = [
            (":status", "200"),
            ("host", "www.example.com"),
            ("etag", "afrh")
            ]
        fragments = ["hello world"]
        serialized = serializeHTTPResponse headers_list fragments
    assertEqual "testGenerate.1"
        "HTTP/1.1 200 OK\r\ncontent-length: 11\r\netag: afrh\r\nhost: www.example.com\r\n\r\nhello world"
        serialized