Skip to content

Commit 4e2c62b

Browse files
committed
Add test for rabbit_quorum_queue:all_replica_states/0
and ensure non-existent/inactive/noproc QQ members are not reported.
1 parent 4914850 commit 4e2c62b

File tree

1 file changed

+50
-1
lines changed

1 file changed

+50
-1
lines changed

deps/rabbit/test/quorum_queue_SUITE.erl

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,8 @@ groups() ->
9797
force_all_queues_shrink_member_to_current_member,
9898
force_vhost_queues_shrink_member_to_current_member,
9999
policy_repair,
100-
gh_12635
100+
gh_12635,
101+
replica_states
101102
]
102103
++ all_tests()},
103104
{cluster_size_5, [], [start_queue,
@@ -4352,6 +4353,54 @@ requeue_multiple_false(Config) ->
43524353
?assertEqual(#'queue.delete_ok'{message_count = 0},
43534354
amqp_channel:call(Ch, #'queue.delete'{queue = QQ})).
43544355

4356+
replica_states(Config) ->
4357+
[Server | _] = Servers = rabbit_ct_broker_helpers:get_node_configs(Config, nodename),
4358+
Ch = rabbit_ct_client_helpers:open_channel(Config, Server),
4359+
4360+
[?assertEqual({'queue.declare_ok', Q, 0, 0},
4361+
declare(Ch, Q, [{<<"x-queue-type">>, longstr, <<"quorum">>}]))
4362+
|| Q <- [<<"Q1">>, <<"Q2">>, <<"Q3">>]],
4363+
4364+
Qs = rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, list, []),
4365+
4366+
[Q1_ClusterName, Q2_ClusterName, Q3_ClusterName] =
4367+
[begin
4368+
{ClusterName, _} = amqqueue:get_pid(Q),
4369+
ClusterName
4370+
end
4371+
|| Q <- Qs, amqqueue:get_type(Q) == rabbit_quorum_queue],
4372+
4373+
Result1 = rabbit_misc:append_rpc_all_nodes(Servers, rabbit_quorum_queue, all_replica_states, []),
4374+
ct:pal("all replica states: ~tp", [Result1]),
4375+
4376+
lists:map(fun({_Node, ReplicaStates}) ->
4377+
?assert(maps:is_key(Q1_ClusterName, ReplicaStates)),
4378+
?assert(maps:is_key(Q2_ClusterName, ReplicaStates)),
4379+
?assert(maps:is_key(Q3_ClusterName, ReplicaStates))
4380+
end, Result1),
4381+
4382+
%% Unregister a few queues (same outcome of 'noproc')
4383+
rabbit_ct_broker_helpers:rpc(Config, Server, erlang, unregister, [Q2_ClusterName]),
4384+
rabbit_ct_broker_helpers:rpc(Config, Server, erlang, unregister, [Q3_ClusterName]),
4385+
4386+
?assert(undefined == rabbit_ct_broker_helpers:rpc(Config, Server, erlang, whereis, [Q2_ClusterName])),
4387+
?assert(undefined == rabbit_ct_broker_helpers:rpc(Config, Server, erlang, whereis, [Q3_ClusterName])),
4388+
4389+
Result2 = rabbit_misc:append_rpc_all_nodes(Servers, rabbit_quorum_queue, all_replica_states, []),
4390+
ct:pal("replica states with a node missing Q1 and Q2: ~tp", [Result2]),
4391+
4392+
lists:map(fun({Node, ReplicaStates}) ->
4393+
if Node == Server ->
4394+
?assert(maps:is_key(Q1_ClusterName, ReplicaStates)),
4395+
?assertNot(maps:is_key(Q2_ClusterName, ReplicaStates)),
4396+
?assertNot(maps:is_key(Q3_ClusterName, ReplicaStates));
4397+
true ->
4398+
?assert(maps:is_key(Q1_ClusterName, ReplicaStates)),
4399+
?assert(maps:is_key(Q2_ClusterName, ReplicaStates)),
4400+
?assert(maps:is_key(Q3_ClusterName, ReplicaStates))
4401+
end
4402+
end, Result2).
4403+
43554404
%%----------------------------------------------------------------------------
43564405

43574406
same_elements(L1, L2)

0 commit comments

Comments
 (0)