]> git.rkrishnan.org Git - functorrent.git/blob - test/MetainfoTests.hs
metainfotests: refactor
[functorrent.git] / test / MetainfoTests.hs
1 -- | Tests for Metainfo module
2
3 {-
4  - Copyright (C) 2015-2016 Ramakrishnan Muthukrishnan <ram@rkrishnan.org>
5  -
6  - This file is part of FuncTorrent.
7  -
8  - FuncTorrent is free software; you can redistribute it and/or modify
9  - it under the terms of the GNU General Public License as published by
10  - the Free Software Foundation; either version 3 of the License, or
11  - (at your option) any later version.
12  -
13  - FuncTorrent is distributed in the hope that it will be useful,
14  - but WITHOUT ANY WARRANTY; without even the implied warranty of
15  - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  - GNU General Public License for more details.
17  -
18  - You should have received a copy of the GNU General Public License
19  - along with FuncTorrent; if not,  see <http://www.gnu.org/licenses/>
20  -}
21
22 module MetainfoTests where
23
24 import Prelude hiding (readFile)
25
26 import FuncTorrent.Metainfo
27
28 import Control.Monad (liftM)
29 import Test.Hspec
30 import Data.ByteString (readFile)
31
32 tests :: IO ()
33 tests = do
34   fc <- readFile "data/debian-7.8.0-amd64-CD-1.iso.torrent"
35   let minfo = torrentToMetainfo fc
36   hspec $ do
37     describe "read and interpret a torrent file 1" $ do
38       it "valid torrent file" $ do
39         minfo `shouldNotBe` (Left "parse error")
40       it "valid announce list" $ do
41         case minfo of
42           Left _ -> pending
43           Right metainfo -> do
44             announceList metainfo `shouldSatisfy` (not . null)
45       it "valid piece length" $ do
46         case minfo of
47           Left _ -> pending
48           Right metainfo -> do
49             let (Just info') = info metainfo
50             pieceLength info' `shouldBe` (524288 :: Integer)
51       it "Not a multifile torrent" $ do
52         case minfo of
53           Left _ -> pending
54           Right metainfo -> do 
55             let (Just i) = info metainfo
56             (length (filemeta i)) `shouldSatisfy` (== 1)
57
58     describe "read and interpret a multifile torrent file" $ do
59       it "valid multifile torrent file" $ do
60         fc <- readFile "data/multifile.torrent"
61         (torrentToMetainfo fc) `shouldNotBe` (Left "parse error")
62       it "valid multifile torrent with multiple files" $ do
63         fc <- readFile "data/multifile.torrent"
64         case torrentToMetainfo fc of
65           Left _ -> pending
66           Right metainfo -> do 
67             let (Just i) = info metainfo
68             (length (filemeta i)) `shouldSatisfy` (> 1)