haxl-0.5.1.0: tests/TestBadDataSource.hs
{-# LANGUAGE OverloadedStrings #-}
module TestBadDataSource (tests) where
import Haxl.Prelude as Haxl
import Prelude()
import Haxl.Core
import Data.IORef
import Test.HUnit
import Control.Exception
import ExampleDataSource
import BadDataSource
testEnv fn = do
exstate <- ExampleDataSource.initGlobalState
badstate <- BadDataSource.initGlobalState
let st = stateSet exstate $ stateSet (fn badstate) stateEmpty
initEnv st ()
wombats :: GenHaxl () Int
wombats = length <$> listWombats 3
badDataSourceTest :: Test
badDataSourceTest = TestCase $ do
-- test that a failed acquire doesn't fail the other requests
ref <- newIORef False
env <- testEnv $ \st ->
st { failAcquire = throwIO (DataSourceError "acquire")
, failRelease = writeIORef ref True }
x <- runHaxl env $
(dataFetch (FailAfter 0) + wombats)
`Haxl.catch` \DataSourceError{} -> wombats
assertEqual "badDataSourceTest1" 3 x
-- We should *not* have called release
assertEqual "badDataSourceTest2" False =<< readIORef ref
-- test that a failed dispatch doesn't fail the other requests
ref <- newIORef False
env <- testEnv $ \st ->
st { failDispatch = throwIO (DataSourceError "dispatch")
, failRelease = writeIORef ref True }
x <- runHaxl env $
(dataFetch (FailAfter 0) + wombats)
`Haxl.catch` \DataSourceError{} -> wombats
assertEqual "badDataSourceTest3" x 3
-- We *should* have called release
assertEqual "badDataSourceTest4" True =<< readIORef ref
-- test that a failed wait is a DataSourceError
env <- testEnv $ \st ->
st { failWait = throwIO (DataSourceError "wait") }
x <- runHaxl env $
(dataFetch (FailAfter 0) + wombats)
`Haxl.catch` \DataSourceError{} -> wombats
assertEqual "badDataSourceTest5" x 3
-- We *should* have called release
assertEqual "badDataSourceTest6" True =<< readIORef ref
-- test that a failed release is still a DataSourceError, even
-- though the request will have completed successfully
env <- testEnv $ \st ->
st { failRelease = throwIO (DataSourceError "release") }
x <- runHaxl env $
(dataFetch (FailAfter 0) + wombats)
`Haxl.catch` \DataSourceError{} -> wombats
assertEqual "badDataSourceTest7" x 3
tests = TestList
[ TestLabel "badDataSourceTest" badDataSourceTest
]