@@ -1,6 +1,6 @@
11{-# LANGUAGE OverloadedStrings #-}
22--
3−-- MinIO Haskell SDK, (C) 2017, 2018 MinIO, Inc.
3+-- MinIO Haskell SDK, (C) 2017-2019 MinIO, Inc.
44--
55-- Licensed under the Apache License, Version 2.0 (the "License");
66-- you may not use this file except in compliance with the License.
@@ -295,22 +295,66 @@ highLevelListingTest = funTestWithBucket "High-level listObjects Test" $
295295 \step bucket -> do
296296 step "High-level listObjects Test"
297297 step "put 3 objects"
298− let expectedObjects = ["dir/o1", "dir/dir1/o2", "dir/dir2/o3"]
298+ let expectedObjects = ["dir/o1", "dir/dir1/o2", "dir/dir2/o3", "o4"]
299+ extractObjectsFromList os =
300+ mapM (\t -> case t of
301+ ListItemObject o -> Just $ oiObject o
302+ _ -> Nothing) os
303+ expectedNonRecList = ["o4", "dir/"]
304+ extractObjectsAndDirsFromList os =
305+ map (\t -> case t of
306+ ListItemObject o -> oiObject o
307+ ListItemPrefix d -> d) os
308+
299309 forM_ expectedObjects $
300310 \obj -> fPutObject bucket obj "/etc/lsb-release" defaultPutObjectOptions
301311
302312 step "High-level listing of objects"
313+ items <- C.runConduit $ listObjects bucket Nothing False C..| sinkList
314+ liftIO $ assertEqual "Objects/Dirs match failed!" expectedNonRecList $
315+ extractObjectsAndDirsFromList items
316+
317+ step "High-level recursive listing of objects"
303318 objects <- C.runConduit $ listObjects bucket Nothing True C..| sinkList
304319
305− liftIO $ assertEqual "Objects match failed!" (sort expectedObjects)
306− (map oiObject objects)
320+ liftIO $ assertEqual "Objects match failed!"
321+ (Just $ sort expectedObjects) $
322+ extractObjectsFromList objects
307323
308324 step "High-level listing of objects (version 1)"
325+ itemsV1 <- C.runConduit $ listObjectsV1 bucket Nothing False C..| sinkList
326+ liftIO $ assertEqual "Objects/Dirs match failed!" expectedNonRecList $
327+ extractObjectsAndDirsFromList itemsV1
328+
329+ step "High-level recursive listing of objects (version 1)"
309330 objectsV1 <- C.runConduit $ listObjectsV1 bucket Nothing True C..|
310331 sinkList
311332
312− liftIO $ assertEqual "Objects match failed!" (sort expectedObjects)
313− (map oiObject objectsV1)
333+ liftIO $ assertEqual "Objects match failed!"
334+ (Just $ sort expectedObjects) $
335+ extractObjectsFromList objectsV1
336+
337+ let expectedPrefListing = ["dir/o1", "dir/dir1/", "dir/dir2/"]
338+ expectedPrefListingRec = Just ["dir/dir1/o2", "dir/dir2/o3", "dir/o1"]
339+ step "High-level listing with prefix"
340+ prefItems <- C.runConduit $ listObjects bucket (Just "dir/") False C..| sinkList
341+ liftIO $ assertEqual "Objects/Dirs under prefix match failed!"
342+ expectedPrefListing $ extractObjectsAndDirsFromList prefItems
343+
344+ step "High-level listing with prefix recursive"
345+ prefItemsRec <- C.runConduit $ listObjects bucket (Just "dir/") True C..| sinkList
346+ liftIO $ assertEqual "Objects/Dirs under prefix match recursive failed!"
347+ expectedPrefListingRec $ extractObjectsFromList prefItemsRec
348+
349+ step "High-level listing with prefix (version 1)"
350+ prefItemsV1 <- C.runConduit $ listObjectsV1 bucket (Just "dir/") False C..| sinkList
351+ liftIO $ assertEqual "Objects/Dirs under prefix match failed!"
352+ expectedPrefListing $ extractObjectsAndDirsFromList prefItemsV1
353+
354+ step "High-level listing with prefix recursive (version 1)"
355+ prefItemsRecV1 <- C.runConduit $ listObjectsV1 bucket (Just "dir/") True C..| sinkList
356+ liftIO $ assertEqual "Objects/Dirs under prefix match recursive failed!"
357+ expectedPrefListingRec $ extractObjectsFromList prefItemsRecV1
314358
315359 step "Cleanup actions"
316360 forM_ expectedObjects $