99
1010-include_lib (" common_test/include/ct.hrl" ).
1111-include_lib (" amqp_client/include/amqp_client.hrl" ).
12+ -include_lib (" eunit/include/eunit.hrl" ).
1213
1314-compile (export_all ).
1415
@@ -21,6 +22,7 @@ groups() ->
2122 [
2223 {non_parallel_tests , [], [
2324 register_interceptor ,
25+ register_interceptor_failing_with_amqp_error ,
2426 register_failing_interceptors
2527 ]}
2628 ].
@@ -94,6 +96,55 @@ register_interceptor1(Config, Interceptor) ->
9496 check_send_receive (Ch1 , QName , <<" bar" >>, <<" bar" >>),
9597 passed .
9698
99+ register_interceptor_failing_with_amqp_error (Config ) ->
100+ passed = rabbit_ct_broker_helpers :rpc (Config , 0 ,
101+ ? MODULE , register_interceptor_failing_with_amqp_error1 ,
102+ [Config , dummy_interceptor ]).
103+
104+ register_interceptor_failing_with_amqp_error1 (Config , Interceptor ) ->
105+ PredefinedChannels = rabbit_channel :list (),
106+
107+ Ch1 = rabbit_ct_client_helpers :open_channel (Config , 0 ),
108+
109+ [ChannelProc ] = rabbit_channel :list () -- PredefinedChannels ,
110+
111+ [{interceptors , []}] = rabbit_channel :info (ChannelProc , [interceptors ]),
112+
113+ ok = rabbit_registry :register (channel_interceptor ,
114+ <<" dummy interceptor" >>,
115+ Interceptor ),
116+ [{interceptors , [{Interceptor , undefined }]}] =
117+ rabbit_channel :info (ChannelProc , [interceptors ]),
118+
119+ Q1 = <<" succeeding-q" >>,
120+ # 'queue.declare_ok' {} =
121+ amqp_channel :call (Ch1 , # 'queue.declare' {queue = Q1 }),
122+
123+ Q2 = <<" failing-q" >>,
124+ try
125+ amqp_channel :call (Ch1 , # 'queue.declare' {queue = Q2 })
126+ catch
127+ _ :Reason ->
128+ ? assertMatch (
129+ {{shutdown , {_ , _ , <<" PRECONDITION_FAILED - operation not allowed" >>}}, _ },
130+ Reason )
131+ end ,
132+
133+ Ch2 = rabbit_ct_client_helpers :open_channel (Config , 0 ),
134+ [ChannelProc1 ] = rabbit_channel :list () -- PredefinedChannels ,
135+
136+ ok = rabbit_registry :unregister (channel_interceptor ,
137+ <<" dummy interceptor" >>),
138+ [{interceptors , []}] = rabbit_channel :info (ChannelProc1 , [interceptors ]),
139+
140+ # 'queue.declare_ok' {} =
141+ amqp_channel :call (Ch2 , # 'queue.declare' {queue = Q2 }),
142+
143+ # 'queue.delete_ok' {} = amqp_channel :call (Ch2 , # 'queue.delete' {queue = Q1 }),
144+ # 'queue.delete_ok' {} = amqp_channel :call (Ch2 , # 'queue.delete' {queue = Q2 }),
145+
146+ passed .
147+
97148register_failing_interceptors (Config ) ->
98149 passed = rabbit_ct_broker_helpers :rpc (Config , 0 ,
99150 ? MODULE , register_interceptor1 , [Config , failing_dummy_interceptor ]).
0 commit comments