@@ -4147,52 +4147,119 @@ amqpl_headers(Config) ->
4147
4147
multiple = true }).
4148
4148
4149
4149
leader_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
4152
4166
[? 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
4155
4176
? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4156
- [<<" .*" >>, << " / " >> ])),
4177
+ [<<" .*" >>, VHost1 ])),
4157
4178
? 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
+
4159
4183
? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4160
- [<<" Q.1 " >>, << " / " >> ])),
4184
+ [<<" .* " >>, VHost2 ])),
4161
4185
? 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 ])),
4163
4192
? assertEqual ([], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4164
- [<<" Q.3 " >>, << " / " >> ])),
4193
+ [<<" Q.* " >>, global ])),
4165
4194
4195
+ % % clear leaderboard
4166
4196
Qs = rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_amqqueue , list , []),
4167
4197
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 =
4169
4204
lists :usort (
4170
4205
[begin
4171
4206
{ClusterName , _ } = amqqueue :get_pid (Q ),
4172
4207
{ClusterName , amqqueue :get_name (Q )}
4173
4208
end
4174
4209
|| Q <- Qs , amqqueue :get_type (Q ) == rabbit_quorum_queue ]),
4175
4210
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 ],
4183
4217
4218
+ % % test failed health checks in vhost1, vhost2, global
4184
4219
? assertEqual ([Q1Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4185
- [<<" Q.1" >>, << " / " >> ])),
4220
+ [<<" Q.1" >>, VHost1 ])),
4186
4221
? assertEqual ([Q2Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4187
- [<<" Q.2" >>, << " / " >> ])),
4222
+ [<<" Q.2" >>, VHost1 ])),
4188
4223
? assertEqual ([Q3Data ], rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4189
- [<<" Q.3" >>, << " / " >> ])),
4224
+ [<<" Q.3" >>, VHost1 ])),
4190
4225
? assertEqual ([Q1Data , Q2Data , Q3Data ],
4191
4226
lists :usort (rabbit_ct_broker_helpers :rpc (Config , 0 , rabbit_quorum_queue , leader_health_check ,
4192
- [<<" .*" >>, << " / " >> ]))),
4227
+ [<<" .*" >>, VHost1 ]))),
4193
4228
? assertEqual ([Q1Data , Q2Data , Q3Data ],
4194
4229
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
+
4196
4263
4197
4264
leader_locator_client_local (Config ) ->
4198
4265
[Server1 | _ ] = Servers = rabbit_ct_broker_helpers :get_node_configs (Config , nodename ),
@@ -4514,6 +4581,11 @@ declare_passive(Ch, Q, Args) ->
4514
4581
auto_delete = false ,
4515
4582
passive = true ,
4516
4583
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
+
4517
4589
assert_queue_type (Server , Q , Expected ) ->
4518
4590
assert_queue_type (Server , <<" /" >>, Q , Expected ).
4519
4591
0 commit comments