amqp-0.24.0: test/QueuePurgeSpec.hs
{-# OPTIONS -XOverloadedStrings #-}
module QueuePurgeSpec (main, spec) where
import Test.Hspec
import Network.AMQP
import Data.ByteString.Lazy.Char8 as BL hiding (putStrLn)
import Control.Concurrent (threadDelay)
main :: IO ()
main = hspec spec
spec :: Spec
spec = do
describe "purgeQueue" $ do
context "when queue exists" $ do
it "empties the queue" $ do
conn <- openConnection "127.0.0.1" "/" "guest" "guest"
ch <- openChannel conn
(q, _, _) <- declareQueue ch (newQueue {queueName = "",
queueDurable = True,
queueExclusive = False,
queueAutoDelete = False})
publishMsg ch "" q
newMsg {msgBody = (BL.pack "payload")}
threadDelay (1000 * 100)
(_, n, _) <- declareQueue ch (newQueue {queueName = q,
queuePassive = True})
n `shouldBe` 1
_ <- purgeQueue ch q
threadDelay (1000 * 100)
(_, n2, _) <- declareQueue ch (newQueue {queueName = q,
queuePassive = True})
n2 `shouldBe` 0
closeConnection conn
context "when queue DOES NOT exist" $ do
it "empties the queue" $ do
conn <- openConnection "127.0.0.1" "/" "guest" "guest"
ch <- openChannel conn
-- silence error messages
addChannelExceptionHandler ch $ return . const ()
let ex = ChannelClosedException Abnormal "NOT_FOUND - no queue 'haskell-amqp.queues.avjqmyG{CHrc66MRyzYVA+PwrMVARJ' in vhost '/'"
(purgeQueue ch "haskell-amqp.queues.avjqmyG{CHrc66MRyzYVA+PwrMVARJ") `shouldThrow` (== ex)
closeConnection conn