packages feed

immortal-queue-0.2.0.0: tests/Spec.hs

import           Test.Tasty
import           Test.Tasty.HUnit

import           MockQueue


main :: IO ()
main = defaultMain tests


tests :: TestTree
tests = testGroup
    "Immortal Queue Tests"
    [ testCase "All Succeed"                      allSuccess
    , testCase "Error Handling"                   errorHandling
    , testCase "Close Waits For Workers"          closeWaits
    , testCase "Kill Stops Workers Immediately"   killExitsEarly
    , testCase "Pop Failure Continues Processing" popFailureContinues
    ]
  where
    allSuccess :: Assertion
    allSuccess = do
        (successes, failures, popFailures) <- runPool
            [Log 1 100, Log 2 200, Log 3 300, Log 4 400, Log 5 500]
        successes @?= [1, 2, 3, 4, 5]
        failures @?= []
        popFailures @?= []

    errorHandling :: Assertion
    errorHandling = do
        (successes, failures, popFailures) <- runPool
            [Log 1 0, Fail "hello", Log 2 0, Fail "world", Fail "9001"]
        successes @?= [1, 2]
        failures @?= ["hello", "world", "9001"]
        popFailures @?= []

    closeWaits :: Assertion
    closeWaits = do
        (successes, failures, popFailures) <- runPool_ True
                                                       (Just 500)
                                                       [Log 1 0, Log 2 200, Log 3 2000]
        successes @?= [1, 2, 3]
        failures @?= []
        popFailures @?= []

    killExitsEarly :: Assertion
    killExitsEarly = do
        (successes, failures, popFailures) <- runPool_ False
                                                       (Just 500)
                                                       [Log 1 0, Log 2 200, Log 3 3000]
        successes @?= [1, 2]
        failures @?= []
        popFailures @?= []

    popFailureContinues :: Assertion
    popFailureContinues = do
        (successes, failures, popFailures) <- runPool_
            True
            (Just 800)
            [Log 1 10, PopFail "died", Log 2 70, Log 3 100, PopFail "again", Log 4 200, Log 5 300, Log 6 400]
        successes @?= [1, 2, 3, 4, 5, 6]
        failures @?= []
        popFailures @?= [PopE "died", PopE "again"]