Fix tracker response test
authorJaseem Abid <jaseemabid@gmail.com>
Sun, 22 Mar 2015 18:00:46 +0000 (23:30 +0530)
committerJaseem Abid <jaseemabid@gmail.com>
Sun, 22 Mar 2015 18:59:08 +0000 (00:29 +0530)
src/FuncTorrent/Peer.hs
test/Test.hs

index bf5c91201e76983e74821d639562cd3e5f6c7e5d..6c27019634861ac2676a94d970849015ec4258e3 100644 (file)
@@ -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
index 4b67b86d85884f1f81c205515a1e53fcd6e995ac..4a293fffa2667cdd4cf0c70cacd217c1919e052d 100644 (file)
@@ -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]