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(..), PeerResp(..), mkPeerResp)
15 -- Parsed .torrent file
17 file = Bdict (fromList [
18 ("announce", Bstr "http://carrot.cs.swarthmore.edu:6969"),
19 ("created by", Bstr "Enhanced-CTorrent/dnh3.3.2"),
20 ("creation date", Bint 1352142460),
21 ("info", Bdict (fromList [
22 ("length", Bint 31690),
23 ("name", Bstr "moby_dick.txt"),
24 ("piece length", Bint 262144),
25 ("pieces", Bstr "\bW\196\168g\178\198=\156\204\221M\242\207\DC1\159\ETB~\241H")]))])
31 pieces = "\bW\196\168g\178\198=\156\204\221M\242\207\DC1\159\ETB~\241H",
33 name = "moby_dick.txt",
34 lengthInBytes = 31690,
37 announceList = ["http://carrot.cs.swarthmore.edu:6969"],
38 creationDate = Nothing,
40 createdBy = Just "Enhanced-CTorrent/dnh3.3.2",
45 testFile = testCase "Should parse valid torrent files" $ do
46 str <- readFile "./data/moby_dick.txt.torrent"
48 Right expected -> expected @?= file
49 Left _ -> error "Failed parsing test file"
52 testMkMetaInfo :: TestTree
53 testMkMetaInfo = testCase "Should mkInfo valid torrent files" $ do
54 str <- readFile "./data/moby_dick.txt.torrent"
56 Right expected -> mkMetaInfo expected @?= Just moby
57 Left _ -> error "Failed parsing test file"
60 testResponse1 :: TestTree
61 testResponse1 = testCase "Should parse valid tracker response" $ do
62 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.cache"
64 Right bval -> expectation @?= mkPeerResp bval
65 Left _ -> error "Failed parsing test file"
67 expectation :: Either a PeerResp
68 expectation = Right PeerResp {
70 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],
75 testResponse2 :: TestTree
76 testResponse2 = testCase "Should parse invalid tracker response" $ do
77 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.error"
79 Right bval -> expectation @?= mkPeerResp bval
80 Left _ -> error "Failed parsing test file"
82 expectation :: Either ByteString a
83 expectation = Left "torrent not found"
87 unitTests = testGroup "Unit tests" [testFile, testMkMetaInfo, testResponse1,
91 tests = testGroup "Tests" [unitTests]
94 main = defaultMain tests