From ac4100f4f9ed09fcba4c482f3c245fc5837324b1 Mon Sep 17 00:00:00 2001 From: Jaseem Abid Date: Sun, 22 Mar 2015 23:30:46 +0530 Subject: [PATCH] Fix tracker response test --- src/FuncTorrent/Peer.hs | 34 +++++++++++++++++----------------- test/Test.hs | 18 +++++++++--------- 2 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/FuncTorrent/Peer.hs b/src/FuncTorrent/Peer.hs index bf5c912..6c27019 100644 --- a/src/FuncTorrent/Peer.hs +++ b/src/FuncTorrent/Peer.hs @@ -1,5 +1,5 @@ module FuncTorrent.Peer - (Peer, + (Peer(..), PeerResp(..), getPeerResponse, handShakeMsg @@ -23,13 +23,13 @@ type Address = String type Port = Integer data Peer = Peer Address Port - deriving (Show) + deriving (Show, Eq) -data PeerResp = PeerResponse { interval :: Maybe Integer - , peers :: [Peer] - , complete :: Maybe Integer - , incomplete :: Maybe Integer - } deriving (Show) +data PeerResp = PeerResp { interval :: Maybe Integer + , peers :: [Peer] + , complete :: Maybe Integer + , incomplete :: Maybe Integer + } deriving (Show, Eq) toInt :: String -> Integer toInt = read @@ -42,21 +42,21 @@ getPeerResponse body = case decode body of pl = map (\peer -> let (ip', port') = splitAt 4 peer in Peer (toIPNum ip') (toPortNum port')) (splitN 6 peersBS) - in PeerResponse { interval = Just i - , peers = pl - , complete = Nothing - , incomplete = Nothing - } + in PeerResp { interval = Just i + , peers = pl + , complete = Nothing + , incomplete = Nothing + } where toPortNum = read . ("0x" ++) . unpack . B16.encode toIPNum = intercalate "." . map (show . toInt . ("0x" ++) . unpack) . splitN 2 . B16.encode - _ -> PeerResponse { interval = Nothing - , peers = [] - , complete = Nothing - , incomplete = Nothing - } + _ -> PeerResp { interval = Nothing + , peers = [] + , complete = Nothing + , incomplete = Nothing + } handShakeMsg :: InfoDict -> String -> ByteString diff --git a/test/Test.hs b/test/Test.hs index 4b67b86..4a293ff 100644 --- a/test/Test.hs +++ b/test/Test.hs @@ -9,14 +9,16 @@ import Test.Tasty import Test.Tasty.HUnit import FuncTorrent.Bencode (decode, BVal(..)) +import FuncTorrent.Peer (Peer(..), PeerResp(..), getPeerResponse) -- Initial response from tracker -response :: BVal -response = Bdict (fromList [ - (Bstr "interval", Bint 900), - (Bstr "peers", Bstr "U\EM\201e\200\213%;\FS\236V\206L\NAK\149+\202\154\US\183!\205\169\203\213\210xVkX\213\239\216\205\ESC\STX[\192\163\152.:>\210\240A\ESCWT\250g\161\ESC%X\195\241\192\200\213X\165=\223\SUB\225V\157\234\243\232\191\213)\137\242\200\213[\nT\195\183]@8\249\183\ESCo\202>\DLEG\234\EM\US+~z\225\216D\169\133H\196.\223\135a\177\229\189\ENQ\166]v\251\203\200\148m\141\200\213m\226\236\160\173\156N:\139\154Y\"\188\244/\186\154\219\203V\204o\204\187Pn(b\ESC\ACKD\187\142\217\227\240Gs\139\180\246YF\169#\173\200\213\185\ETX\135\186*\137X\198\224\202\200\213\183\157A\217#\219W\251\189\150\182XWr\202\174\&0i]:\ENQ\DLE\200\211Yf\tE'<^\159\DC3\222=\167_\FS1\176\229\170\217r:\135\SUB\225O\141\162&\139\222\136\169\&2H\214\143\187C\188\151\200\213Oo\218\&2\209\132>K\137\129\200\213\SO\204\DC4\156-PO\141\162\"_\211R\144\192\a\246\232\212\"\231\nP\204_\225\246\221\200\213|)\237fa*"), - (Bstr "peers6", Bstr "") - ]) +response :: PeerResp +response = PeerResp { + 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], + complete = Nothing, + incomplete = Nothing + } -- Parsed .torrent file file :: BVal @@ -44,9 +46,7 @@ testFile = testCase "Should parse regular torrent files" $ do testResponse :: TestTree testResponse = testCase "Should parse tracker response" $ do str <- readFile "./data/debian-7.8.0-amd64-CD-1.iso.cache" - case decode str of - Right expected -> expected @?= response - Left _ -> error "Failed parsing test file" + response @?= getPeerResponse str unitTests :: TestTree unitTests = testGroup "Unit tests" [testFile, testResponse] -- 2.45.2