1 {-# LANGUAGE OverloadedStrings #-}
4 import Prelude hiding (readFile)
6 import Data.ByteString (ByteString, readFile)
7 import Data.Map.Strict (fromList)
9 import Test.Tasty (TestTree, testGroup, defaultMain)
10 import Test.Tasty.HUnit (testCase, (@?=))
12 import FuncTorrent.Bencode (encode, decode, BVal(..))
13 import FuncTorrent.Metainfo (Info(..), Metainfo(..), mkMetaInfo)
14 import FuncTorrent.Peer (Peer(..))
15 import FuncTorrent.Tracker
17 import qualified BencodeTests
19 -- Parsed .torrent file
21 file = Bdict (fromList [
22 ("announce",Bstr "http://9.rarbg.com:2710/announce"),
23 ("comment",Bstr "hello world"),
24 ("created by",Bstr "Jaseem Abid"),
25 ("creation date",Bint 1428717851),
26 ("encoding",Bstr "UTF-8"),
27 ("info",Bdict (fromList [
29 ("name",Bstr "hello.txt"),
30 ("piece length",Bint 32768),
31 ("pieces",Bstr "\"Ycc\179\222@\176o\152\US\184]\130\&1.\140\SO\213\DC1"),
32 ("private",Bint 0)]))])
38 pieces = "\"Ycc\179\222@\176o\152\US\184]\130\&1.\140\SO\213\DC1",
44 announceList = ["http://9.rarbg.com:2710/announce"],
45 creationDate = Just 1428717851,
46 comment = Just "hello world",
47 createdBy = Just "Jaseem Abid",
48 encoding = Just "UTF-8",
49 infoHash = "\205CX(;\163<?TWS\175\CAND\222\253\250\214\136\EOT"
53 testFile = testCase "Should parse valid torrent files" $ do
54 str <- readFile "./data/hello.txt.torrent"
56 Right expected -> expected @?= file
57 Left _ -> error "Failed parsing test file"
60 testMkMetaInfo :: TestTree
61 testMkMetaInfo = testCase "Should mkInfo valid torrent files" $ do
62 str <- readFile "./data/hello.txt.torrent"
64 Right expected -> mkMetaInfo expected @?= Just hello
65 Left _ -> error "Failed parsing test file"
67 testResponse1 :: TestTree
68 testResponse1 = testCase "Should parse valid tracker response" $ do
69 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.cache"
71 Right bval -> expectation @?= mkTrackerResponse bval
72 Left _ -> error "Failed parsing test file"
74 expectation :: Either a TrackerResponse
75 expectation = Right TrackerResponse {
77 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],
82 testResponse2 :: TestTree
83 testResponse2 = testCase "Should parse invalid tracker response" $ do
84 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.error"
86 Right bval -> expectation @?= mkTrackerResponse bval
87 Left _ -> error "Failed parsing test file"
89 expectation :: Either ByteString a
90 expectation = Left "torrent not found"
94 unitTests = testGroup "Unit tests" [testFile, testMkMetaInfo, testResponse1,
98 tests = testGroup "Tests" [unitTests, BencodeTests.tests]
101 main = defaultMain tests