]> git.rkrishnan.org Git - functorrent.git/blobdiff - test/Test.hs
Basic infrastructure for Extension messages (BEP 0010)
[functorrent.git] / test / Test.hs
index 07408db922928e103a23d5e620216f1e7f2801b9..71b9f1c6ef5c0991c2a507387c29555f27349fc9 100644 (file)
@@ -2,48 +2,56 @@
 module Main where
 
 import Prelude hiding (readFile)
-import Data.ByteString.Char8 (ByteString, readFile)
+
+import Data.ByteString (ByteString, readFile)
 import Data.Map.Strict (fromList)
 
-import Test.Tasty
-import Test.Tasty.HUnit
+import Test.Tasty (TestTree, testGroup, defaultMain)
+import Test.Tasty.HUnit (testCase, (@?=))
 
-import FuncTorrent.Bencode (decode, BVal(..))
+import FuncTorrent.Bencode (encode, decode, BVal(..))
 import FuncTorrent.Metainfo (Info(..), Metainfo(..), mkMetaInfo)
-import FuncTorrent.Peer (Peer(..), PeerResp(..), mkPeerResp)
+import FuncTorrent.Peer (Peer(..))
+import FuncTorrent.Tracker
+
+import qualified BencodeTests
 
 -- Parsed .torrent file
 file :: BVal
 file = Bdict (fromList [
-               ("announce", Bstr "http://carrot.cs.swarthmore.edu:6969"),
-               ("created by", Bstr "Enhanced-CTorrent/dnh3.3.2"),
-               ("creation date", Bint 1352142460),
-               ("info", Bdict (fromList [
-                                ("length", Bint 31690),
-                                ("name", Bstr "moby_dick.txt"),
-                                ("piece length", Bint 262144),
-                                ("pieces", Bstr "\bW\196\168g\178\198=\156\204\221M\242\207\DC1\159\ETB~\241H")]))])
-
-moby :: Metainfo
-moby = Metainfo {
-         info = Info {
-           pieceLength = 262144,
-           pieces = "\bW\196\168g\178\198=\156\204\221M\242\207\DC1\159\ETB~\241H",
-           private = Nothing,
-           name = "moby_dick.txt",
-           lengthInBytes = 31690,
-           md5sum = Nothing
-         },
-         announceList = ["http://carrot.cs.swarthmore.edu:6969"],
-         creationDate = Nothing,
-         comment = Nothing,
-         createdBy = Just "Enhanced-CTorrent/dnh3.3.2",
-         encoding = Nothing
-       }
+               ("announce",Bstr "http://9.rarbg.com:2710/announce"),
+               ("comment",Bstr "hello world"),
+               ("created by",Bstr "Jaseem Abid"),
+               ("creation date",Bint 1428717851),
+               ("encoding",Bstr "UTF-8"),
+               ("info",Bdict (fromList [
+                               ("length",Bint 12),
+                               ("name",Bstr "hello.txt"),
+                               ("piece length",Bint 32768),
+                               ("pieces",Bstr "\"Ycc\179\222@\176o\152\US\184]\130\&1.\140\SO\213\DC1"),
+                               ("private",Bint 0)]))])
+
+hello :: Metainfo
+hello = Metainfo {
+          info = Info {
+            pieceLength = 32768,
+            pieces = "\"Ycc\179\222@\176o\152\US\184]\130\&1.\140\SO\213\DC1",
+            private = Nothing,
+            name = "hello.txt",
+            lengthInBytes = 12,
+            md5sum = Nothing
+          },
+          announceList = ["http://9.rarbg.com:2710/announce"],
+          creationDate = Just 1428717851,
+          comment = Just "hello world",
+          createdBy = Just "Jaseem Abid",
+          encoding = Just "UTF-8",
+          infoHash = "\205CX(;\163<?TWS\175\CAND\222\253\250\214\136\EOT"
+        }
 
 testFile :: TestTree
 testFile = testCase "Should parse valid torrent files" $ do
-               str <- readFile "./data/moby_dick.txt.torrent"
+               str <- readFile "./data/hello.txt.torrent"
                case decode str of
                  Right expected -> expected @?= file
                  Left _ -> error "Failed parsing test file"
@@ -51,23 +59,22 @@ testFile = testCase "Should parse valid torrent files" $ do
 
 testMkMetaInfo :: TestTree
 testMkMetaInfo = testCase "Should mkInfo valid torrent files" $ do
-                   str <- readFile "./data/moby_dick.txt.torrent"
+                   str <- readFile "./data/hello.txt.torrent"
                    case decode str of
-                     Right expected -> mkMetaInfo expected @?= Just moby
+                     Right expected -> mkMetaInfo expected @?= Just hello
                      Left _ -> error "Failed parsing test file"
 
-
 testResponse1 :: TestTree
 testResponse1 = testCase "Should parse valid tracker response" $ do
                   str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.cache"
                   case decode str of
-                    Right bval -> expectation @?= mkPeerResp bval
+                    Right bval -> expectation @?= mkTrackerResponse bval
                     Left _ -> error "Failed parsing test file"
                   where
