module Network.Minio.XmlParser.Test ( xmlParserTests ) where import Test.Tasty import Test.Tasty.HUnit import Data.Time (fromGregorian, UTCTime(..)) import Lib.Prelude import Network.Minio.Data import Network.Minio.XmlParser xmlParserTests :: TestTree xmlParserTests = testGroup "XML Parser Tests" [ testCase "Test parseLocation" testParseLocation , testCase "Test parseNewMultipartUpload" testParseNewMultipartUpload , testCase "Test parseListObjectsResponse" testParseListObjectsResult , testCase "Test parseListUploadsresponse" testParseListIncompleteUploads ] testParseLocation :: Assertion testParseLocation = do -- 1. Test parsing of an invalid location constraint xml. parsedLocationE <- runExceptT $ parseLocation "ClearlyInvalidXml" case parsedLocationE of Right _ -> assertFailure $ "Parsing should have failed => " ++ show parsedLocationE Left _ -> return () forM_ cases $ \(xmldata, expectedLocation) -> do parsedLocationE1 <- runExceptT $ parseLocation xmldata case parsedLocationE1 of Right parsedLocation -> parsedLocation @?= expectedLocation _ -> assertFailure $ "Parsing failed => " ++ show parsedLocationE1 where cases = [ -- 2. Test parsing of a valid location xml. ("\ \EU", "EU" ) , -- 3. Test parsing of a valid, empty location xml. ("", "" ) ] testParseNewMultipartUpload :: Assertion testParseNewMultipartUpload = do forM_ cases $ \(xmldata, expectedUploadId) -> do parsedUploadIdE <- runExceptT $ parseNewMultipartUpload xmldata case parsedUploadIdE of Right upId -> upId @?= expectedUploadId _ -> assertFailure $ "Parsing failed => " ++ show parsedUploadIdE where cases = [ ("\ \\ \ example-bucket\ \ example-object\ \ VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA\ \", "VXBsb2FkIElEIGZvciA2aWWpbmcncyBteS1tb3ZpZS5tMnRzIHVwbG9hZA" ), ("\ \\ \ example-bucket\ \ example-object\ \ EXAMPLEJZ6e0YupT2h66iePQCc9IEbYbDUy4RTpMeoSMLPRp8Z5o1u8feSRonpvnWsKKG35tI2LB9VDPiCgTy.Gq2VxQLYjrue4Nq.NBdqI-\ \", "EXAMPLEJZ6e0YupT2h66iePQCc9IEbYbDUy4RTpMeoSMLPRp8Z5o1u8feSRonpvnWsKKG35tI2LB9VDPiCgTy.Gq2VxQLYjrue4Nq.NBdqI-" ) ] testParseListObjectsResult :: Assertion testParseListObjectsResult = do let xmldata = "\ \\ \bucket\ \\ \205\ \1000\ \false\ \\ \my-image.jpg\ \2009-10-12T17:50:30.000Z\ \"fba9dede5f27731c9771645a39863328"\ \434234\ \STANDARD\ \\ \" expectedListResult = ListObjectsResult False Nothing [object1] [] object1 = ObjectInfo "my-image.jpg" modifiedTime1 "\"fba9dede5f27731c9771645a39863328\"" 434234 modifiedTime1 = flip UTCTime 64230 $ fromGregorian 2009 10 12 parsedListObjectsResult <- runExceptT $ parseListObjectsResponse xmldata case parsedListObjectsResult of Right listObjectsResult -> listObjectsResult @?= expectedListResult _ -> assertFailure $ "Parsing failed => " ++ show parsedListObjectsResult testParseListIncompleteUploads :: Assertion testParseListIncompleteUploads = do let xmldata = "\ \example-bucket\ \\ \\ \sample.jpg\ \Xgw4MJT6ZPAVxpY0SAuGN7q4uWJJM22ZYg1W99trdp4tpO88.PT6.MhO0w2E17eutfAvQfQWoajgE_W2gpcxQw--\ \/\ \\ \1000\ \false\ \\ \sample.jpg\ \Agw4MJT6ZPAVxpY0SAuGN7q4uWJJM22ZYg1N99trdp4tpO88.PT6.MhO0w2E17eutfAvQfQWoajgE_W2gpcxQw--\ \\ \314133b66967d86f031c7249d1d9a80249109428335cd0ef1cdc487b4566cb1b\ \s3-nickname\ \\ \\ \314133b66967d86f031c7249d1d9a80249109428335cd0ef1cdc487b4566cb1b\ \s3-nickname\ \\ \STANDARD\ \2010-11-26T19:24:17.000Z\ \\ \\ \photos/\ \\ \\ \videos/\ \\ \" expectedListResult = ListUploadsResult False (Just "sample.jpg") (Just "Xgw4MJT6ZPAVxpY0SAuGN7q4uWJJM22ZYg1W99trdp4tpO88.PT6.MhO0w2E17eutfAvQfQWoajgE_W2gpcxQw--") uploads prefixes uploads = [UploadInfo "sample.jpg" "Agw4MJT6ZPAVxpY0SAuGN7q4uWJJM22ZYg1N99trdp4tpO88.PT6.MhO0w2E17eutfAvQfQWoajgE_W2gpcxQw--" initTime] initTime = UTCTime (fromGregorian 2010 11 26) 69857 prefixes = ["photos/", "videos/"] parsedListUploadsResult <- runExceptT $ parseListUploadsResponse xmldata case parsedListUploadsResult of Right listUploadsResult -> listUploadsResult @?= expectedListResult _ -> assertFailure $ "Parsing failed => " ++ show parsedListUploadsResult