From 12cbb3af2413dc28838ed271351dda16df8f7bdb Mon Sep 17 00:00:00 2001 From: joe Date: Fri, 15 Sep 2017 06:22:10 -0400 Subject: Separating dht-client library from bittorrent package. --- .../Network/BitTorrent/Tracker/SessionSpec.hs | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 bittorrent/tests/Network/BitTorrent/Tracker/SessionSpec.hs (limited to 'bittorrent/tests/Network/BitTorrent/Tracker/SessionSpec.hs') diff --git a/bittorrent/tests/Network/BitTorrent/Tracker/SessionSpec.hs b/bittorrent/tests/Network/BitTorrent/Tracker/SessionSpec.hs new file mode 100644 index 00000000..72936ee7 --- /dev/null +++ b/bittorrent/tests/Network/BitTorrent/Tracker/SessionSpec.hs @@ -0,0 +1,61 @@ +module Network.BitTorrent.Tracker.SessionSpec (spec) where +import Control.Monad +import Data.Default +import Data.List as L +import Test.Hspec + +import Data.Torrent +import Network.BitTorrent.Tracker.Message +import Network.BitTorrent.Tracker.List +import Network.BitTorrent.Tracker.RPC +import Network.BitTorrent.Tracker.Session + +import Config + +testSession :: Bool -> (Manager -> Session -> IO ()) -> IO () +testSession runEmpty action = do + t <- getTestTorrent + withManager def def $ \ m -> do + withSession m (idInfoHash (tInfoDict t)) (trackerList t) $ \ s -> + action m s + + when runEmpty $ do + withSession m (idInfoHash (tInfoDict t)) def $ \ s -> + action m s + +spec :: Spec +spec = do + describe "Session" $ do + it "start new session in paused state" $ do + testSession True $ \ _ s -> do + status <- getStatus s + status `shouldBe` Paused + + describe "Query" $ do + it "change status after notify" $ do + testSession True $ \ m s -> do + notify m s Started + status <- getStatus s + status `shouldBe` Running + + notify m s Stopped + stopped <- getStatus s + stopped `shouldBe` Paused + + it "completed event do not change status" $ do + testSession True $ \ m s -> do + notify m s Completed + status <- getStatus s + status `shouldBe` Paused + + testSession True $ \ m s -> do + notify m s Started + notify m s Completed + status <- getStatus s + status `shouldBe` Running + + it "return non-empty list of peers" $ do + testSession False $ \ m s -> do + notify m s Started + peers <- askPeers m s + peers `shouldSatisfy` (not . L.null) -- cgit v1.2.3