@@ -39,11 +39,11 @@ import Network.Minio.S3API
39import Network.Minio.Utils
39import Network.Minio.Utils
40import System.Directory (getTemporaryDirectory)
40import System.Directory (getTemporaryDirectory)
41import System.Environment (lookupEnv)
41import System.Environment (lookupEnv)
42−import qualified System.IO as SIO
43import qualified Test.QuickCheck as Q
42import qualified Test.QuickCheck as Q
44import Test.Tasty
43import Test.Tasty
45import Test.Tasty.HUnit
44import Test.Tasty.HUnit
46import Test.Tasty.QuickCheck as QC
45import Test.Tasty.QuickCheck as QC
46+import qualified UnliftIO.IO as UIO
48main :: IO ()
48main :: IO ()
49main = defaultMain tests
49main = defaultMain tests
@@ -72,7 +72,7 @@ randomDataSrc s' = genBS s'
73mkRandFile :: R.MonadResource m => Int64 -> m FilePath
73mkRandFile :: R.MonadResource m => Int64 -> m FilePath
74mkRandFile size = do
74mkRandFile size = do
75− dir <- liftIO $ getTemporaryDirectory
75+ dir <- liftIO getTemporaryDirectory
76 C.runConduit $ randomDataSrc size C..| CB.sinkTempFile dir "miniohstest.random"
76 C.runConduit $ randomDataSrc size C..| CB.sinkTempFile dir "miniohstest.random"
78funTestBucketPrefix :: Text
78funTestBucketPrefix :: Text
@@ -158,17 +158,18 @@ basicTests = funTestWithBucket "Basic tests" $
158 liftIO $ region == "us-east-1" @? ("Got unexpected region => " ++ show region)
158 liftIO $ region == "us-east-1" @? ("Got unexpected region => " ++ show region)
160 step "singlepart putObject works"
160 step "singlepart putObject works"
161+ testFilepath <- mkRandFile 200
161− fPutObject bucket "lsb-release" "/etc/lsb-release" defaultPutObjectOptions
162+ fPutObject bucket "test-file" testFilepath defaultPutObjectOptions
163 step "fPutObject onto a non-existent bucket and check for NoSuchBucket exception"
164 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
165 case fpE of
166 case fpE of
166 Left exn -> liftIO $ exn @?= NoSuchBucket
167 Left exn -> liftIO $ exn @?= NoSuchBucket
167 _ -> return ()
168 _ -> return ()
169 outFile <- mkRandFile 0
170 outFile <- mkRandFile 0
170 step "simple fGetObject works"
171 step "simple fGetObject works"
171− fGetObject bucket "lsb-release" outFile defaultGetObjectOptions
172+ fGetObject bucket "test-file" outFile defaultGetObjectOptions
173 let unmodifiedTime = UTCTime (fromGregorian 2010 11 26) 69857
174 let unmodifiedTime = UTCTime (fromGregorian 2010 11 26) 69857
174 step "fGetObject an object which is modified now but requesting as un-modified in past, check for exception"
175 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" $
177 fGetObject
178 fGetObject
179− "lsb-release"
180+ "test-file"
181 defaultGetObjectOptions
182 defaultGetObjectOptions
182 { gooIfUnmodifiedSince = (Just unmodifiedTime)
183 { gooIfUnmodifiedSince = (Just unmodifiedTime)
@@ -190,7 +191,7 @@ basicTests = funTestWithBucket "Basic tests" $
191 fGetObject
192 fGetObject
193− "lsb-release"
194+ "test-file"
195 defaultGetObjectOptions
196 defaultGetObjectOptions
196 { gooIfMatch = (Just "invalid-etag")
197 { gooIfMatch = (Just "invalid-etag")
@@ -204,10 +205,10 @@ basicTests = funTestWithBucket "Basic tests" $
205 fGetObject
206 fGetObject
207− "lsb-release"
208+ "test-file"
209 defaultGetObjectOptions
210 defaultGetObjectOptions
210− { gooRange = (Just $ HT.ByteRangeFromTo 100 200)
211+ { gooRange = (Just $ HT.ByteRangeFromTo 100 300)
212 case resE2 of
213 case resE2 of
213 Left exn -> liftIO $ exn @?= ServiceErr "InvalidRange" "The requested range is not satisfiable"
214 Left exn -> liftIO $ exn @?= ServiceErr "InvalidRange" "The requested range is not satisfiable"
@@ -216,7 +217,7 @@ basicTests = funTestWithBucket "Basic tests" $
216 step "fGetObject on object with a valid range"
217 step "fGetObject on object with a valid range"
217 fGetObject
218 fGetObject
219− "lsb-release"
220+ "test-file"
221 defaultGetObjectOptions
222 defaultGetObjectOptions
222 { gooRange = (Just $ HT.ByteRangeFrom 1)
223 { gooRange = (Just $ HT.ByteRangeFrom 1)
@@ -236,7 +237,7 @@ basicTests = funTestWithBucket "Basic tests" $
236 abortMultipartUpload bucket "newmpupload" uid
237 abortMultipartUpload bucket "newmpupload" uid
238 step "delete object works"
239 step "delete object works"
239− deleteObject bucket "lsb-release"
240+ deleteObject bucket "test-file"
241 step "statObject test"
242 step "statObject test"
242 let object = "sample"
243 let object = "sample"
@@ -266,8 +267,9 @@ lowLevelMultipartTest = funTestWithBucket "Low-level Multipart Test" $
266 randFile <- mkRandFile mb15
267 randFile <- mkRandFile mb15
268 step "put object parts 1 of 1"
269 step "put object parts 1 of 1"
269− h <- liftIO $ SIO.openBinaryFile randFile SIO.ReadMode
271+ UIO.withBinaryFile randFile UIO.ReadMode $ \h ->
270− partInfo <- putObjectPart bucket object uid 1 [] $ PayloadH h 0 mb15
272+ putObjectPart bucket object uid 1 [] $ PayloadH h 0 mb15
272 step "complete multipart"
274 step "complete multipart"
273 void $ completeMultipartUpload bucket object uid [partInfo]
275 void $ completeMultipartUpload bucket object uid [partInfo]
@@ -353,8 +355,9 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
358+ testFilepath <- mkRandFile 200
356 forM_ expectedObjects $
359 forM_ expectedObjects $
357− \obj -> fPutObject bucket obj "/etc/lsb-release" defaultPutObjectOptions
360+ \obj -> fPutObject bucket obj testFilepath defaultPutObjectOptions
359 step "High-level listing of objects"
362 step "High-level listing of objects"
360 items <- C.runConduit $ listObjects bucket Nothing False C..| sinkList
363 items <- C.runConduit $ listObjects bucket Nothing False C..| sinkList
@@ -452,9 +455,9 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
453 step "put object parts 1..10"
456 step "put object parts 1..10"
454 inputFile <- mkRandFile mb5
457 inputFile <- mkRandFile mb5
455− h <- liftIO $ SIO.openBinaryFile inputFile SIO.ReadMode
458+ UIO.withBinaryFile inputFile UIO.ReadMode $ \h ->
456− forM_ [1 .. 10] $ \pnum ->
459+ forM_ [1 .. 10] $ \pnum ->
457− putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
460+ putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
459 step "fetch list parts"
462 step "fetch list parts"
460 incompleteParts <-
463 incompleteParts <-
@@ -470,10 +473,11 @@ listingTest :: TestTree
470listingTest = funTestWithBucket "Listing Test" $ \step bucket -> do
473listingTest = funTestWithBucket "Listing Test" $ \step bucket -> do
471 step "listObjects' test"
474 step "listObjects' test"
472 step "put 10 objects"
475 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]
478+ testFilepath <- mkRandFile 200
475 forM_ [1 .. 10 :: Int] $ \s ->
479 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
478 step "Simple list"
482 step "Simple list"
479 res <- listObjects' bucket Nothing Nothing Nothing Nothing
483 res <- listObjects' bucket Nothing Nothing Nothing Nothing
@@ -490,7 +494,7 @@ listingTest = funTestWithBucket "Listing Test" $ \step bucket -> do
492 ( T.concat
496 ( T.concat
493− . ("lsb-release" :)
497+ . ("test-file-" :)
494 . (\x -> [x])
498 . (\x -> [x])
@@ -536,9 +540,9 @@ listingTest = funTestWithBucket "Listing Test" $ \step bucket -> do
537 step "put object parts 1..10"
541 step "put object parts 1..10"
538 inputFile <- mkRandFile mb5
542 inputFile <- mkRandFile mb5
539− h <- liftIO $ SIO.openBinaryFile inputFile SIO.ReadMode
543+ UIO.withBinaryFile inputFile UIO.ReadMode $ \h ->
540− forM_ [1 .. 10] $ \pnum ->
544+ forM_ [1 .. 10] $ \pnum ->
541− putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
545+ putObjectPart bucket object uid pnum [] $ PayloadH h 0 mb5
543 step "fetch list parts"
547 step "fetch list parts"
544 listPartsResult <- listIncompleteParts' bucket object uid Nothing Nothing
548 listPartsResult <- listIncompleteParts' bucket object uid Nothing Nothing
@@ -754,26 +758,28 @@ bucketPolicyFunTest = funTestWithBucket "Bucket Policy tests" $
754multipartTest :: TestTree
758multipartTest :: TestTree
755multipartTest = funTestWithBucket "Multipart Tests" $
759multipartTest = funTestWithBucket "Multipart Tests" $
756 \step bucket -> do
760 \step bucket -> do
761+ -- Commenting out test since it's platform specific.
762+ -- FIXME: Need to find a platform agnostic way to test this.
757− step "Prepare for putObjectInternal with non-seekable file, with size."
763+ -- step "Prepare for putObjectInternal with non-seekable file, with size."
758− step "Upload multipart file."
764+ -- step "Upload multipart file."
759− let mb80 = 80 * 1024 * 1024
765+ -- let mb80 = 80 * 1024 * 1024
760− obj = "mpart"
766+ -- obj = "mpart"
762− void $ putObjectInternal bucket obj defaultPutObjectOptions $ ODFile "/dev/zero" (Just mb80)
768+ -- void $ putObjectInternal bucket obj defaultPutObjectOptions $ ODFile "/dev/zero" (Just mb80)
764− step "Retrieve and verify file size"
770+ -- step "Retrieve and verify file size"
765− destFile <- mkRandFile 0
771+ -- destFile <- mkRandFile 0
766− fGetObject bucket obj destFile defaultGetObjectOptions
772+ -- fGetObject bucket obj destFile defaultGetObjectOptions
767− gotSize <- withNewHandle destFile getFileSize
773+ -- gotSize <- withNewHandle destFile getFileSize
768− liftIO $
774+ -- liftIO $
769− gotSize == Right (Just mb80)
775+ -- gotSize == Right (Just mb80)
770− @? "Wrong file size of put file after getting"
776+ -- @? "Wrong file size of put file after getting"
772− step "Cleanup actions"
778+ -- step "Cleanup actions"
773− removeObject bucket obj
779+ -- removeObject bucket obj
775− step "cleanup"
781+ -- step "cleanup"
776− removeObject bucket "big"
782+ -- removeObject bucket "big"
778 step "Prepare for removeIncompleteUpload"
784 step "Prepare for removeIncompleteUpload"
779 -- low-level multipart operation tests.
785 -- low-level multipart operation tests.
@@ -788,8 +794,8 @@ multipartTest = funTestWithBucket "Multipart Tests" $
789 step "upload 2 parts"
795 step "upload 2 parts"
790 forM_ [1, 2] $ \partNum -> do
796 forM_ [1, 2] $ \partNum -> do
791− h <- liftIO $ SIO.openBinaryFile randFile SIO.ReadMode
797+ UIO.withBinaryFile randFile UIO.ReadMode $ \h ->
792− void $ putObjectPart bucket object uid partNum [] $ PayloadH h 0 kb5
798+ void $ putObjectPart bucket object uid partNum [] $ PayloadH h 0 kb5
794 step "remove ongoing upload"
800 step "remove ongoing upload"
795 removeIncompleteUpload bucket object
801 removeIncompleteUpload bucket object