magneturi: two passing tests
authorRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Wed, 19 Jul 2017 15:21:07 +0000 (20:51 +0530)
committerRamakrishnan Muthukrishnan <ram@rkrishnan.org>
Wed, 19 Jul 2017 15:21:07 +0000 (20:51 +0530)
functorrent.cabal
src/FuncTorrent/MagnetURI.hs
test/MagneturiTests.hs

index cec4735517ce9343e09b2614b4c3fe9bdef347e4..b85e8368c54cc9442eafbda1c5d94a205f39bbbe 100644 (file)
@@ -53,7 +53,7 @@ library
                        safe,
                        transformers
 
-executable functorrent
+executable functorrent-exe
   main-is:             Main.hs
   other-extensions:    OverloadedStrings
   hs-source-dirs:      src/main
@@ -79,17 +79,8 @@ test-suite functorrent-test
   type:              exitcode-stdio-1.0
   default-language:  Haskell2010
   hs-source-dirs:    test
-  main-is:           Test.hs
-  other-modules:     BencodeTests
-  build-depends:     base,
-                     functorrent,
-                     bytestring,
-                     containers,
-                     directory,
-                     doctest,
-                     QuickCheck,
-                     tasty,
-                     tasty-hunit,
-                     QuickCheck,
-                     tasty-quickcheck,
-                     test-framework-quickcheck2
+  main-is:           Main.hs
+  other-modules:     MagneturiTests
+  build-depends:     base
+                   , functorrent
+                   , hspec
index e0fd5450b47f07614eebef7360356cbbbfd0bace..7a9b20ed01a89dc67e2564b16724627f3422cb72 100644 (file)
@@ -45,6 +45,7 @@ module FuncTorrent.MagnetURI where
 import Text.ParserCombinators.Parsec
 import qualified Text.Parsec.ByteString as ParsecBS
 import Data.ByteString.Char8 (ByteString, pack)
+import Network.HTTP.Base (urlDecode)
 
 data Magnetinfo = Magnetinfo { infoHash :: ByteString
                              , trackerlist :: [String]
@@ -60,7 +61,7 @@ kvpair :: ParsecBS.Parser (String, String)
 kvpair = do
   k <- many1 letter
   _ <- char '='
-  v <- many1 (letter <|> digit <|> (char ':'))
+  v <- many1 (noneOf "&")
   return (k, v)
 
 magnetBody :: ParsecBS.Parser Magnetinfo
@@ -72,8 +73,8 @@ magnetBody = do
             case k of
               "xt" -> magnetRecord { infoHash = pack v }
               "tr" -> let trVal = trackerlist magnetRecord in
-                        magnetRecord { trackerlist = trVal ++ [v] }
-              "dn" -> magnetRecord { name = v }
+                        magnetRecord { trackerlist = trVal ++ [urlDecode v] }
+              "dn" -> magnetRecord { name = urlDecode v }
               "xl" -> magnetRecord { xlen = Just (read v :: Integer) }
           magnetInfo = Magnetinfo { infoHash = mempty
                                   , trackerlist = mempty
index 3689ea4f58e620984bc609c37a560c254ef7ca8e..7dd83c46ee0dbdc77337e94bc8bce1cc4ca8dd9a 100644 (file)
@@ -33,5 +33,5 @@ tests = hspec $ do
       `shouldBe` (Right (Magnetinfo {infoHash = "urn:btih:c12fe1c06bba254a9dc9f519b335aa7c1367a88a", trackerlist = [], name = "", xlen = Nothing}))
     it "Valid MagnetURI with tracker list" $ do
       parseMagneturi "magnet:?xt=urn:btih:1f8a4ee3c3f57e81f8f0b4e658177201fc2a3118&dn=Honey+Bee+2+%5B2017%5D+Malayalam+DVDRiP+x264+AAC+700MB+ZippyMovieZ+E&tr=udp%3A%2F%2Ftracker.leechers-paradise.org%3A6969&tr=udp%3A%2F%2Fzer0day.ch%3A1337&tr=udp%3A%2F%2Fopen.demonii.com%3A1337&tr=udp%3A%2F%2Ftracker.coppersurfer.tk%3A6969&tr=udp%3A%2F%2Fexodus.desync.com%3A6969"
-      `shouldBe` (Right (Magnetinfo {infoHash = "urn:btih:1f8a4ee3c3f57e81f8f0b4e658177201fc2a3118", trackerlist = [ "udp://tracker.leechers-paradise.org", "udp://zer0day.ch/", "udp://open.demonii.com/", "udp://tracker.coppersurfer.tk/", "udp://exodus.desync.com/"], name = "Honey+Bee+2+%5B2017%5D+Malayalam+DVDRiP+x264+AAC+700MB+ZippyMovieZ+E", xlen = Nothing}))
+      `shouldBe` (Right (Magnetinfo {infoHash = "urn:btih:1f8a4ee3c3f57e81f8f0b4e658177201fc2a3118", trackerlist = [ "udp://tracker.leechers-paradise.org:6969", "udp://zer0day.ch:1337", "udp://open.demonii.com:1337", "udp://tracker.coppersurfer.tk:6969", "udp://exodus.desync.com:6969"], name = "Honey+Bee+2+[2017]+Malayalam+DVDRiP+x264+AAC+700MB+ZippyMovieZ+E", xlen = Nothing}))