@@ -192,7 +192,8 @@ all_tests() ->
192192     priority_queue_2_1_ratio ,
193193     requeue_multiple_true ,
194194     requeue_multiple_false ,
195-      subscribe_from_each 
195+      subscribe_from_each ,
196+      leader_health_check 
196197    ].
197198
198199memory_tests () -> 
@@ -4145,6 +4146,129 @@ amqpl_headers(Config) ->
41454146    ok  =  amqp_channel :cast (Ch , # 'basic.ack' {delivery_tag  =  DeliveryTag ,
41464147                                            multiple  =  true }).
41474148
4149+ leader_health_check (Config ) -> 
4150+     VHost1  =  <<" vhost1"  >>,
4151+     VHost2  =  <<" vhost2"  >>,
4152+ 
4153+     set_up_vhost (Config , VHost1 ),
4154+     set_up_vhost (Config , VHost2 ),
4155+ 
4156+     % % check empty vhost
4157+     ? assertEqual ([],
4158+         rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4159+             [<<" .*"  >>, VHost1 ])),
4160+     ? assertEqual ([],
4161+         rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4162+             [<<" .*"  >>, across_all_vhosts ])),
4163+ 
4164+     Conn1  =  rabbit_ct_client_helpers :open_unmanaged_connection (Config , 0 , VHost1 ),
4165+     {ok , Ch1 } =  amqp_connection :open_channel (Conn1 ),
4166+ 
4167+     Conn2  =  rabbit_ct_client_helpers :open_unmanaged_connection (Config , 0 , VHost2 ),
4168+     {ok , Ch2 } =  amqp_connection :open_channel (Conn2 ),
4169+ 
4170+     Qs1  =  [<<" Q.1"  >>, <<" Q.2"  >>, <<" Q.3"  >>],
4171+     Qs2  =  [<<" Q.4"  >>, <<" Q.5"  >>, <<" Q.6"  >>],
4172+ 
4173+     % % in vhost1
4174+     [? assertEqual ({'queue.declare_ok' , Q , 0 , 0 },
4175+                  declare (Ch1 , Q , [{<<" x-queue-type"  >>, longstr , <<" quorum"  >>}]))
4176+         || Q  <-  Qs1 ],
4177+ 
4178+     % % in vhost2
4179+     [? assertEqual ({'queue.declare_ok' , Q , 0 , 0 },
4180+                  declare (Ch2 , Q , [{<<" x-queue-type"  >>, longstr , <<" quorum"  >>}]))
4181+         || Q  <-  Qs2 ],
4182+ 
4183+     % % test sucessful health checks in vhost1, vhost2, across_all_vhosts
4184+     ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4185+                                       [<<" .*"  >>, VHost1 ])),
4186+     ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4187+                                       [<<" Q.*"  >>, VHost1 ])),
4188+     [? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4189+                                       [Q , VHost1 ])) || Q  <-  Qs1 ],
4190+ 
4191+     ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4192+                                       [<<" .*"  >>, VHost2 ])),
4193+     ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4194+                                       [<<" Q.*"  >>, VHost2 ])),
4195+     [? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4196+                                       [Q , VHost2 ])) || Q  <-  Qs2 ],
4197+ 
4198+     ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4199+                                       [<<" .*"  >>, across_all_vhosts ])),
4200+     ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4201+                                       [<<" Q.*"  >>, across_all_vhosts ])),
4202+ 
4203+     % % clear leaderboard
4204+     Qs  =  rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_amqqueue , list , []),
4205+ 
4206+     [{_Q1_ClusterName , _Q1Res },
4207+      {_Q2_ClusterName , _Q2Res },
4208+      {_Q3_ClusterName , _Q3Res },
4209+      {_Q4_ClusterName , _Q4Res },
4210+      {_Q5_ClusterName , _Q5Res },
4211+      {_Q6_ClusterName , _Q6Res }] =  QQ_Clusters  = 
4212+         lists :usort (
4213+             [begin 
4214+                 {ClusterName , _ } =  amqqueue :get_pid (Q ),
4215+                 {ClusterName , amqqueue :get_name (Q )}
4216+             end 
4217+                 || Q  <-  Qs , amqqueue :get_type (Q ) ==  rabbit_quorum_queue ]),
4218+ 
4219+     [Q1Data , Q2Data , Q3Data , Q4Data , Q5Data , Q6Data ] =  QQ_Data  = 
4220+         [begin 
4221+             rabbit_ct_broker_helpers :rpc (Config , 0 , ra_leaderboard , clear , [Q_ClusterName ]),
4222+             _QData  =  amqqueue :to_printable (Q_Res , rabbit_quorum_queue )
4223+          end 
4224+             || {Q_ClusterName , Q_Res } <-  QQ_Clusters ],
4225+ 
4226+     % % test failed health checks in vhost1, vhost2, across_all_vhosts
4227+     ? assertEqual ([Q1Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4228+                                       [<<" Q.1"  >>, VHost1 ])),
4229+     ? assertEqual ([Q2Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4230+                                       [<<" Q.2"  >>, VHost1 ])),
4231+     ? assertEqual ([Q3Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4232+                                       [<<" Q.3"  >>, VHost1 ])),
4233+     ? assertEqual ([Q1Data , Q2Data , Q3Data ],
4234+         lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4235+                         [<<" .*"  >>, VHost1 ]))),
4236+     ? assertEqual ([Q1Data , Q2Data , Q3Data ],
4237+         lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4238+                         [<<" Q.*"  >>, VHost1 ]))),
4239+ 
4240+     ? assertEqual ([Q4Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4241+                                       [<<" Q.4"  >>, VHost2 ])),
4242+     ? assertEqual ([Q5Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4243+                                       [<<" Q.5"  >>, VHost2 ])),
4244+     ? assertEqual ([Q6Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4245+                                       [<<" Q.6"  >>, VHost2 ])),
4246+     ? assertEqual ([Q4Data , Q5Data , Q6Data ],
4247+         lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4248+                         [<<" .*"  >>, VHost2 ]))),
4249+     ? assertEqual ([Q4Data , Q5Data , Q6Data ],
4250+         lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4251+                         [<<" Q.*"  >>, VHost2 ]))),
4252+ 
4253+     ? assertEqual (QQ_Data ,
4254+         lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4255+                         [<<" Q.*"  >>, across_all_vhosts ]))),
4256+     ? assertEqual (QQ_Data ,
4257+         lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4258+                         [<<" Q.*"  >>, across_all_vhosts ]))),
4259+ 
4260+     % % cleanup
4261+     [? assertMatch (# 'queue.delete_ok' {},
4262+                  amqp_channel :call (Ch1 , # 'queue.delete' {queue  =  Q }))
4263+         || Q  <-  Qs1 ],
4264+     [? assertMatch (# 'queue.delete_ok' {},
4265+                  amqp_channel :call (Ch1 , # 'queue.delete' {queue  =  Q }))
4266+         || Q  <-  Qs2 ],
4267+ 
4268+     amqp_connection :close (Conn1 ),
4269+     amqp_connection :close (Conn2 ).
4270+ 
4271+ 
41484272leader_locator_client_local (Config ) -> 
41494273    [Server1  | _ ] =  Servers  =  rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
41504274    Q  =  ? config (queue_name , Config ),
@@ -4465,6 +4589,11 @@ declare_passive(Ch, Q, Args) ->
44654589                                           auto_delete  =  false ,
44664590                                           passive  =  true ,
44674591                                           arguments  =  Args }).
4592+ 
4593+ set_up_vhost (Config , VHost ) -> 
4594+     rabbit_ct_broker_helpers :add_vhost (Config , VHost ),
4595+     rabbit_ct_broker_helpers :set_full_permissions (Config , <<" guest"  >>, VHost ).
4596+ 
44684597assert_queue_type (Server , Q , Expected ) -> 
44694598    assert_queue_type (Server , <<" /"  >>, Q , Expected ).
44704599
0 commit comments