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.Peer (Peer(..), PeerResp(..), mkPeerResp)
14 -- Parsed .torrent file
16 file = Bdict (fromList [
17 ("announce", Bstr "http://carrot.cs.swarthmore.edu:6969"),
18 ("created by", Bstr "Enhanced-CTorrent/dnh3.3.2"),
19 ("creation date", Bint 1352142460),
20 ("info", Bdict (fromList [
21 ("length", Bint 31690),
22 ("name", Bstr "moby_dick.txt"),
23 ("piece length", Bint 262144),
24 ("pieces", Bstr "\bW\196\168g\178\198=\156\204\221M\242\207\DC1\159\ETB~\241H")]))])
27 testFile = testCase "Should parse regular torrent files" $ do
28 str <- readFile "./data/moby_dick.txt.torrent"
30 Right expected -> expected @?= file
31 Left _ -> error "Failed parsing test file"
33 testResponse1 :: TestTree
34 testResponse1 = testCase "Should parse valid tracker response" $ do
35 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.cache"
37 Right bval -> expectation @?= mkPeerResp bval
38 Left _ -> error "Failed parsing test file"
40 expectation :: Either a PeerResp
41 expectation = Right PeerResp {
43 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],
48 testResponse2 :: TestTree
49 testResponse2 = testCase "Should parse invalid tracker response" $ do
50 str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.error"
52 Right bval -> expectation @?= mkPeerResp bval
53 Left _ -> error "Failed parsing test file"
55 expectation :: Either ByteString a
56 expectation = Left "torrent not found"
60 unitTests = testGroup "Unit tests" [testFile, testResponse1, testResponse2]
63 tests = testGroup "Tests" [unitTests]
66 main = defaultMain tests