packages feed

pocket-dns-0.1.0: tests/test.hs

{-#LANGUAGE OverloadedStrings#-}
{-#LANGUAGE TemplateHaskell#-}
{-#LANGUAGE QuasiQuotes#-}

import Data.Monoid
import Test.Sandbox
import Test.Hspec
import qualified Test.Hspec.Sandbox as S
--import Test.Hspec.Contrib.Retry
import Test.Hspec.Server
import Test.Cabal.Path
import qualified Data.Text as T
--import Control.Monad.IO.Class
--import Control.Monad.Trans.Reader
import Text.Shakespeare.Text
import Data.IORef

main :: IO ()
main = withSandbox $ \ref -> do
  bin <- getExePath "." "pocket-dns"
  conf <- newIORef $ error "do not eval this"
  p <- newIORef $ error "do not eval this"
  hspec $ do
    describe "setup(zookeeper)" $ S.with ref $ do
      it "start daemon" $ do
        port' <- getPort "dns"
        liftIO $ writeIORef p port'
        dat <- setFile "conf" $ T.unpack[sbt|backend: zookeeper
                                            |coord: localhost:2181/
                                            |timeout: 300000
                                            |num-stripes: 1
                                            |idletime: 300000
                                            |max-resource: 30
                                            |]
        liftIO $ writeIORef conf dat 
        register "daemon" bin ["daemon","--conf",dat,"--port",show port'] def >>= start
    describe "command-test(zookeeper)" $ with localhost $ do
      it "set" $ do
        dat <- liftIO $ readIORef conf
        command bin ["set","--conf",dat,"hogehoge.","192.168.10.10"] [] @>= exit 0
      it "get" $ do
        dat <- liftIO $ readIORef conf
        command bin ["get","--conf",dat,"hogehoge."] [] @>= exit 0 <> (stdout $ T.unpack [sbt|[192.168.10.10]
                                                                                             |])
      it "dig" $ do
        port' <- liftIO $ readIORef p
        command "dig" ["@localhost","-p",show port',"hogehoge"] [] @>= exit 0
      it "list" $ do
        dat <- liftIO $ readIORef conf
        command bin ["list","--conf",dat] [] @>= exit 0 <> (stdout $ T.unpack [sbt|hogehoge.
                                                                                  |  192.168.10.10
                                                                                  |])
      it "delete" $ do
        dat <- liftIO $ readIORef conf
        command bin ["delete","--conf",dat,"hogehoge."] [] @>= exit 0 <> stdout ""
    describe "setup(sqlite)" $ S.with ref $ do
      it "start daemon(sqlite)" $ do
        port' <- getPort "sdns"
        liftIO $ writeIORef p port'
        dat <- setFile "sconf" $ T.unpack[sbt|backend: sqlite
                                             |database: pocket-dns.sqlite3
                                             |poolsize: 10
                                             |]
        liftIO $ writeIORef conf dat 
        register "sdaemon" bin ["daemon","--conf",dat,"--port",show port'] def >>= start
    describe "command-test(sqlite)" $ with localhost $ do
      it "set" $ do
        dat <- liftIO $ readIORef conf
        command bin ["set","--conf",dat,"hogehoge.","192.168.10.10"] [] @>= exit 0
      it "get" $ do
        dat <- liftIO $ readIORef conf
        command bin ["get","--conf",dat,"hogehoge."] [] @>= exit 0 <> (stdout $ T.unpack [sbt|[192.168.10.10]
                                                                                             |])
      it "dig" $ do
        port' <- liftIO $ readIORef p
        command "dig" ["@localhost","-p",show port',"hogehoge"] [] @>= exit 0
      it "list" $ do
        dat <- liftIO $ readIORef conf
        command bin ["list","--conf",dat] [] @>= exit 0 <> (stdout $ T.unpack [sbt|hogehoge.
                                                                                  |  192.168.10.10
                                                                                  |])
      it "delete" $ do
        dat <- liftIO $ readIORef conf
        command bin ["delete","--conf",dat,"hogehoge."] [] @>= exit 0 <> stdout ""