Skip to content

Commit e93afc5

Browse files
Merge pull request #13565 from Ayanda-D/extend-amqqueue-tests
Extend rabbit_amqqueue_SUITE and add amqqueue:make_internal/{1,2} type specs
2 parents ab1664c + 762c2ee commit e93afc5

File tree

2 files changed

+40
-12
lines changed

2 files changed

+40
-12
lines changed

deps/rabbit/src/amqqueue.erl

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -520,9 +520,14 @@ internal_owner(#amqqueue{options = #{internal := true,
520520
internal_owner(#amqqueue{}) ->
521521
undefined.
522522

523+
-spec make_internal(amqqueue()) -> amqqueue().
524+
523525
make_internal(Q = #amqqueue{options = Options}) when is_map(Options) ->
524526
Q#amqqueue{options = maps:merge(Options, #{internal => true,
525527
internal_owner => undefined})}.
528+
529+
-spec make_internal(amqqueue(), rabbit_types:r(queue | exchange)) -> amqqueue().
530+
526531
make_internal(Q = #amqqueue{options = Options}, Owner)
527532
when is_map(Options) andalso is_record(Owner, resource) ->
528533
Q#amqqueue{options = maps:merge(Options, #{internal => true,

deps/rabbit/test/rabbit_amqqueue_SUITE.erl

Lines changed: 35 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,8 @@ all() ->
1919
all_tests() ->
2020
[
2121
normal_queue_delete_with,
22-
internal_queue_delete_with
22+
internal_owner_queue_delete_with,
23+
internal_no_owner_queue_delete_with
2324
].
2425

2526
groups() ->
@@ -44,7 +45,9 @@ end_per_group(_Group, Config) ->
4445

4546
init_per_testcase(Testcase, Config) ->
4647
Config1 = rabbit_ct_helpers:testcase_started(Config, Testcase),
47-
rabbit_ct_helpers:run_steps(Config1,
48+
QName = rabbit_misc:r(<<"/">>, queue, rabbit_data_coercion:to_binary(Testcase)),
49+
Config2 = rabbit_ct_helpers:set_config(Config1, [{queue_name, QName}]),
50+
rabbit_ct_helpers:run_steps(Config2,
4851
rabbit_ct_client_helpers:setup_steps()).
4952

5053
end_per_testcase(Testcase, Config) ->
@@ -58,7 +61,7 @@ end_per_testcase(Testcase, Config) ->
5861
%%%===================================================================
5962

6063
normal_queue_delete_with(Config) ->
61-
QName = queue_name(Config, <<"normal">>),
64+
QName = ?config(queue_name, Config),
6265
Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
6366
Queue = amqqueue:new(QName,
6467
none, %% pid
@@ -78,8 +81,8 @@ normal_queue_delete_with(Config) ->
7881

7982
ok.
8083

81-
internal_queue_delete_with(Config) ->
82-
QName = queue_name(Config, <<"internal_protected">>),
84+
internal_owner_queue_delete_with(Config) ->
85+
QName = ?config(queue_name, Config),
8386
Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
8487
Queue = amqqueue:new(QName,
8588
none, %% pid
@@ -96,7 +99,7 @@ internal_queue_delete_with(Config) ->
9699

97100
?assertException(exit, {exception,
98101
{amqp_error, resource_locked,
99-
"Cannot delete protected queue 'rabbit_amqqueue_tests/internal_protected' in vhost '/'.",
102+
"Cannot delete protected queue 'internal_owner_queue_delete_with' in vhost '/'.",
100103
none}}, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, delete_with, [QName, false, false, <<"dummy">>])),
101104

102105
?assertMatch({ok, _}, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, lookup, [QName])),
@@ -107,11 +110,31 @@ internal_queue_delete_with(Config) ->
107110

108111
ok.
109112

110-
%% Utility
113+
internal_no_owner_queue_delete_with(Config) ->
114+
QName = ?config(queue_name, Config),
115+
Node = rabbit_ct_broker_helpers:get_node_config(Config, 0, nodename),
116+
Queue = amqqueue:new(QName,
117+
none, %% pid
118+
true, %% durable
119+
false, %% auto delete
120+
none, %% owner,
121+
[],
122+
<<"/">>,
123+
#{},
124+
rabbit_classic_queue),
125+
IQueue = amqqueue:make_internal(Queue),
126+
127+
?assertMatch({new, _Q}, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_queue_type, declare, [IQueue, Node])),
128+
129+
?assertException(exit, {exception,
130+
{amqp_error, resource_locked,
131+
"Cannot delete protected queue 'internal_no_owner_queue_delete_with' in vhost '/'.",
132+
none}}, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, delete_with, [QName, false, false, <<"dummy">>])),
111133

112-
queue_name(Config, Name) ->
113-
Name1 = iolist_to_binary(rabbit_ct_helpers:config_to_testcase_name(Config, Name)),
114-
queue_name(Name1).
134+
?assertMatch({ok, _}, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, lookup, [QName])),
115135

116-
queue_name(Name) ->
117-
rabbit_misc:r(<<"/">>, queue, Name).
136+
?assertMatch({ok, _}, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, delete_with, [QName, false, false, ?INTERNAL_USER])),
137+
138+
?assertMatch({error, not_found}, rabbit_ct_broker_helpers:rpc(Config, 0, rabbit_amqqueue, lookup, [QName])),
139+
140+
ok.

0 commit comments

Comments
 (0)