@@ -4147,52 +4147,119 @@ amqpl_headers(Config) ->
41474147 multiple = true }).
41484148
41494149leader_health_check (Config ) ->
4150- [Server | _ ] = _Servers = rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
4151- Ch = rabbit_ct_client_helpers :open_channel (Config , Server ),
4150+ VHost1 = <<" vhost1" >>,
4151+ VHost2 = <<" vhost2" >>,
4152+
4153+ set_up_vhost (Config , VHost1 ),
4154+ set_up_vhost (Config , VHost2 ),
4155+
4156+ Conn1 = rabbit_ct_client_helpers :open_unmanaged_connection (Config , 0 , VHost1 ),
4157+ {ok , Ch1 } = amqp_connection :open_channel (Conn1 ),
4158+
4159+ Conn2 = rabbit_ct_client_helpers :open_unmanaged_connection (Config , 0 , VHost2 ),
4160+ {ok , Ch2 } = amqp_connection :open_channel (Conn2 ),
4161+
4162+ Qs1 = [<<" Q.1" >>, <<" Q.2" >>, <<" Q.3" >>],
4163+ Qs2 = [<<" Q.4" >>, <<" Q.5" >>, <<" Q.6" >>],
4164+
4165+ % % in vhost1
41524166 [? assertEqual ({'queue.declare_ok' , Q , 0 , 0 },
4153- declare (Ch , Q , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}]))
4154- || Q <- [<<" Q.1" >>, <<" Q.2" >>, <<" Q.3" >>]],
4167+ declare (Ch1 , Q , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}]))
4168+ || Q <- Qs1 ],
4169+
4170+ % % in vhost2
4171+ [? assertEqual ({'queue.declare_ok' , Q , 0 , 0 },
4172+ declare (Ch2 , Q , [{<<" x-queue-type" >>, longstr , <<" quorum" >>}]))
4173+ || Q <- Qs2 ],
4174+
4175+ % % test sucessful health checks in vhost1, vhost2, global
41554176 ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4156- [<<" .*" >>, << " / " >> ])),
4177+ [<<" .*" >>, VHost1 ])),
41574178 ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4158- [<<" Q.*" >>, <<" /" >>])),
4179+ [<<" Q.*" >>, VHost1 ])),
4180+ [? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4181+ [Q , VHost1 ])) || Q <- Qs1 ],
4182+
41594183 ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4160- [<<" Q.1 " >>, << " / " >> ])),
4184+ [<<" .* " >>, VHost2 ])),
41614185 ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4162- [<<" Q.2" >>, <<" /" >>])),
4186+ [<<" Q.*" >>, VHost2 ])),
4187+ [? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4188+ [Q , VHost2 ])) || Q <- Qs2 ],
4189+
4190+ ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4191+ [<<" .*" >>, global ])),
41634192 ? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4164- [<<" Q.3 " >>, << " / " >> ])),
4193+ [<<" Q.* " >>, global ])),
41654194
4195+ % % clear leaderboard
41664196 Qs = rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_amqqueue , list , []),
41674197
4168- [{Q1_ClusterName , Q1Res }, {Q2_ClusterName , Q2Res }, {Q3_ClusterName , Q3Res }] =
4198+ [{_Q1_ClusterName , _Q1Res },
4199+ {_Q2_ClusterName , _Q2Res },
4200+ {_Q3_ClusterName , _Q3Res },
4201+ {_Q4_ClusterName , _Q4Res },
4202+ {_Q5_ClusterName , _Q5Res },
4203+ {_Q6_ClusterName , _Q6Res }] = QQ_Clusters =
41694204 lists :usort (
41704205 [begin
41714206 {ClusterName , _ } = amqqueue :get_pid (Q ),
41724207 {ClusterName , amqqueue :get_name (Q )}
41734208 end
41744209 || Q <- Qs , amqqueue :get_type (Q ) == rabbit_quorum_queue ]),
41754210
4176- rabbit_ct_broker_helpers :rpc (Config , 0 , ra_leaderboard , clear , [Q1_ClusterName ]),
4177- rabbit_ct_broker_helpers :rpc (Config , 0 , ra_leaderboard , clear , [Q2_ClusterName ]),
4178- rabbit_ct_broker_helpers :rpc (Config , 0 , ra_leaderboard , clear , [Q3_ClusterName ]),
4179-
4180- Q1Data = amqqueue :to_printable (Q1Res , rabbit_quorum_queue ),
4181- Q2Data = amqqueue :to_printable (Q2Res , rabbit_quorum_queue ),
4182- Q3Data = amqqueue :to_printable (Q3Res , rabbit_quorum_queue ),
4211+ [Q1Data , Q2Data , Q3Data , Q4Data , Q5Data , Q6Data ] = QQ_Data =
4212+ [begin
4213+ rabbit_ct_broker_helpers :rpc (Config , 0 , ra_leaderboard , clear , [Q_ClusterName ]),
4214+ _QData = amqqueue :to_printable (Q_Res , rabbit_quorum_queue )
4215+ end
4216+ || {Q_ClusterName , Q_Res } <- QQ_Clusters ],
41834217
4218+ % % test failed health checks in vhost1, vhost2, global
41844219 ? assertEqual ([Q1Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4185- [<<" Q.1" >>, << " / " >> ])),
4220+ [<<" Q.1" >>, VHost1 ])),
41864221 ? assertEqual ([Q2Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4187- [<<" Q.2" >>, << " / " >> ])),
4222+ [<<" Q.2" >>, VHost1 ])),
41884223 ? assertEqual ([Q3Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4189- [<<" Q.3" >>, << " / " >> ])),
4224+ [<<" Q.3" >>, VHost1 ])),
41904225 ? assertEqual ([Q1Data , Q2Data , Q3Data ],
41914226 lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4192- [<<" .*" >>, << " / " >> ]))),
4227+ [<<" .*" >>, VHost1 ]))),
41934228 ? assertEqual ([Q1Data , Q2Data , Q3Data ],
41944229 lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4195- [<<" Q.*" >>, <<" /" >>]))).
4230+ [<<" Q.*" >>, VHost1 ]))),
4231+
4232+ ? assertEqual ([Q4Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4233+ [<<" Q.4" >>, VHost2 ])),
4234+ ? assertEqual ([Q5Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4235+ [<<" Q.5" >>, VHost2 ])),
4236+ ? assertEqual ([Q6Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4237+ [<<" Q.6" >>, VHost2 ])),
4238+ ? assertEqual ([Q4Data , Q5Data , Q6Data ],
4239+ lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4240+ [<<" .*" >>, VHost2 ]))),
4241+ ? assertEqual ([Q4Data , Q5Data , Q6Data ],
4242+ lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4243+ [<<" Q.*" >>, VHost2 ]))),
4244+
4245+ ? assertEqual (QQ_Data ,
4246+ lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4247+ [<<" Q.*" >>, global ]))),
4248+ ? assertEqual (QQ_Data ,
4249+ lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4250+ [<<" Q.*" >>, global ]))),
4251+
4252+ % % cleanup
4253+ [? assertMatch (# 'queue.delete_ok' {},
4254+ amqp_channel :call (Ch1 , # 'queue.delete' {queue = Q }))
4255+ || Q <- Qs1 ],
4256+ [? assertMatch (# 'queue.delete_ok' {},
4257+ amqp_channel :call (Ch1 , # 'queue.delete' {queue = Q }))
4258+ || Q <- Qs2 ],
4259+
4260+ amqp_connection :close (Conn1 ),
4261+ amqp_connection :close (Conn2 ).
4262+
41964263
41974264leader_locator_client_local (Config ) ->
41984265 [Server1 | _ ] = Servers = rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
@@ -4514,6 +4581,11 @@ declare_passive(Ch, Q, Args) ->
45144581 auto_delete = false ,
45154582 passive = true ,
45164583 arguments = Args }).
4584+
4585+ set_up_vhost (Config , VHost ) ->
4586+ rabbit_ct_broker_helpers :add_vhost (Config , VHost ),
4587+ rabbit_ct_broker_helpers :set_full_permissions (Config , <<" guest" >>, VHost ).
4588+
45174589assert_queue_type (Server , Q , Expected ) ->
45184590 assert_queue_type (Server , <<" /" >>, Q , Expected ).
45194591
0 commit comments