-                    expectation :: Either a PeerResp
-                    expectation = Right PeerResp {
+                    expectation :: Either a TrackerResponse
+                    expectation = Right TrackerResponse {
                                     interval = Just 900,
-                                    peers = [Peer "85.25.201.101" 51413, Peer "37.59.28.236" 22222, Peer "76.21.149.43" 51866, Peer "31.183.33.205" 43467, Peer "213.210.120.86" 27480, Peer "213.239.216.205" 6914, Peer "91.192.163.152" 11834, Peer "62.210.240.65" 6999, Peer "84.250.103.161" 6949, Peer "88.195.241.192" 51413, Peer "88.165.61.223" 6881, Peer "86.157.234.243" 59583, Peer "213.41.137.242" 51413, Peer "91.10.84.195" 46941, Peer "64.56.249.183" 7023, Peer "202.62.16.71" 59929, Peer "31.43.126.122" 57816, Peer "68.169.133.72" 50222, Peer "223.135.97.177" 58813, Peer "5.166.93.118" 64459, Peer "200.148.109.141" 51413, Peer "109.226.236.160" 44444, Peer "78.58.139.154" 22818, Peer "188.244.47.186" 39643, Peer "203.86.204.111" 52411, Peer "80.110.40.98" 6918, Peer "68.187.142.217" 58352, Peer "71.115.139.180" 63065, Peer "70.169.35.173" 51413, Peer "185.3.135.186" 10889, Peer "88.198.224.202" 51413, Peer "183.157.65.217" 9179, Peer "87.251.189.150" 46680, Peer "87.114.202.174" 12393, Peer "93.58.5.16" 51411, Peer "89.102.9.69" 10044, Peer "94.159.19.222" 15783, Peer "95.28.49.176" 58794, Peer "217.114.58.135" 6881, Peer "79.141.162.38" 35806, Peer "136.169.50.72" 54927, Peer "187.67.188.151" 51413, Peer "79.111.218.50" 53636, Peer "62.75.137.129" 51413, Peer "14.204.20.156" 11600, Peer "79.141.162.34" 24531, Peer "82.144.192.7" 63208, Peer "212.34.231.10" 20684, Peer "95.225.246.221" 51413, Peer "124.41.237.102" 24874],
+                                    peers = [Peer "" "85.25.201.101" 51413, Peer "" "37.59.28.236" 22222, Peer "" "76.21.149.43" 51866, Peer "" "31.183.33.205" 43467, Peer "" "213.210.120.86" 27480, Peer "" "213.239.216.205" 6914, Peer "" "91.192.163.152" 11834, Peer "" "62.210.240.65" 6999, Peer "" "84.250.103.161" 6949, Peer "" "88.195.241.192" 51413, Peer "" "88.165.61.223" 6881, Peer "" "86.157.234.243" 59583, Peer "" "213.41.137.242" 51413, Peer "" "91.10.84.195" 46941, Peer "" "64.56.249.183" 7023, Peer "" "202.62.16.71" 59929, Peer "" "31.43.126.122" 57816, Peer "" "68.169.133.72" 50222, Peer "" "223.135.97.177" 58813, Peer "" "5.166.93.118" 64459, Peer "" "200.148.109.141" 51413, Peer "" "109.226.236.160" 44444, Peer "" "78.58.139.154" 22818, Peer "" "188.244.47.186" 39643, Peer "" "203.86.204.111" 52411, Peer "" "80.110.40.98" 6918, Peer "" "68.187.142.217" 58352, Peer "" "71.115.139.180" 63065, Peer "" "70.169.35.173" 51413, Peer "" "185.3.135.186" 10889, Peer "" "88.198.224.202" 51413, Peer "" "183.157.65.217" 9179, Peer "" "87.251.189.150" 46680, Peer "" "87.114.202.174" 12393, Peer "" "93.58.5.16" 51411, Peer "" "89.102.9.69" 10044, Peer "" "94.159.19.222" 15783, Peer "" "95.28.49.176" 58794, Peer "" "217.114.58.135" 6881, Peer "" "79.141.162.38" 35806, Peer "" "136.169.50.72" 54927, Peer "" "187.67.188.151" 51413, Peer "" "79.111.218.50" 53636, Peer "" "62.75.137.129" 51413, Peer "" "14.204.20.156" 11600, Peer "" "79.141.162.34" 24531, Peer "" "82.144.192.7" 63208, Peer "" "212.34.231.10" 20684, Peer "" "95.225.246.221" 51413, Peer "" "124.41.237.102" 24874],
                                     complete = Nothing,
                                     incomplete = Nothing
                                 }
@@ -76,7 +83,7 @@ testResponse2 :: TestTree
 testResponse2 = testCase "Should parse invalid tracker response" $ do
                   str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.error"
                   case decode str of
-                    Right bval -> expectation @?= mkPeerResp bval
+                    Right bval -> expectation @?= mkTrackerResponse bval
                     Left _ -> error "Failed parsing test file"
                   where
                     expectation :: Either ByteString a
@@ -88,7 +95,7 @@ unitTests = testGroup "Unit tests" [testFile, testMkMetaInfo, testResponse1,
                                             testResponse2]
 
 tests :: TestTree
-tests = testGroup "Tests" [unitTests]
+tests = testGroup "Tests" [unitTests, BencodeTests.tests]
 
 main :: IO ()
 main = defaultMain tests