Update formatting with latest ormolu 1.4 (#163)

This commit is contained in:
Aditya Manthramurthy 2021-03-03 16:11:45 -08:00 committed by GitHub
parent 73bc5b64a0
commit b8cc1e57ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
19 changed files with 249 additions and 214 deletions

View File

@ -34,9 +34,9 @@ main = do
-- Performs a recursive listing of incomplete uploads under bucket "test" -- Performs a recursive listing of incomplete uploads under bucket "test"
-- on a local minio server. -- on a local minio server.
res <- res <-
runMinio minioPlayCI runMinio minioPlayCI $
$ runConduit runConduit $
$ listIncompleteUploads bucket Nothing True .| mapM_C (\v -> (liftIO $ print v)) listIncompleteUploads bucket Nothing True .| mapM_C (\v -> (liftIO $ print v))
print res print res
{- {-

View File

@ -34,9 +34,9 @@ main = do
-- Performs a recursive listing of all objects under bucket "test" -- Performs a recursive listing of all objects under bucket "test"
-- on play.min.io. -- on play.min.io.
res <- res <-
runMinio minioPlayCI runMinio minioPlayCI $
$ runConduit runConduit $
$ listObjects bucket Nothing True .| mapM_C (\v -> (liftIO $ print v)) listObjects bucket Nothing True .| mapM_C (\v -> (liftIO $ print v))
print res print res
{- {-

View File

@ -73,7 +73,8 @@ main = do
] ]
formOptions = B.intercalate " " $ map formFn $ H.toList formData formOptions = B.intercalate " " $ map formFn $ H.toList formData
return $ B.intercalate " " $ return $
B.intercalate " " $
["curl", formOptions, "-F file=@/tmp/photo.jpg", url] ["curl", formOptions, "-F file=@/tmp/photo.jpg", url]
case res of case res of

View File

@ -55,6 +55,7 @@ module Network.Minio
gcsCI, gcsCI,
-- * Minio Monad -- * Minio Monad
---------------- ----------------
-- | The Minio Monad provides connection-reuse, bucket-location -- | The Minio Monad provides connection-reuse, bucket-location

View File

@ -186,9 +186,9 @@ buildRequest ri = do
retryAPIRequest :: Minio a -> Minio a retryAPIRequest :: Minio a -> Minio a
retryAPIRequest apiCall = do retryAPIRequest apiCall = do
resE <- resE <-
retrying retryPolicy (const shouldRetry) retrying retryPolicy (const shouldRetry) $
$ const const $
$ try apiCall try apiCall
either throwIO return resE either throwIO return resE
where where
-- Retry using the full-jitter backoff method for up to 10 mins -- Retry using the full-jitter backoff method for up to 10 mins
@ -266,9 +266,9 @@ isValidBucketName bucket =
-- Throws exception iff bucket name is invalid according to AWS rules. -- Throws exception iff bucket name is invalid according to AWS rules.
checkBucketNameValidity :: MonadIO m => Bucket -> m () checkBucketNameValidity :: MonadIO m => Bucket -> m ()
checkBucketNameValidity bucket = checkBucketNameValidity bucket =
when (not $ isValidBucketName bucket) when (not $ isValidBucketName bucket) $
$ throwIO throwIO $
$ MErrVInvalidBucketName bucket MErrVInvalidBucketName bucket
isValidObjectName :: Object -> Bool isValidObjectName :: Object -> Bool
isValidObjectName object = isValidObjectName object =
@ -276,6 +276,6 @@ isValidObjectName object =
checkObjectNameValidity :: MonadIO m => Object -> m () checkObjectNameValidity :: MonadIO m => Object -> m ()
checkObjectNameValidity object = checkObjectNameValidity object =
when (not $ isValidObjectName object) when (not $ isValidObjectName object) $
$ throwIO throwIO $
$ MErrVInvalidObjectName object MErrVInvalidObjectName object

View File

@ -16,6 +16,7 @@
module Network.Minio.AdminAPI module Network.Minio.AdminAPI
( -- * MinIO Admin API ( -- * MinIO Admin API
-------------------- --------------------
-- | Provides MinIO admin API and related types. It is in -- | Provides MinIO admin API and related types. It is in
@ -52,10 +53,7 @@ module Network.Minio.AdminAPI
where where
import Data.Aeson import Data.Aeson
( (.:), ( FromJSON,
(.:?),
(.=),
FromJSON,
ToJSON, ToJSON,
Value (Object), Value (Object),
eitherDecode, eitherDecode,
@ -66,6 +64,9 @@ import Data.Aeson
toJSON, toJSON,
withObject, withObject,
withText, withText,
(.:),
(.:?),
(.=),
) )
import qualified Data.Aeson as A import qualified Data.Aeson as A
import Data.Aeson.Types (typeMismatch) import Data.Aeson.Types (typeMismatch)
@ -610,9 +611,9 @@ buildAdminRequest areq = do
areq areq
{ ariPayloadHash = Just sha256Hash, { ariPayloadHash = Just sha256Hash,
ariHeaders = ariHeaders =
hostHeader hostHeader :
: sha256Header sha256Hash sha256Header sha256Hash :
: ariHeaders areq ariHeaders areq
} }
signReq = toRequest ci newAreq signReq = toRequest ci newAreq
sp = sp =

View File

@ -51,8 +51,8 @@ copyObjectInternal b' o srcInfo = do
endOffset >= fromIntegral srcSize endOffset >= fromIntegral srcSize
] ]
) )
$ throwIO $ throwIO $
$ MErrVInvalidSrcObjByteRange range MErrVInvalidSrcObjByteRange range
-- 1. If sz > 64MiB (minPartSize) use multipart copy, OR -- 1. If sz > 64MiB (minPartSize) use multipart copy, OR
-- 2. If startOffset /= 0 use multipart copy -- 2. If startOffset /= 0 use multipart copy
@ -69,9 +69,9 @@ copyObjectInternal b' o srcInfo = do
-- used is minPartSize. -- used is minPartSize.
selectCopyRanges :: (Int64, Int64) -> [(PartNumber, (Int64, Int64))] selectCopyRanges :: (Int64, Int64) -> [(PartNumber, (Int64, Int64))]
selectCopyRanges (st, end) = selectCopyRanges (st, end) =
zip pns zip pns $
$ map (\(x, y) -> (st + x, st + x + y - 1)) map (\(x, y) -> (st + x, st + x + y - 1)) $
$ zip startOffsets partSizes zip startOffsets partSizes
where where
size = end - st + 1 size = end - st + 1
(pns, startOffsets, partSizes) = List.unzip3 $ selectPartSizes size (pns, startOffsets, partSizes) = List.unzip3 $ selectPartSizes size

View File

@ -38,7 +38,9 @@ class UriEncodable s where
instance UriEncodable [Char] where instance UriEncodable [Char] where
uriEncode encodeSlash payload = uriEncode encodeSlash payload =
LB.toStrict $ BB.toLazyByteString $ mconcat $ LB.toStrict $
BB.toLazyByteString $
mconcat $
map (`uriEncodeChar` encodeSlash) payload map (`uriEncodeChar` encodeSlash) payload
instance UriEncodable ByteString where instance UriEncodable ByteString where

View File

@ -20,11 +20,11 @@ module Network.Minio.JsonParser
where where
import Data.Aeson import Data.Aeson
( (.:), ( FromJSON,
FromJSON,
eitherDecode, eitherDecode,
parseJSON, parseJSON,
withObject, withObject,
(.:),
) )
import qualified Data.Text as T import qualified Data.Text as T
import Lib.Prelude import Lib.Prelude

View File

@ -51,10 +51,10 @@ listObjects bucket prefix recurse = loop Nothing
res <- lift $ listObjects' bucket prefix nextToken delimiter Nothing res <- lift $ listObjects' bucket prefix nextToken delimiter Nothing
CL.sourceList $ map ListItemObject $ lorObjects res CL.sourceList $ map ListItemObject $ lorObjects res
unless recurse unless recurse $
$ CL.sourceList CL.sourceList $
$ map ListItemPrefix map ListItemPrefix $
$ lorCPrefixes res lorCPrefixes res
when (lorHasMore res) $ when (lorHasMore res) $
loop (lorNextToken res) loop (lorNextToken res)
@ -73,10 +73,10 @@ listObjectsV1 bucket prefix recurse = loop Nothing
res <- lift $ listObjectsV1' bucket prefix nextMarker delimiter Nothing res <- lift $ listObjectsV1' bucket prefix nextMarker delimiter Nothing
CL.sourceList $ map ListItemObject $ lorObjects' res CL.sourceList $ map ListItemObject $ lorObjects' res
unless recurse unless recurse $
$ CL.sourceList CL.sourceList $
$ map ListItemPrefix map ListItemPrefix $
$ lorCPrefixes' res lorCPrefixes' res
when (lorHasMore' res) $ when (lorHasMore' res) $
loop (lorNextMarker res) loop (lorNextMarker res)
@ -104,15 +104,16 @@ listIncompleteUploads bucket prefix recurse = loop Nothing Nothing
nextUploadIdMarker nextUploadIdMarker
Nothing Nothing
aggrSizes <- lift $ forM (lurUploads res) $ \(uKey, uId, _) -> do aggrSizes <- lift $
forM (lurUploads res) $ \(uKey, uId, _) -> do
partInfos <- partInfos <-
C.runConduit $ C.runConduit $
listIncompleteParts bucket uKey uId listIncompleteParts bucket uKey uId
C..| CC.sinkList C..| CC.sinkList
return $ foldl (\sizeSofar p -> opiSize p + sizeSofar) 0 partInfos return $ foldl (\sizeSofar p -> opiSize p + sizeSofar) 0 partInfos
CL.sourceList CL.sourceList $
$ map map
( \((uKey, uId, uInitTime), size) -> ( \((uKey, uId, uInitTime), size) ->
UploadInfo uKey uId uInitTime size UploadInfo uKey uId uInitTime size
) )

View File

@ -68,9 +68,9 @@ makePresignedUrl ::
HT.RequestHeaders -> HT.RequestHeaders ->
Minio ByteString Minio ByteString
makePresignedUrl expiry method bucket object region extraQuery extraHeaders = do makePresignedUrl expiry method bucket object region extraQuery extraHeaders = do
when (expiry > 7 * 24 * 3600 || expiry < 0) when (expiry > 7 * 24 * 3600 || expiry < 0) $
$ throwIO throwIO $
$ MErrVInvalidUrlExpiry expiry MErrVInvalidUrlExpiry expiry
ci <- asks mcConnInfo ci <- asks mcConnInfo
@ -103,7 +103,9 @@ makePresignedUrl expiry method bucket object region extraQuery extraHeaders = do
((HT.parseQuery $ NC.queryString req) ++ qpToAdd) ((HT.parseQuery $ NC.queryString req) ++ qpToAdd)
scheme = byteString $ bool "http://" "https://" $ connectIsSecure ci scheme = byteString $ bool "http://" "https://" $ connectIsSecure ci
return $ toStrictBS $ toLazyByteString $ return $
toStrictBS $
toLazyByteString $
scheme scheme
<> byteString (getHostAddr ci) <> byteString (getHostAddr ci)
<> byteString (getS3Path bucket object) <> byteString (getS3Path bucket object)
@ -331,7 +333,9 @@ presignedPostPolicy p = do
mkPair (PPCEquals k v) = Just (k, v) mkPair (PPCEquals k v) = Just (k, v)
mkPair _ = Nothing mkPair _ = Nothing
formFromPolicy = formFromPolicy =
H.map toUtf8 $ H.fromList $ catMaybes $ H.map toUtf8 $
H.fromList $
catMaybes $
mkPair <$> conditions ppWithCreds mkPair <$> conditions ppWithCreds
formData = formFromPolicy `H.union` signData formData = formFromPolicy `H.union` signData
-- compute POST upload URL -- compute POST upload URL
@ -339,7 +343,8 @@ presignedPostPolicy p = do
scheme = byteString $ bool "http://" "https://" $ connectIsSecure ci scheme = byteString $ bool "http://" "https://" $ connectIsSecure ci
region = connectRegion ci region = connectRegion ci
url = url =
toStrictBS $ toLazyByteString $ toStrictBS $
toLazyByteString $
scheme <> byteString (getHostAddr ci) scheme <> byteString (getHostAddr ci)
<> byteString "/" <> byteString "/"
<> byteString bucket <> byteString bucket

View File

@ -19,10 +19,12 @@ module Network.Minio.S3API
getLocation, getLocation,
-- * Listing buckets -- * Listing buckets
-------------------- --------------------
getService, getService,
-- * Listing objects -- * Listing objects
-------------------- --------------------
ListObjectsResult (..), ListObjectsResult (..),
ListObjectsV1Result (..), ListObjectsV1Result (..),
@ -33,11 +35,13 @@ module Network.Minio.S3API
headBucket, headBucket,
-- * Retrieving objects -- * Retrieving objects
----------------------- -----------------------
getObject', getObject',
headObject, headObject,
-- * Creating buckets and objects -- * Creating buckets and objects
--------------------------------- ---------------------------------
putBucket, putBucket,
ETag, ETag,
@ -47,6 +51,7 @@ module Network.Minio.S3API
copyObjectSingle, copyObjectSingle,
-- * Multipart Upload APIs -- * Multipart Upload APIs
-------------------------- --------------------------
UploadId, UploadId,
PartTuple, PartTuple,
@ -63,11 +68,13 @@ module Network.Minio.S3API
listIncompleteParts', listIncompleteParts',
-- * Deletion APIs -- * Deletion APIs
-------------------------- --------------------------
deleteBucket, deleteBucket,
deleteObject, deleteObject,
-- * Presigned Operations -- * Presigned Operations
----------------------------- -----------------------------
module Network.Minio.PresignedOperations, module Network.Minio.PresignedOperations,
@ -76,6 +83,7 @@ module Network.Minio.S3API
setBucketPolicy, setBucketPolicy,
-- * Bucket Notifications -- * Bucket Notifications
------------------------- -------------------------
Notification (..), Notification (..),
NotificationConfig (..), NotificationConfig (..),
@ -157,7 +165,8 @@ getObject' bucket object queryParams headers = do
{ riBucket = Just bucket, { riBucket = Just bucket,
riObject = Just object, riObject = Just object,
riQueryParams = queryParams, riQueryParams = queryParams,
riHeaders = headers riHeaders =
headers
-- This header is required for safety as otherwise http-client, -- This header is required for safety as otherwise http-client,
-- sends Accept-Encoding: gzip, and the server may actually gzip -- sends Accept-Encoding: gzip, and the server may actually gzip
-- body. In that case Content-Length header will be missing. -- body. In that case Content-Length header will be missing.
@ -168,7 +177,8 @@ getObject' bucket object queryParams headers = do
putBucket :: Bucket -> Region -> Minio () putBucket :: Bucket -> Region -> Minio ()
putBucket bucket location = do putBucket bucket location = do
ns <- asks getSvcNamespace ns <- asks getSvcNamespace
void $ executeRequest $ void $
executeRequest $
defaultS3ReqInfo defaultS3ReqInfo
{ riMethod = HT.methodPut, { riMethod = HT.methodPut,
riBucket = Just bucket, riBucket = Just bucket,
@ -188,9 +198,9 @@ putObjectSingle' :: Bucket -> Object -> [HT.Header] -> ByteString -> Minio ETag
putObjectSingle' bucket object headers bs = do putObjectSingle' bucket object headers bs = do
let size = fromIntegral (BS.length bs) let size = fromIntegral (BS.length bs)
-- check length is within single PUT object size. -- check length is within single PUT object size.
when (size > maxSinglePutObjectSizeBytes) when (size > maxSinglePutObjectSizeBytes) $
$ throwIO throwIO $
$ MErrVSinglePUTSizeExceeded size MErrVSinglePUTSizeExceeded size
let payload = mkStreamingPayload $ PayloadBS bs let payload = mkStreamingPayload $ PayloadBS bs
resp <- resp <-
@ -222,9 +232,9 @@ putObjectSingle ::
Minio ETag Minio ETag
putObjectSingle bucket object headers h offset size = do putObjectSingle bucket object headers h offset size = do
-- check length is within single PUT object size. -- check length is within single PUT object size.
when (size > maxSinglePutObjectSizeBytes) when (size > maxSinglePutObjectSizeBytes) $
$ throwIO throwIO $
$ MErrVSinglePUTSizeExceeded size MErrVSinglePUTSizeExceeded size
-- content-length header is automatically set by library. -- content-length header is automatically set by library.
let payload = mkStreamingPayload $ PayloadH h offset size let payload = mkStreamingPayload $ PayloadH h offset size
@ -301,9 +311,9 @@ listObjects' bucket prefix nextToken delimiter maxKeys = do
-- | DELETE a bucket from the service. -- | DELETE a bucket from the service.
deleteBucket :: Bucket -> Minio () deleteBucket :: Bucket -> Minio ()
deleteBucket bucket = deleteBucket bucket =
void void $
$ executeRequest executeRequest $
$ defaultS3ReqInfo defaultS3ReqInfo
{ riMethod = HT.methodDelete, { riMethod = HT.methodDelete,
riBucket = Just bucket riBucket = Just bucket
} }
@ -311,9 +321,9 @@ deleteBucket bucket =
-- | DELETE an object from the service. -- | DELETE an object from the service.
deleteObject :: Bucket -> Object -> Minio () deleteObject :: Bucket -> Object -> Minio ()
deleteObject bucket object = deleteObject bucket object =
void void $
$ executeRequest executeRequest $
$ defaultS3ReqInfo defaultS3ReqInfo
{ riMethod = HT.methodDelete, { riMethod = HT.methodDelete,
riBucket = Just bucket, riBucket = Just bucket,
riObject = Just object riObject = Just object
@ -377,8 +387,8 @@ srcInfoToHeaders srcInfo =
"/", "/",
srcObject srcInfo srcObject srcInfo
] ]
) ) :
: rangeHdr rangeHdr
++ zip names values ++ zip names values
where where
names = names =
@ -477,9 +487,9 @@ completeMultipartUpload bucket object uploadId partTuple = do
-- | Abort a multipart upload. -- | Abort a multipart upload.
abortMultipartUpload :: Bucket -> Object -> UploadId -> Minio () abortMultipartUpload :: Bucket -> Object -> UploadId -> Minio ()
abortMultipartUpload bucket object uploadId = abortMultipartUpload bucket object uploadId =
void void $
$ executeRequest executeRequest $
$ defaultS3ReqInfo defaultS3ReqInfo
{ riMethod = HT.methodDelete, { riMethod = HT.methodDelete,
riBucket = Just bucket, riBucket = Just bucket,
riObject = Just object, riObject = Just object,
@ -509,8 +519,8 @@ listIncompleteUploads' bucket prefix delimiter keyMarker uploadIdMarker maxKeys
where where
-- build query params -- build query params
params = params =
("uploads", Nothing) ("uploads", Nothing) :
: mkOptionalParams mkOptionalParams
[ ("prefix", prefix), [ ("prefix", prefix),
("delimiter", delimiter), ("delimiter", delimiter),
("key-marker", keyMarker), ("key-marker", keyMarker),
@ -553,15 +563,16 @@ headObject bucket object reqHeaders = do
{ riMethod = HT.methodHead, { riMethod = HT.methodHead,
riBucket = Just bucket, riBucket = Just bucket,
riObject = Just object, riObject = Just object,
riHeaders = reqHeaders riHeaders =
reqHeaders
-- This header is required for safety as otherwise http-client, -- This header is required for safety as otherwise http-client,
-- sends Accept-Encoding: gzip, and the server may actually gzip -- sends Accept-Encoding: gzip, and the server may actually gzip
-- body. In that case Content-Length header will be missing. -- body. In that case Content-Length header will be missing.
<> [("Accept-Encoding", "identity")] <> [("Accept-Encoding", "identity")]
} }
maybe (throwIO MErrVInvalidObjectInfoResponse) return maybe (throwIO MErrVInvalidObjectInfoResponse) return $
$ parseGetObjectHeaders object parseGetObjectHeaders object $
$ NC.responseHeaders resp NC.responseHeaders resp
-- | Query the object store if a given bucket exists. -- | Query the object store if a given bucket exists.
headBucket :: Bucket -> Minio Bool headBucket :: Bucket -> Minio Bool
@ -594,7 +605,8 @@ headBucket bucket =
putBucketNotification :: Bucket -> Notification -> Minio () putBucketNotification :: Bucket -> Notification -> Minio ()
putBucketNotification bucket ncfg = do putBucketNotification bucket ncfg = do
ns <- asks getSvcNamespace ns <- asks getSvcNamespace
void $ executeRequest $ void $
executeRequest $
defaultS3ReqInfo defaultS3ReqInfo
{ riMethod = HT.methodPut, { riMethod = HT.methodPut,
riBucket = Just bucket, riBucket = Just bucket,
@ -644,7 +656,8 @@ setBucketPolicy bucket policy = do
-- | Save a new policy on a bucket. -- | Save a new policy on a bucket.
putBucketPolicy :: Bucket -> Text -> Minio () putBucketPolicy :: Bucket -> Text -> Minio ()
putBucketPolicy bucket policy = do putBucketPolicy bucket policy = do
void $ executeRequest $ void $
executeRequest $
defaultS3ReqInfo defaultS3ReqInfo
{ riMethod = HT.methodPut, { riMethod = HT.methodPut,
riBucket = Just bucket, riBucket = Just bucket,
@ -655,7 +668,8 @@ putBucketPolicy bucket policy = do
-- | Delete any policy set on a bucket. -- | Delete any policy set on a bucket.
deleteBucketPolicy :: Bucket -> Minio () deleteBucketPolicy :: Bucket -> Minio ()
deleteBucketPolicy bucket = do deleteBucketPolicy bucket = do
void $ executeRequest $ void $
executeRequest $
defaultS3ReqInfo defaultS3ReqInfo
{ riMethod = HT.methodDelete, { riMethod = HT.methodDelete,
riBucket = Just bucket, riBucket = Just bucket,

View File

@ -198,10 +198,10 @@ mkCanonicalRequest ::
ByteString ByteString
mkCanonicalRequest !isStreaming !sp !req !headersForSign = mkCanonicalRequest !isStreaming !sp !req !headersForSign =
let canonicalQueryString = let canonicalQueryString =
B.intercalate "&" B.intercalate "&" $
$ map (\(x, y) -> B.concat [x, "=", y]) map (\(x, y) -> B.concat [x, "=", y]) $
$ sort sort $
$ map map
( \(x, y) -> ( \(x, y) ->
(uriEncode True x, maybe "" (uriEncode True) y) (uriEncode True x, maybe "" (uriEncode True) y)
) )
@ -298,8 +298,8 @@ signV4Stream !payloadLength !sp !req =
in case ceMay of in case ceMay of
Nothing -> ("content-encoding", "aws-chunked") : hs Nothing -> ("content-encoding", "aws-chunked") : hs
Just (_, ce) -> Just (_, ce) ->
("content-encoding", ce <> ",aws-chunked") ("content-encoding", ce <> ",aws-chunked") :
: filter (\(x, _) -> x /= "content-encoding") hs filter (\(x, _) -> x /= "content-encoding") hs
-- headers to be added to the request -- headers to be added to the request
datePair = ("X-Amz-Date", awsTimeFormatBS ts) datePair = ("X-Amz-Date", awsTimeFormatBS ts)
computedHeaders = computedHeaders =

View File

@ -170,7 +170,8 @@ httpLbs req mgr = do
sErr <- parseErrResponseJSON $ NC.responseBody resp sErr <- parseErrResponseJSON $ NC.responseBody resp
throwIO sErr throwIO sErr
_ -> _ ->
throwIO $ NC.HttpExceptionRequest req $ throwIO $
NC.HttpExceptionRequest req $
NC.StatusCodeException (void resp) (showBS resp) NC.StatusCodeException (void resp) (showBS resp)
return resp return resp
@ -199,7 +200,8 @@ http req mgr = do
throwIO sErr throwIO sErr
_ -> do _ -> do
content <- LB.toStrict . NC.responseBody <$> NC.lbsResponse resp content <- LB.toStrict . NC.responseBody <$> NC.lbsResponse resp
throwIO $ NC.HttpExceptionRequest req $ throwIO $
NC.HttpExceptionRequest req $
NC.StatusCodeException (void resp) content NC.StatusCodeException (void resp) content
return resp return resp
@ -265,9 +267,9 @@ chunkBSConduit (s : ss) = do
-- be 64MiB. -- be 64MiB.
selectPartSizes :: Int64 -> [(PartNumber, Int64, Int64)] selectPartSizes :: Int64 -> [(PartNumber, Int64, Int64)]
selectPartSizes size = selectPartSizes size =
uncurry (List.zip3 [1 ..]) uncurry (List.zip3 [1 ..]) $
$ List.unzip List.unzip $
$ loop 0 size loop 0 size
where where
ceil :: Double -> Int64 ceil :: Double -> Int64
ceil = ceiling ceil = ceiling

View File

@ -56,9 +56,9 @@ uncurry6 f (a, b, c, d, e, g) = f a b c d e g
-- | Parse time strings from XML -- | Parse time strings from XML
parseS3XMLTime :: MonadIO m => Text -> m UTCTime parseS3XMLTime :: MonadIO m => Text -> m UTCTime
parseS3XMLTime t = parseS3XMLTime t =
maybe (throwIO $ MErrVXmlParse $ "timestamp parse failure: " <> t) return maybe (throwIO $ MErrVXmlParse $ "timestamp parse failure: " <> t) return $
$ parseTimeM True defaultTimeLocale s3TimeFormat parseTimeM True defaultTimeLocale s3TimeFormat $
$ T.unpack t T.unpack t
parseDecimal :: (MonadIO m, Integral a) => Text -> m a parseDecimal :: (MonadIO m, Integral a) => Text -> m a
parseDecimal numStr = parseDecimal numStr =

View File

@ -134,9 +134,9 @@ basicTests = funTestWithBucket "Basic tests" $
\step bucket -> do \step bucket -> do
step "getService works and contains the test bucket." step "getService works and contains the test bucket."
buckets <- getService buckets <- getService
unless (length (filter (== bucket) $ map biName buckets) == 1) unless (length (filter (== bucket) $ map biName buckets) == 1) $
$ liftIO liftIO $
$ assertFailure assertFailure
( "The bucket " ++ show bucket ( "The bucket " ++ show bucket
++ " was expected to exist." ++ " was expected to exist."
) )
@ -361,21 +361,23 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
step "High-level listing of objects" step "High-level listing of objects"
items <- C.runConduit $ listObjects bucket Nothing False C..| sinkList items <- C.runConduit $ listObjects bucket Nothing False C..| sinkList
liftIO $ assertEqual "Objects/Dirs match failed!" expectedNonRecList $ liftIO $
assertEqual "Objects/Dirs match failed!" expectedNonRecList $
extractObjectsAndDirsFromList items extractObjectsAndDirsFromList items
step "High-level recursive listing of objects" step "High-level recursive listing of objects"
objects <- C.runConduit $ listObjects bucket Nothing True C..| sinkList objects <- C.runConduit $ listObjects bucket Nothing True C..| sinkList
liftIO liftIO $
$ assertEqual assertEqual
"Objects match failed!" "Objects match failed!"
(Just $ sort expectedObjects) (Just $ sort expectedObjects)
$ extractObjectsFromList objects $ extractObjectsFromList objects
step "High-level listing of objects (version 1)" step "High-level listing of objects (version 1)"
itemsV1 <- C.runConduit $ listObjectsV1 bucket Nothing False C..| sinkList itemsV1 <- C.runConduit $ listObjectsV1 bucket Nothing False C..| sinkList
liftIO $ assertEqual "Objects/Dirs match failed!" expectedNonRecList $ liftIO $
assertEqual "Objects/Dirs match failed!" expectedNonRecList $
extractObjectsAndDirsFromList itemsV1 extractObjectsAndDirsFromList itemsV1
step "High-level recursive listing of objects (version 1)" step "High-level recursive listing of objects (version 1)"
@ -384,8 +386,8 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
listObjectsV1 bucket Nothing True listObjectsV1 bucket Nothing True
C..| sinkList C..| sinkList
liftIO liftIO $
$ assertEqual assertEqual
"Objects match failed!" "Objects match failed!"
(Just $ sort expectedObjects) (Just $ sort expectedObjects)
$ extractObjectsFromList objectsV1 $ extractObjectsFromList objectsV1
@ -394,32 +396,32 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
expectedPrefListingRec = Just ["dir/dir1/o2", "dir/dir2/o3", "dir/o1"] expectedPrefListingRec = Just ["dir/dir1/o2", "dir/dir2/o3", "dir/o1"]
step "High-level listing with prefix" step "High-level listing with prefix"
prefItems <- C.runConduit $ listObjects bucket (Just "dir/") False C..| sinkList prefItems <- C.runConduit $ listObjects bucket (Just "dir/") False C..| sinkList
liftIO liftIO $
$ assertEqual assertEqual
"Objects/Dirs under prefix match failed!" "Objects/Dirs under prefix match failed!"
expectedPrefListing expectedPrefListing
$ extractObjectsAndDirsFromList prefItems $ extractObjectsAndDirsFromList prefItems
step "High-level listing with prefix recursive" step "High-level listing with prefix recursive"
prefItemsRec <- C.runConduit $ listObjects bucket (Just "dir/") True C..| sinkList prefItemsRec <- C.runConduit $ listObjects bucket (Just "dir/") True C..| sinkList
liftIO liftIO $
$ assertEqual assertEqual
"Objects/Dirs under prefix match recursive failed!" "Objects/Dirs under prefix match recursive failed!"
expectedPrefListingRec expectedPrefListingRec
$ extractObjectsFromList prefItemsRec $ extractObjectsFromList prefItemsRec
step "High-level listing with prefix (version 1)" step "High-level listing with prefix (version 1)"
prefItemsV1 <- C.runConduit $ listObjectsV1 bucket (Just "dir/") False C..| sinkList prefItemsV1 <- C.runConduit $ listObjectsV1 bucket (Just "dir/") False C..| sinkList
liftIO liftIO $
$ assertEqual assertEqual
"Objects/Dirs under prefix match failed!" "Objects/Dirs under prefix match failed!"
expectedPrefListing expectedPrefListing
$ extractObjectsAndDirsFromList prefItemsV1 $ extractObjectsAndDirsFromList prefItemsV1
step "High-level listing with prefix recursive (version 1)" step "High-level listing with prefix recursive (version 1)"
prefItemsRecV1 <- C.runConduit $ listObjectsV1 bucket (Just "dir/") True C..| sinkList prefItemsRecV1 <- C.runConduit $ listObjectsV1 bucket (Just "dir/") True C..| sinkList
liftIO liftIO $
$ assertEqual assertEqual
"Objects/Dirs under prefix match recursive failed!" "Objects/Dirs under prefix match recursive failed!"
expectedPrefListingRec expectedPrefListingRec
$ extractObjectsFromList prefItemsRecV1 $ extractObjectsFromList prefItemsRecV1
@ -910,7 +912,8 @@ putObjectUserMetadataTest = funTestWithBucket "putObject user-metadata test" $
let m = oiUserMetadata oi let m = oiUserMetadata oi
-- need to do a case-insensitive comparison -- need to do a case-insensitive comparison
sortedMeta = sortedMeta =
sort $ map (\(k, v) -> (T.toLower k, T.toLower v)) $ sort $
map (\(k, v) -> (T.toLower k, T.toLower v)) $
H.toList m H.toList m
ref = sort [("mykey1", "myval1"), ("mykey2", "myval2")] ref = sort [("mykey1", "myval1"), ("mykey2", "myval2")]
@ -944,7 +947,8 @@ getObjectTest = funTestWithBucket "getObject test" $
let m = oiUserMetadata $ gorObjectInfo gor let m = oiUserMetadata $ gorObjectInfo gor
-- need to do a case-insensitive comparison -- need to do a case-insensitive comparison
sortedMeta = sortedMeta =
sort $ map (\(k, v) -> (T.toLower k, T.toLower v)) $ sort $
map (\(k, v) -> (T.toLower k, T.toLower v)) $
H.toList m H.toList m
ref = sort [("mykey1", "myval1"), ("mykey2", "myval2")] ref = sort [("mykey1", "myval1"), ("mykey2", "myval2")]

View File

@ -63,7 +63,8 @@ parseServerInfoJSONTest =
testGroup "Parse MinIO Admin API ServerInfo JSON test" $ testGroup "Parse MinIO Admin API ServerInfo JSON test" $
map map
( \(tName, tDesc, tfn, tVal) -> ( \(tName, tDesc, tfn, tVal) ->
testCase tName $ assertBool tDesc $ testCase tName $
assertBool tDesc $
tfn (eitherDecode tVal :: Either [Char] [ServerInfo]) tfn (eitherDecode tVal :: Either [Char] [ServerInfo])
) )
testCases testCases
@ -82,7 +83,8 @@ parseHealStatusTest =
testGroup "Parse MinIO Admin API HealStatus JSON test" $ testGroup "Parse MinIO Admin API HealStatus JSON test" $
map map
( \(tName, tDesc, tfn, tVal) -> ( \(tName, tDesc, tfn, tVal) ->
testCase tName $ assertBool tDesc $ testCase tName $
assertBool tDesc $
tfn (eitherDecode tVal :: Either [Char] HealStatus) tfn (eitherDecode tVal :: Either [Char] HealStatus)
) )
testCases testCases
@ -101,7 +103,8 @@ parseHealStartRespTest =
testGroup "Parse MinIO Admin API HealStartResp JSON test" $ testGroup "Parse MinIO Admin API HealStartResp JSON test" $
map map
( \(tName, tDesc, tfn, tVal) -> ( \(tName, tDesc, tfn, tVal) ->
testCase tName $ assertBool tDesc $ testCase tName $
assertBool tDesc $
tfn (eitherDecode tVal :: Either [Char] HealStartResp) tfn (eitherDecode tVal :: Either [Char] HealStartResp)
) )
testCases testCases

View File

@ -43,9 +43,9 @@ testParseErrResponseJSON :: Assertion
testParseErrResponseJSON = do testParseErrResponseJSON = do
-- 1. Test parsing of an invalid error json. -- 1. Test parsing of an invalid error json.
parseResE <- tryValidationErr $ parseErrResponseJSON "ClearlyInvalidJSON" parseResE <- tryValidationErr $ parseErrResponseJSON "ClearlyInvalidJSON"
when (isRight parseResE) when (isRight parseResE) $
$ assertFailure assertFailure $
$ "Parsing should have failed => " ++ show parseResE "Parsing should have failed => " ++ show parseResE
forM_ cases $ \(jsondata, sErr) -> do forM_ cases $ \(jsondata, sErr) -> do
parseErr <- tryValidationErr $ parseErrResponseJSON jsondata parseErr <- tryValidationErr $ parseErrResponseJSON jsondata

View File

@ -62,9 +62,9 @@ testParseLocation :: Assertion
testParseLocation = do testParseLocation = do
-- 1. Test parsing of an invalid location constraint xml. -- 1. Test parsing of an invalid location constraint xml.
parseResE <- tryValidationErr $ parseLocation "ClearlyInvalidXml" parseResE <- tryValidationErr $ parseLocation "ClearlyInvalidXml"
when (isRight parseResE) when (isRight parseResE) $
$ assertFailure assertFailure $
$ "Parsing should have failed => " ++ show parseResE "Parsing should have failed => " ++ show parseResE
forM_ cases $ \(xmldata, expectedLocation) -> do forM_ cases $ \(xmldata, expectedLocation) -> do
parseLocE <- tryValidationErr $ parseLocation xmldata parseLocE <- tryValidationErr $ parseLocation xmldata
@ -344,7 +344,8 @@ testParseNotification = do
"1" "1"
"arn:aws:sqs:us-west-2:444455556666:s3notificationqueue" "arn:aws:sqs:us-west-2:444455556666:s3notificationqueue"
[ObjectCreatedPut] [ObjectCreatedPut]
( Filter $ FilterKey $ ( Filter $
FilterKey $
FilterRules FilterRules
[ FilterRule "prefix" "images/", [ FilterRule "prefix" "images/",
FilterRule "suffix" ".jpg" FilterRule "suffix" ".jpg"