-
Notifications
You must be signed in to change notification settings - Fork 38
/
BasicRejectSpec.hs
107 lines (78 loc) · 3.76 KB
/
BasicRejectSpec.hs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
{-# OPTIONS -XOverloadedStrings #-}
module BasicRejectSpec (main, spec) where
import Test.Hspec
import Network.AMQP
import Data.ByteString.Lazy.Char8 as L8
import Control.Concurrent (threadDelay)
import Control.Exception (bracket)
main :: IO ()
main = hspec spec
withTestConnection :: (Channel -> IO c) -> IO c
withTestConnection job = do
bracket (openConnection "127.0.0.1" "/" "guest" "guest") closeConnection $ \conn -> do
ch <- openChannel conn
job ch
spec :: Spec
spec = do
describe "rejectMsg" $ do
context "requeue = True" $ do
it "requeues a message" $ withTestConnection $ \ch -> do
let q = "haskell-amqp.basic.reject.with-requeue-true"
(_, n1, _) <- declareQueue ch $ newQueue {queueName = q, queueDurable = False}
n1 `shouldBe` 0
-- publishes using default exchange
publishMsg ch "" q $ newMsg {msgBody = (L8.pack "hello")}
threadDelay (1000 * 100)
(_, n2, _) <- declareQueue ch (newQueue {queueName = q, queueDurable = False})
n2 `shouldBe` 1
Just (_msg, env) <- getMsg ch Ack q
rejectMsg (envChannel env) (envDeliveryTag env) True
threadDelay (1000 * 100)
n3 <- deleteQueue ch q
n3 `shouldBe` 1
context "requeue = False" $ do
it "rejects a message" $ withTestConnection $ \ch -> do
let q = "haskell-amqp.basic.reject.with-requeue-false"
(_, n1, _) <- declareQueue ch $ newQueue {queueName = q, queueDurable = False}
n1 `shouldBe` 0
-- publishes using default exchange
publishMsg ch "" q $ newMsg {msgBody = (L8.pack "hello")}
threadDelay (1000 * 100)
(_, n2, _) <- declareQueue ch (newQueue {queueName = q, queueDurable = False})
n2 `shouldBe` 1
Just (_msg, env) <- getMsg ch Ack q
rejectMsg (envChannel env) (envDeliveryTag env) False
threadDelay (1000 * 100)
n3 <- deleteQueue ch q
n3 `shouldBe` 0
describe "rejectEnv" $ do
context "requeue = True" $ do
it "requeues a message" $ withTestConnection $ \ch -> do
let q = "haskell-amqp.basic.reject.with-requeue-true"
(_, n1, _) <- declareQueue ch $ newQueue {queueName = q, queueDurable = False}
n1 `shouldBe` 0
-- publishes using default exchange
publishMsg ch "" q $ newMsg {msgBody = (L8.pack "hello")}
threadDelay (1000 * 100)
(_, n2, _) <- declareQueue ch (newQueue {queueName = q, queueDurable = False})
n2 `shouldBe` 1
Just (_msg, env) <- getMsg ch Ack q
rejectEnv env True
threadDelay (1000 * 100)
n3 <- deleteQueue ch q
n3 `shouldBe` 1
context "requeue = False" $ do
it "rejects a message" $ withTestConnection $ \ch -> do
let q = "haskell-amqp.basic.reject.with-requeue-false"
(_, n1, _) <- declareQueue ch $ newQueue {queueName = q, queueDurable = False}
n1 `shouldBe` 0
-- publishes using default exchange
publishMsg ch "" q $ newMsg {msgBody = (L8.pack "hello")}
threadDelay (1000 * 100)
(_, n2, _) <- declareQueue ch (newQueue {queueName = q, queueDurable = False})
n2 `shouldBe` 1
Just (_msg, env) <- getMsg ch Ack q
rejectEnv env False
threadDelay (1000 * 100)
n3 <- deleteQueue ch q
n3 `shouldBe` 0