s3-signer-0.4.0.0: test/Test.hs
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE RecordWildCards #-}
module Main where
import Data.ByteString (ByteString)
import Data.Time.Calendar (fromGregorian)
import Data.Time.Clock (UTCTime(..))
import Network.S3
import Control.Monad (unless)
import Network.S3.Sign (sign)
import System.Exit (exitFailure)
expectedSig :: ByteString
expectedSig = "f0e8bdb87c964420e857bd35b5d6ed310bd44f0170aba48dd91039c6036bdb41"
testFail :: String -> IO ()
testFail msg = do
print msg
exitFailure
assertEqual :: (Show a, Eq a) => a -> a -> IO ()
assertEqual got expected = do
let msg = "'" ++ show got ++ " does not match expected ''" ++ "'"
unless (got == expected) (testFail msg)
main :: IO ()
main = do
let time = UTCTime (fromGregorian 2013 5 24) 0
sr@S3SignedRequest{..} = sign privKey (exampleRequest time) time
assertEqual sigSignature expectedSig
print sr
privKey :: ByteString
privKey = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
pubKey :: ByteString
pubKey = "AKIAIOSFODNN7EXAMPLE"
-- https://docs.aws.amazon.com/AmazonS3/latest/API/sig-v4-header-based-auth.html#example-signature-GET-object
exampleRequest :: UTCTime -> S3Request
exampleRequest time =
S3Request {
s3method = S3GET
, mimeType = Nothing
, bucketName = "examplebucket"
, regionName = "us-east-1"
, objectName = "test.txt"
, queryString = []
, payloadHash = Nothing
, requestTime = time
, s3headers = [ s3Header "range" "bytes=0-9" ]
}