hprox-0.7.0: test/Network/HProx/NaiveSpec.hs
-- SPDX-License-Identifier: Apache-2.0
--
-- Copyright (C) 2026 Bin Jin. All Rights Reserved.
module Network.HProx.NaiveSpec
( spec
) where
import Data.ByteString qualified as BS
import Data.Conduit
import Data.Conduit.List qualified as CL
import Network.Wai
import Network.HProx.Naive
import Test.Hspec
spec :: Spec
spec = do
describe "parseRequestForPadding" $ do
it "selects the first supported padding type from the request header" $ do
parseRequestForPadding defaultRequest
{ requestHeaders = [("Padding-Type-Request", "unknown,1,0")]
}
`shouldBe` Just Variant1
it "falls back to the legacy Padding header" $ do
parseRequestForPadding defaultRequest
{ requestHeaders = [("Padding", "opaque")]
}
`shouldBe` Just Variant1
it "rejects requests without supported padding headers" $
parseRequestForPadding defaultRequest
{ requestHeaders = [("Padding-Type-Request", "unknown")]
}
`shouldBe` Nothing
describe "padding conduits" $ do
it "round-trips NoPadding without changing chunks" $ do
chunks <- runConduit $ CL.sourceList ["hello", "world"] .| addPaddingConduit NoPadding .| removePaddingConduit NoPadding .| CL.consume
chunks `shouldBe` ["hello", "world"]
it "round-trips Variant1 payloads without depending on random padding bytes" $ do
chunks <- runConduit $ CL.sourceList [BS.replicate 512 65] .| addPaddingConduit Variant1 .| removePaddingConduit Variant1 .| CL.consume
BS.concat chunks `shouldBe` BS.replicate 512 65