{-# OPTIONS_GHC -fno-warn-orphans #-}
import Control.Applicative
import Data.ByteString (ByteString)
import qualified Data.ByteString.Char8 as BC
import Test.Hspec
import Test.Hspec.QuickCheck
import Test.HUnit
import Test.QuickCheck
import Network.HTTP.Types (SimpleQuery)
import Network.HTTP.Rest.Signature.EC2
instance Arbitrary ByteString where
arbitrary = BC.pack <$> arbitrary
data KeyString = Key { toBS :: ByteString }
instance Arbitrary KeyString where
arbitrary = Key . BC.pack <$> ((:) <$> arbitrary <*> arbitrary)
data T = T SimpleQuery
deriving (Show)
instance Arbitrary T where
arbitrary = T . map (\(a, b) -> (toBS a, b)) <$> arbitrary
main :: IO ()
main = hspec $ do
describe "Network.HTTP.Rest.Signature.EC2" $ do
it "calculate signature" testSignature
prop "calculate signature" propSignature
testSignature :: IO ()
testSignature = do
signature
"GET"
"ec2.amazonaws.com"
"/"
"secretKey"
HmacSHA256
[("key1", "value1"), ("key2", "value2")]
@=? "KkzU%2BMu0a1x8qa3uHhXBGWVVTcKV3dTLcgkCIIeAyZw%3D"
signature
"GET"
"ec2.amazonaws.com"
"/"
"secretKey2"
HmacSHA256
[("key1", "value1"), ("key2", "value2")]
@=? "TzOwg4QGXgL%2F9KFOLbddgqMH4zDIqUv9fdBMU%2F8X8Hg%3D"
propSignature :: T -> Bool
propSignature (T query) = f query == f (reverse query)
where
f = signature
"GET"
"ec2.amazonaws.com"
"/"
"secretKey"
HmacSHA256