@@ -21,6 +21,7 @@ import Network.Wai.Middleware.AcceptOverride
2121import Codec.Compression.GZip (decompress)
2222
2323import Data.Enumerator (run_, enumList, ($$), Iteratee)
24+import Data.Enumerator.Binary (enumFile)
2425import Control.Monad.IO.Class (liftIO)
2526import Data.Maybe (fromMaybe)
2627
@@ -44,6 +45,7 @@ testSuite = testGroup "Network.Wai.Parse"
4445 , testCase "autohead" caseAutohead
4546 , testCase "method override" caseMethodOverride
4647 , testCase "accept override" caseAcceptOverride
48+ , testCase "dalvik multipart" caseDalvikMultipart
4749 ]
4850
4951caseParseQueryString :: Assertion
@@ -334,3 +336,31 @@ caseAcceptOverride = flip runSession aoApp $ do
334336 , requestHeaders = [("Accept", "bar")]
335337 }
336338 assertHeader "Accept" "baz" sres3
339+
340+caseDalvikMultipart = do
341+ let headers =
342+ [ ("content-length", "12098")
343+ , ("content-type", "multipart/form-data;boundary=*****")
344+ , ("GATEWAY_INTERFACE", "CGI/1.1")
345+ , ("PATH_INFO", "/")
346+ , ("QUERY_STRING", "")
347+ , ("REMOTE_ADDR", "192.168.1.115")
348+ , ("REMOTE_HOST", "ganjizza")
349+ , ("REQUEST_URI", "http://192.168.1.115:3000/")
350+ , ("REQUEST_METHOD", "POST")
351+ , ("HTTP_CONNECTION", "Keep-Alive")
352+ , ("HTTP_COOKIE", "_SESSION=fgUGM5J/k6mGAAW+MMXIJZCJHobw/oEbb6T17KQN0p9yNqiXn/m/ACrsnRjiCEgqtG4fogMUDI+jikoFGcwmPjvuD5d+MDz32iXvDdDJsFdsFMfivuey2H+n6IF6yFGD")
353+ , ("HTTP_USER_AGENT", "Dalvik/1.1.0 (Linux; U; Android 2.1-update1; sdk Build/ECLAIR)")
354+ , ("HTTP_HOST", "192.168.1.115:3000")
355+ , ("HTTP_ACCEPT", "*, */*")
356+ , ("HTTP_VERSION", "HTTP/1.1")
357+ , ("REQUEST_PATH", "/")
358+ ]
359+ let request = Request
360+ { requestHeaders = headers
361+ }
362+ (params, files) <- run_ $ enumFile "test/dalvik-request" $$ parseRequestBody lbsSink request
363+ lookup "scannedTime" params @?= Just "1.298590056748E9"
364+ lookup "geoLong" params @?= Just "0"
365+ lookup "geoLat" params @?= Just "0"
366+ length files @?= 1