1 {-# LANGUAGE OverloadedStrings #-}
4 import Prelude hiding (readFile)
5 import Data.ByteString.Char8 (ByteString, readFile)
6 import Data.Map.Strict (fromList)
9 import Test.Tasty.HUnit
11 import FuncTorrent.Bencode (decode, BVal(..))
12 import FuncTorrent.Metainfo (Info(..), Metainfo(..), mkMetaInfo)
13 import FuncTorrent.Peer (Peer(..))
14 import FuncTorrent.Tracker (TrackerResponse(..), peers, mkTrackerResponse)
16 -- Parsed .torrent file
18 file = Bdict (fromList [
19 ("announce",Bstr "http://9.rarbg.com:2710/announce"),
20 ("comment",Bstr "hello world"),
21 ("created by",Bstr "Jaseem Abid"),
22 ("creation date",Bint 1428717851),
23 ("encoding",Bstr "UTF-8"),
24 ("info",Bdict (fromList [
26 ("name",Bstr "hello.txt"),
27 ("piece length",Bint 32768),
28 ("pieces",Bstr "\"Ycc\179\222@\176o\152\US\184]\130\&1.\140\SO\213\DC1"),
29 ("private",Bint 0)]))])
35 pieces = "\"Ycc\179\222@\176o\152\US\184]\130\&1.\140\SO\213\DC1",
41 announceList = ["http://9.rarbg.com:2710/announce"],
42 creationDate = Nothing,
43 comment = Just "hello world",
44 createdBy = Just "Jaseem Abid",
45 encoding = Just "UTF-8"
49 testFile = testCase "Should parse valid torrent files" $ do
50 str <- readFile "./data/hello.txt.torrent"
52 Right expected -> expected @?= file
53 Left _ -> error "Failed parsing test file"
56 testMkMetaInfo :: TestTree
57 testMkMetaInfo = testCase "Should mkInfo valid torrent files" $ do
58 str <- readFile "./data/hello.txt.torrent"
60 Right expected -> mkMetaInfo expected @?= Just hello
61 Left _ -> error "Failed parsing test file"
63 testResponse1 :: TestTree
64 testResponse1 = testCase "Should parse valid tracker response" $ do
65 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.cache"
67 Right bval -> expectation @?= mkTrackerResponse bval
68 Left _ -> error "Failed parsing test file"
70 expectation :: Either a TrackerResponse
71 expectation = Right TrackerResponse {
73 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],
78 testResponse2 :: TestTree
79 testResponse2 = testCase "Should parse invalid tracker response" $ do
80 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.error"
82 Right bval -> expectation @?= mkTrackerResponse bval
83 Left _ -> error "Failed parsing test file"
85 expectation :: Either ByteString a
86 expectation = Left "torrent not found"
90 unitTests = testGroup "Unit tests" [testFile, testMkMetaInfo, testResponse1,
94 tests = testGroup "Tests" [unitTests]
97 main = defaultMain tests