13
13
14
14
-compile (export_all ).
15
15
16
- -define (TIMEOUT , 30000 ).
16
+ -define (CONSUMER_TIMEOUT , 3000 ).
17
+ -define (RECEIVE_TIMEOUT , 5000 ).
18
+
19
+ -define (GROUP_CONFIG ,
20
+ #{global_consumer_timeout => [{rabbit , [{consumer_timeout , ? CONSUMER_TIMEOUT }]},
21
+ {queue_policy , []},
22
+ {queue_arguments , []},
23
+ {consumer_arguments , []}],
24
+ queue_policy_consumer_timeout => [{rabbit , []},
25
+ {queue_policy , [{<<" consumer-timeout" >>, ? CONSUMER_TIMEOUT }]},
26
+ {queue_arguments , []},
27
+ {consumer_arguments , []}],
28
+ queue_argument_consumer_timeout => [{rabbit , []},
29
+ {queue_policy , []},
30
+ {queue_arguments , [{<<" x-consumer-timeout" >>, long , ? CONSUMER_TIMEOUT }]},
31
+ {consumer_arguments , []}],
32
+ consumer_argument_consumer_timeout => [{rabbit , []},
33
+ {queue_policy , []},
34
+ {queue_arguments , []},
35
+ {consumer_arguments , [{<<" x-consumer-timeout" >>, long , ? CONSUMER_TIMEOUT }]}]}).
17
36
18
37
-import (quorum_queue_utils , [wait_for_messages /2 ]).
19
38
20
39
all () ->
21
40
[
22
- {group , parallel_tests }
41
+ {group , global_consumer_timeout },
42
+ {group , queue_policy_consumer_timeout },
43
+ {group , queue_argument_consumer_timeout },
44
+ {group , consumer_argument_consumer_timeout }
23
45
].
24
46
25
47
groups () ->
26
- AllTests = [consumer_timeout ,
27
- consumer_timeout_basic_get ,
28
- consumer_timeout_no_basic_cancel_capability
29
- ],
30
- [
31
- {parallel_tests , [],
32
- [
48
+ ConsumerTests = [consumer_timeout ,
49
+ consumer_timeout_no_basic_cancel_capability ],
50
+ AllTests = ConsumerTests ++ [consumer_timeout_basic_get ],
51
+
52
+ ConsumerTestsParallel = [
53
+ {classic_queue , [parallel ], ConsumerTests },
54
+ {mirrored_queue , [parallel ], ConsumerTests },
55
+ {quorum_queue , [parallel ], ConsumerTests }
56
+ ],
57
+
58
+ AllTestsParallel = [
33
59
{classic_queue , [parallel ], AllTests },
34
60
{mirrored_queue , [parallel ], AllTests },
35
61
{quorum_queue , [parallel ], AllTests }
36
- ]}
62
+ ],
63
+ [
64
+ {global_consumer_timeout , [], AllTestsParallel },
65
+ {queue_policy_consumer_timeout , [], AllTestsParallel },
66
+ {queue_argument_consumer_timeout , [], AllTestsParallel },
67
+ {consumer_argument_consumer_timeout , [], ConsumerTestsParallel }
37
68
].
38
69
39
70
suite () ->
@@ -55,33 +86,36 @@ end_per_suite(Config) ->
55
86
init_per_group (classic_queue , Config ) ->
56
87
rabbit_ct_helpers :set_config (
57
88
Config ,
58
- [{queue_args , [{<<" x-queue-type" >>, longstr , <<" classic" >>}]},
89
+ [{policy_type , <<" classic_queues" >>},
90
+ {queue_args , [{<<" x-queue-type" >>, longstr , <<" classic" >>}]},
59
91
{queue_durable , true }]);
60
92
init_per_group (quorum_queue , Config ) ->
61
93
rabbit_ct_helpers :set_config (
62
94
Config ,
63
- [{queue_args , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}]},
95
+ [{policy_type , <<" quorum_queues" >>},
96
+ {queue_args , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}]},
64
97
{queue_durable , true }]);
65
98
init_per_group (mirrored_queue , Config ) ->
66
99
rabbit_ct_broker_helpers :set_ha_policy (Config , 0 , <<" ^max_length.*queue" >>,
67
100
<<" all" >>, [{<<" ha-sync-mode" >>, <<" automatic" >>}]),
68
101
Config1 = rabbit_ct_helpers :set_config (
69
- Config , [{is_mirrored , true },
102
+ Config , [{policy_type , <<" classic_queues" >>},
103
+ {is_mirrored , true },
70
104
{queue_args , [{<<" x-queue-type" >>, longstr , <<" classic" >>}]},
71
105
{queue_durable , true }]),
72
106
rabbit_ct_helpers :run_steps (Config1 , []);
73
107
init_per_group (Group , Config0 ) ->
74
108
case lists :member ({group , Group }, all ()) of
75
109
true ->
110
+ GroupConfig = maps :get (Group , ? GROUP_CONFIG ),
76
111
ClusterSize = 3 ,
77
112
Config = rabbit_ct_helpers :merge_app_env (
78
113
Config0 , {rabbit , [{channel_tick_interval , 1000 },
79
- {quorum_tick_interval , 1000 },
80
- {consumer_timeout , 5000 }]}),
114
+ {quorum_tick_interval , 1000 }] ++ ? config (rabbit , GroupConfig )}),
81
115
Config1 = rabbit_ct_helpers :set_config (
82
116
Config , [ {rmq_nodename_suffix , Group },
83
117
{rmq_nodes_count , ClusterSize }
84
- ]),
118
+ ] ++ GroupConfig ),
85
119
rabbit_ct_helpers :run_steps (Config1 ,
86
120
rabbit_ct_broker_helpers :setup_steps () ++
87
121
rabbit_ct_client_helpers :setup_steps ());
@@ -92,6 +126,11 @@ init_per_group(Group, Config0) ->
92
126
end_per_group (Group , Config ) ->
93
127
case lists :member ({group , Group }, all ()) of
94
128
true ->
129
+ case ? config (queue_policy , Config ) of
130
+ [] -> ok ;
131
+ _Policy ->
132
+ rabbit_ct_broker_helpers :clear_policy (Config , 0 , <<" consumer_timeout_queue_test_policy" >>)
133
+ end ,
95
134
rabbit_ct_helpers :run_steps (Config ,
96
135
rabbit_ct_client_helpers :teardown_steps () ++
97
136
rabbit_ct_broker_helpers :teardown_steps ());
@@ -119,12 +158,12 @@ consumer_timeout(Config) ->
119
158
declare_queue (Ch , Config , QName ),
120
159
publish (Ch , QName , [<<" msg1" >>]),
121
160
wait_for_messages (Config , [[QName , <<" 1" >>, <<" 1" >>, <<" 0" >>]]),
122
- subscribe (Ch , QName , false ),
161
+ subscribe (Ch , QName , false , ? config ( consumer_arguments , Config ) ),
123
162
erlang :monitor (process , Conn ),
124
163
erlang :monitor (process , Ch ),
125
164
receive
126
165
{'DOWN' , _ , process , Ch , _ } -> ok
127
- after 30000 ->
166
+ after ? RECEIVE_TIMEOUT ->
128
167
flush (1 ),
129
168
exit (channel_exit_expected )
130
169
end ,
@@ -149,7 +188,7 @@ consumer_timeout_basic_get(Config) ->
149
188
erlang :monitor (process , Ch ),
150
189
receive
151
190
{'DOWN' , _ , process , Ch , _ } -> ok
152
- after 30000 ->
191
+ after ? RECEIVE_TIMEOUT ->
153
192
flush (1 ),
154
193
exit (channel_exit_expected )
155
194
end ,
@@ -187,18 +226,18 @@ consumer_timeout_no_basic_cancel_capability(Config) ->
187
226
wait_for_messages (Config , [[QName , <<" 1" >>, <<" 1" >>, <<" 0" >>]]),
188
227
erlang :monitor (process , Conn ),
189
228
erlang :monitor (process , Ch ),
190
- subscribe (Ch , QName , false ),
229
+ subscribe (Ch , QName , false , ? config ( consumer_arguments , Config ) ),
191
230
receive
192
231
{# 'basic.deliver' {delivery_tag = _ ,
193
232
redelivered = false }, _ } ->
194
233
% % do nothing with the delivery should trigger timeout
195
234
ok
196
- after 5000 ->
235
+ after ? RECEIVE_TIMEOUT ->
197
236
exit (deliver_timeout )
198
237
end ,
199
238
receive
200
239
{'DOWN' , _ , process , Ch , _ } -> ok
201
- after 30000 ->
240
+ after ? RECEIVE_TIMEOUT ->
202
241
flush (1 ),
203
242
exit (channel_exit_expected )
204
243
end ,
@@ -217,8 +256,14 @@ consumer_timeout_no_basic_cancel_capability(Config) ->
217
256
declare_queue (Ch , Config , QName ) ->
218
257
Args = ? config (queue_args , Config ),
219
258
Durable = ? config (queue_durable , Config ),
259
+ case ? config (queue_policy , Config ) of
260
+ [] -> ok ;
261
+ Policy ->
262
+ rabbit_ct_broker_helpers :set_policy (Config , 0 , <<" consumer_timeout_queue_test_policy" >>,
263
+ <<" .*" >>, ? config (policy_type , Config ), Policy )
264
+ end ,
220
265
# 'queue.declare_ok' {} = amqp_channel :call (Ch , # 'queue.declare' {queue = QName ,
221
- arguments = Args ,
266
+ arguments = Args ++ ? config ( queue_arguments , Config ) ,
222
267
durable = Durable }).
223
268
publish (Ch , QName , Payloads ) ->
224
269
[amqp_channel :call (Ch , # 'basic.publish' {routing_key = QName }, # amqp_msg {payload = Payload })
@@ -235,13 +280,15 @@ consume(Ch, QName, NoAck, Payloads) ->
235
280
DTag
236
281
end || Payload <- Payloads ].
237
282
238
- subscribe (Ch , Queue , NoAck ) ->
239
- subscribe (Ch , Queue , NoAck , <<" ctag" >>).
283
+ subscribe (Ch , Queue , NoAck , Args ) ->
284
+ subscribe (Ch , Queue , NoAck , <<" ctag" >>, Args ).
240
285
241
- subscribe (Ch , Queue , NoAck , Ctag ) ->
286
+ subscribe (Ch , Queue , NoAck , Ctag , Args ) ->
242
287
amqp_channel :subscribe (Ch , # 'basic.consume' {queue = Queue ,
243
288
no_ack = NoAck ,
244
- consumer_tag = Ctag },
289
+ consumer_tag = Ctag ,
290
+ arguments = Args
291
+ },
245
292
self ()),
246
293
receive
247
294
# 'basic.consume_ok' {consumer_tag = Ctag } ->
0 commit comments