From 0ccce42b773783341765ef751ea6d962f70d593c Mon Sep 17 00:00:00 2001 From: Sam T Date: Wed, 3 Apr 2013 01:13:59 +0400 Subject: + tests --- tests/info-hash.hs | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 tests/info-hash.hs (limited to 'tests/info-hash.hs') 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 @@ +{-# LANGUAGE OverloadedStrings #-} +module Main (main) where + +import Control.Applicative +import Data.Foldable +import Data.Maybe +import qualified Data.Map as M +import Data.ByteString (ByteString) +import qualified Data.ByteString as B +import qualified Data.ByteString.Lazy as L +import qualified Data.ByteString.Builder as B +import qualified Data.ByteString.Builder.Prim as B + +import System.Environment + +import Data.Torrent +import Data.BEncode + + +checkInfo :: B.ByteString +checkInfo = "0221caf96aa3cb94f0f58d458e78b0fc344ad8bf" + +-- | _should_ be 'id' if content is correct +reencode :: B.ByteString -> Result L.ByteString +reencode content = (encode . toBEncode . (`asTypeOf` (undefined :: Torrent))) + `fmap` (fromBEncode =<< decode content) + +ppHex :: B.ByteString -> B.ByteString +ppHex = L.toStrict . B.toLazyByteString . foldMap (B.primFixed B.word8HexFixed) . B.unpack + +chunk :: Int -> B.ByteString -> [B.ByteString] +chunk size b | B.length b == 0 = [b] + | otherwise = + let (x, xs) = B.splitAt size b + in x : chunk size xs + +showInfos :: ByteString -> (TorrentInfo, BEncode) +showInfos bs = + let Right (be@(BDict dict)) = decode bs + Right t = tInfo <$> (fromBEncode be) + orig = BDict $ let BDict info = fromJust (M.lookup "info" dict) + in M.insert "pieces" (BString "") info + in (t { tPieces = "" }, orig) + +main :: IO () +main = do + [path] <- getArgs + Right t <- fromFile path + B.putStrLn (ppHex (tInfoHash t)) -- cgit v1.2.3