summaryrefslogtreecommitdiff
path: root/tests/info-hash.hs
diff options
context:
space:
mode:
authorSam T <sta.cs.vsu@gmail.com>2013-04-03 01:13:59 +0400
committerSam T <sta.cs.vsu@gmail.com>2013-04-03 01:13:59 +0400
commit0ccce42b773783341765ef751ea6d962f70d593c (patch)
tree6a1e6418edf964c123372e52f03896dda471e26f /tests/info-hash.hs
parent8f5985915ece236a29fcb340e1e0ef731e3214e9 (diff)
+ tests
Diffstat (limited to 'tests/info-hash.hs')
-rw-r--r--tests/info-hash.hs49
1 files changed, 49 insertions, 0 deletions
diff --git a/tests/info-hash.hs b/tests/info-hash.hs
new file mode 100644
index 00000000..1e511e43
--- /dev/null
+++ b/tests/info-hash.hs
@@ -0,0 +1,49 @@
1{-# LANGUAGE OverloadedStrings #-}
2module Main (main) where
3
4import Control.Applicative
5import Data.Foldable
6import Data.Maybe
7import qualified Data.Map as M
8import Data.ByteString (ByteString)
9import qualified Data.ByteString as B
10import qualified Data.ByteString.Lazy as L
11import qualified Data.ByteString.Builder as B
12import qualified Data.ByteString.Builder.Prim as B
13
14import System.Environment
15
16import Data.Torrent
17import Data.BEncode
18
19
20checkInfo :: B.ByteString
21checkInfo = "0221caf96aa3cb94f0f58d458e78b0fc344ad8bf"
22
23-- | _should_ be 'id' if content is correct
24reencode :: B.ByteString -> Result L.ByteString
25reencode content = (encode . toBEncode . (`asTypeOf` (undefined :: Torrent)))
26 `fmap` (fromBEncode =<< decode content)
27
28ppHex :: B.ByteString -> B.ByteString
29ppHex = L.toStrict . B.toLazyByteString . foldMap (B.primFixed B.word8HexFixed) . B.unpack
30
31chunk :: Int -> B.ByteString -> [B.ByteString]
32chunk size b | B.length b == 0 = [b]
33 | otherwise =
34 let (x, xs) = B.splitAt size b
35 in x : chunk size xs
36
37showInfos :: ByteString -> (TorrentInfo, BEncode)
38showInfos bs =
39 let Right (be@(BDict dict)) = decode bs
40 Right t = tInfo <$> (fromBEncode be)
41 orig = BDict $ let BDict info = fromJust (M.lookup "info" dict)
42 in M.insert "pieces" (BString "") info
43 in (t { tPieces = "" }, orig)
44
45main :: IO ()
46main = do
47 [path] <- getArgs
48 Right t <- fromFile path
49 B.putStrLn (ppHex (tInfoHash t))