@@ -39,11 +39,11 @@ import Network.Minio.S3API
3939import Network.Minio.Utils
4040import System.Directory (getTemporaryDirectory)
4141import System.Environment (lookupEnv)
42−import qualified System.IO as SIO
4342import qualified Test.QuickCheck as Q
4443import Test.Tasty
4544import Test.Tasty.HUnit
4645import Test.Tasty.QuickCheck as QC
46+import qualified UnliftIO.IO as UIO
4747
4848main :: IO ()
4949main = defaultMain tests
@@ -72,7 +72,7 @@ randomDataSrc s' = genBS s'
7272
7373mkRandFile :: R.MonadResource m => Int64 -> m FilePath
7474mkRandFile size = do
75− dir <- liftIO $ getTemporaryDirectory
75+ dir <- liftIO getTemporaryDirectory
7676 C.runConduit $ randomDataSrc size C..| CB.sinkTempFile dir "miniohstest.random"
7777
7878funTestBucketPrefix :: Text
@@ -158,17 +158,18 @@ basicTests = funTestWithBucket "Basic tests" $
158158 liftIO $ region == "us-east-1" @? ("Got unexpected region => " ++ show region)
159159
160160 step "singlepart putObject works"
161− fPutObject bucket "lsb-release" "/etc/lsb-release" defaultPutObjectOptions
161+ testFilepath <- mkRandFile 200
162+ fPutObject bucket "test-file" testFilepath defaultPutObjectOptions
162163
163164 step "fPutObject onto a non-existent bucket and check for NoSuchBucket exception"
164− fpE <- try $ fPutObject "nosuchbucket" "lsb-release" "/etc/lsb-release" defaultPutObjectOptions
165+ fpE <- try $ fPutObject "nosuchbucket" "test-file-2" testFilepath defaultPutObjectOptions
165166 case fpE of
166167 Left exn -> liftIO $ exn @?= NoSuchBucket
167168 _ -> return ()
168169
169170 outFile <- mkRandFile 0
170171 step "simple fGetObject works"
171− fGetObject bucket "lsb-release" outFile defaultGetObjectOptions
172+ fGetObject bucket "test-file" outFile defaultGetObjectOptions
172173
173174 let unmodifiedTime = UTCTime (fromGregorian 2010 11 26) 69857
174175 step "fGetObject an object which is modified now but requesting as un-modified in past, check for exception"
@@ -176,7 +177,7 @@ basicTests = funTestWithBucket "Basic tests" $
176177 try $
177178 fGetObject
178179 bucket
179− "lsb-release"
180+ "test-file"
180181 outFile
181182 defaultGetObjectOptions
182183 { gooIfUnmodifiedSince = (Just unmodifiedTime)
@@ -190,7 +191,7 @@ basicTests = funTestWithBucket "Basic tests" $
190191 try $
191192 fGetObject
192193 bucket
193− "lsb-release"
194+ "test-file"
194195 outFile
195196 defaultGetObjectOptions
196197 { gooIfMatch = (Just "invalid-etag")
@@ -204,10 +205,10 @@ basicTests = funTestWithBucket "Basic tests" $
204205 try $
205206 fGetObject
206207 bucket
207− "lsb-release"
208+ "test-file"
208209 outFile
209210 defaultGetObjectOptions
210− { gooRange = (Just $ HT.ByteRangeFromTo 100 200)
211+ { gooRange = (Just $ HT.ByteRangeFromTo 100 300)
211212 }
212213 case resE2 of
213214 Left exn -> liftIO $ exn @?= ServiceErr "InvalidRange" "The requested range is not satisfiable"
@@ -216,7 +217,7 @@ basicTests = funTestWithBucket "Basic tests" $
216217 step "fGetObject on object with a valid range"
217218 fGetObject
218219 bucket
219− "lsb-release"
220+ "test-file"
220221 outFile
221222 defaultGetObjectOptions
222223 { gooRange = (Just $ HT.ByteRangeFrom 1)
@@ -236,7 +237,7 @@ basicTests = funTestWithBucket "Basic tests" $
236237 abortMultipartUpload bucket "newmpupload" uid
237238
238239 step "delete object works"
239− deleteObject bucket "lsb-release"
240+ deleteObject bucket "test-file"
240241
241242 step "statObject test"
242243 let object = "sample"
@@ -266,8 +267,9 @@ lowLevelMultipartTest = funTestWithBucket "Low-level Multipart Test" $
266267 randFile <- mkRandFile mb15
267268
268269 step "put object parts 1 of 1"
269− h <- liftIO $ SIO.openBinaryFile randFile SIO.ReadMode
270− partInfo <- putObjectPart bucket object uid 1 [] $ PayloadH h 0 mb15
270+ partInfo <-
271+ UIO.withBinaryFile randFile UIO.ReadMode $ \h ->
272+ putObjectPart bucket object uid 1 [] $ PayloadH h 0 mb15
271273
272274 step "complete multipart"
273275 void $ completeMultipartUpload bucket object uid [partInfo]
@@ -353,8 +355,9 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
353355 )
354356 os
355357
358+ testFilepath <- mkRandFile 200
356359 forM_ expectedObjects $
357− \obj -> fPutObject bucket obj "/etc/lsb-release" defaultPutObjectOptions
360+ \obj -> fPutObject bucket obj testFilepath defaultPutObjectOptions
358361
359362 step "High-level listing of objects"
360363 items <- C.runConduit $ listObjects bucket Nothing False C..| sinkList
@@ -452,9 +455,9 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
452455
453456 step "put object parts 1..10"
454457 inputFile <- mkRandFile mb5
455− h <- liftIO $ SIO.openBinaryFile inputFile SIO.ReadMode
456− forM_ [1 .. 10] $ \pnum ->
457− putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
458+ UIO.withBinaryFile inputFile UIO.ReadMode $ \h ->
459+ forM_ [1 .. 10] $ \pnum ->
460+ putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
458461
459462 step "fetch list parts"
460463 incompleteParts <-
@@ -470,10 +473,11 @@ listingTest :: TestTree
470473listingTest = funTestWithBucket "Listing Test" $ \step bucket -> do
471474 step "listObjects' test"
472475 step "put 10 objects"
473− let objects = (\s -> T.concat ["lsb-release", T.pack (show s)]) <$> [1 .. 10 :: Int]
476+ let objects = (\s -> T.concat ["test-file-", T.pack (show s)]) <$> [1 .. 10 :: Int]
474477
478+ testFilepath <- mkRandFile 200
475479 forM_ [1 .. 10 :: Int] $ \s ->
476− fPutObject bucket (T.concat ["lsb-release", T.pack (show s)]) "/etc/lsb-release" defaultPutObjectOptions
480+ fPutObject bucket (T.concat ["test-file-", T.pack (show s)]) testFilepath defaultPutObjectOptions
477481
478482 step "Simple list"
479483 res <- listObjects' bucket Nothing Nothing Nothing Nothing
@@ -490,7 +494,7 @@ listingTest = funTestWithBucket "Listing Test" $ \step bucket -> do
490494 sort $
491495 map
492496 ( T.concat
493− . ("lsb-release" :)
497+ . ("test-file-" :)
494498 . (\x -> [x])
495499 . T.pack
496500 . show
@@ -536,9 +540,9 @@ listingTest = funTestWithBucket "Listing Test" $ \step bucket -> do
536540
537541 step "put object parts 1..10"
538542 inputFile <- mkRandFile mb5
539− h <- liftIO $ SIO.openBinaryFile inputFile SIO.ReadMode
540− forM_ [1 .. 10] $ \pnum ->
541− putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
543+ UIO.withBinaryFile inputFile UIO.ReadMode $ \h ->
544+ forM_ [1 .. 10] $ \pnum ->
545+ putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
542546
543547 step "fetch list parts"
544548 listPartsResult <- listIncompleteParts' bucket object uid Nothing Nothing
@@ -754,26 +758,28 @@ bucketPolicyFunTest = funTestWithBucket "Bucket Policy tests" $
754758multipartTest :: TestTree
755759multipartTest = funTestWithBucket "Multipart Tests" $
756760 \step bucket -> do
757− step "Prepare for putObjectInternal with non-seekable file, with size."
758− step "Upload multipart file."
759− let mb80 = 80 * 1024 * 1024
760− obj = "mpart"
761+ -- Commenting out test since it's platform specific.
762+ -- FIXME: Need to find a platform agnostic way to test this.
763+ -- step "Prepare for putObjectInternal with non-seekable file, with size."
764+ -- step "Upload multipart file."
765+ -- let mb80 = 80 * 1024 * 1024
766+ -- obj = "mpart"
761767
762− void $ putObjectInternal bucket obj defaultPutObjectOptions $ ODFile "/dev/zero" (Just mb80)
768+ -- void $ putObjectInternal bucket obj defaultPutObjectOptions $ ODFile "/dev/zero" (Just mb80)
763769
764− step "Retrieve and verify file size"
765− destFile <- mkRandFile 0
766− fGetObject bucket obj destFile defaultGetObjectOptions
767− gotSize <- withNewHandle destFile getFileSize
768− liftIO $
769− gotSize == Right (Just mb80)
770− @? "Wrong file size of put file after getting"
770+ -- step "Retrieve and verify file size"
771+ -- destFile <- mkRandFile 0
772+ -- fGetObject bucket obj destFile defaultGetObjectOptions
773+ -- gotSize <- withNewHandle destFile getFileSize
774+ -- liftIO $
775+ -- gotSize == Right (Just mb80)
776+ -- @? "Wrong file size of put file after getting"
771777
772− step "Cleanup actions"
773− removeObject bucket obj
778+ -- step "Cleanup actions"
779+ -- removeObject bucket obj
774780
775− step "cleanup"
776− removeObject bucket "big"
781+ -- step "cleanup"
782+ -- removeObject bucket "big"
777783
778784 step "Prepare for removeIncompleteUpload"
779785 -- low-level multipart operation tests.
@@ -788,8 +794,8 @@ multipartTest = funTestWithBucket "Multipart Tests" $
788794
789795 step "upload 2 parts"
790796 forM_ [1, 2] $ \partNum -> do
791− h <- liftIO $ SIO.openBinaryFile randFile SIO.ReadMode
792− void $ putObjectPart bucket object uid partNum [] $ PayloadH h 0 kb5
797+ UIO.withBinaryFile randFile UIO.ReadMode $ \h ->
798+ void $ putObjectPart bucket object uid partNum [] $ PayloadH h 0 kb5
793799
794800 step "remove ongoing upload"
795801 removeIncompleteUpload bucket object