Skip to content

Commit f418595

Browse files
committed
Add more test assertions
1 parent dbeaac4 commit f418595

File tree

1 file changed

+57
-28
lines changed

1 file changed

+57
-28
lines changed

deps/rabbit/test/amqp_client_SUITE.erl

Lines changed: 57 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -352,6 +352,8 @@ delivery_count_classic_queue(Config) ->
352352
delivery_count_quorum_queue(Config) ->
353353
delivery_count(<<"quorum">>, Config).
354354

355+
%% Test that the AMQP delivery-count is incremented correctly.
356+
%% "The number of unsuccessful previous attempts to deliver this message."
355357
delivery_count(QType, Config) ->
356358
QName = <<"source queue">>,
357359
QAddress = rabbitmq_amqp_address:queue(QName),
@@ -360,6 +362,9 @@ delivery_count(QType, Config) ->
360362

361363
{_, Session, LinkPair} = Init = init(Config),
362364
QProps = #{arguments => #{<<"x-queue-type">> => {utf8, QType},
365+
<<"x-message-ttl">> => {ulong, 5000},
366+
<<"x-max-length">> => {ulong, 1},
367+
<<"x-overflow">> => {utf8, <<"drop-head">>},
363368
<<"x-dead-letter-exchange">> => {utf8, <<>>},
364369
<<"x-dead-letter-routing-key">> => {utf8, DLQName}}},
365370
{ok, #{type := QType}} = rabbitmq_amqp_client:declare_queue(LinkPair, QName, QProps),
@@ -371,55 +376,79 @@ delivery_count(QType, Config) ->
371376

372377
{ok, Sender} = amqp10_client:attach_sender_link(Session, <<"sender source queue">>, QAddress),
373378
ok = wait_for_credit(Sender),
374-
M1 = amqp10_msg:new(<<"tag">>, <<"msg">>, true),
375-
ok = amqp10_client:send_msg(Sender, M1),
376-
ok = detach_link_sync(Sender),
379+
ok = amqp10_client:send_msg(Sender, amqp10_msg:new(<<"t1">>, <<"first message">>, true)),
377380

378381
{ok, QReceiver} = amqp10_client:attach_receiver_link(
379382
Session, <<"receiver source queue">>, QAddress, unsettled),
380383
{ok, DLQReceiver} = amqp10_client:attach_receiver_link(
381384
Session, <<"receiver dead letter queue">>, DLQAddress, unsettled),
382385

383-
{ok, M2} = amqp10_client:get_msg(QReceiver),
386+
{ok, Msg1} = amqp10_client:get_msg(QReceiver),
384387
?assertMatch(#{delivery_count := 0,
385388
first_acquirer := true},
386-
amqp10_msg:headers(M2)),
389+
amqp10_msg:headers(Msg1)),
387390

388-
%% released coutcome must not increment the delivery-count
389-
ok = amqp10_client:settle_msg(QReceiver, M2, released),
390-
{ok, M3} = amqp10_client:get_msg(QReceiver),
391+
%% delivery-failed=true in modified coutcome must increment the delivery-count
392+
%% delivery-failed=false in modified coutcome must not increment the delivery-count
393+
ok = amqp10_client:settle_msg(QReceiver, Msg1, {modified, false, false, #{}}),
394+
{ok, Msg2} = amqp10_client:get_msg(QReceiver),
391395
?assertMatch(#{delivery_count := 0,
392396
first_acquirer := false},
393-
amqp10_msg:headers(M3)),
394-
395-
%% delivery-failed=true in modified coutcome must increment the delivery-count
396-
ok = amqp10_client:settle_msg(QReceiver, M3, {modified, true, false, #{}}),
397-
{ok, M4} = amqp10_client:get_msg(QReceiver),
397+
amqp10_msg:headers(Msg2)),
398+
ok = amqp10_client:settle_msg(QReceiver, Msg2, {modified, true, false, #{}}),
399+
{ok, Msg3} = amqp10_client:get_msg(QReceiver),
398400
?assertMatch(#{delivery_count := 1,
399401
first_acquirer := false},
400-
amqp10_msg:headers(M4)),
402+
amqp10_msg:headers(Msg3)),
403+
ok = amqp10_client:settle_msg(DLQReceiver, Msg3, {modified, true, true, #{}}),
404+
{ok, Msg4} = amqp10_client:get_msg(DLQReceiver),
405+
?assertMatch(#{delivery_count := 2,
406+
first_acquirer := false},
407+
amqp10_msg:headers(Msg4)),
408+
ok = amqp10_client:settle_msg(DLQReceiver, Msg4, {modified, false, true, #{}}),
409+
{ok, Msg5} = amqp10_client:get_msg(QReceiver),
410+
?assertMatch(#{delivery_count := 2,
411+
first_acquirer := false},
412+
amqp10_msg:headers(Msg5)),
401413

402-
%% delivery-failed=false in modified coutcome must not increment the delivery-count
403-
ok = amqp10_client:settle_msg(QReceiver, M4, {modified, false, true, #{}}),
404-
{ok, M5} = amqp10_client:get_msg(DLQReceiver),
405-
?assertMatch(#{delivery_count := 1,
414+
%% released coutcome must not increment the delivery-count
415+
ok = amqp10_client:settle_msg(QReceiver, Msg5, released),
416+
417+
%% Let the message expire.
418+
%% Since there wasn't a delivery attempt, the delivery-count must not be incremented.
419+
{ok, Msg6} = amqp10_client:get_msg(DLQReceiver, 15_000),
420+
?assertMatch(#{<<"x-last-death-reason">> := <<"expired">>},
421+
amqp10_msg:message_annotations(Msg6)),
422+
?assertMatch(#{delivery_count := 2,
406423
first_acquirer := false},
407-
amqp10_msg:headers(M5)),
424+
amqp10_msg:headers(Msg6)),
408425

409426
%% rejected coutcome must increment the delivery-count
410-
ok = amqp10_client:settle_msg(DLQReceiver, M5, rejected),
411-
{ok, M6} = amqp10_client:get_msg(QReceiver),
412-
?assertMatch(#{delivery_count := 2,
427+
ok = amqp10_client:settle_msg(DLQReceiver, Msg6, rejected),
428+
{ok, Msg7} = amqp10_client:get_msg(QReceiver),
429+
?assertMatch(#{delivery_count := 3,
413430
first_acquirer := false},
414-
amqp10_msg:headers(M6)),
431+
amqp10_msg:headers(Msg7)),
432+
433+
ok = amqp10_client:settle_msg(QReceiver, Msg7, released),
434+
%% Dead letter the message due to x-max-length.
435+
%% Since there wasn't a delivery attempt, the delivery-count must not be incremented.
436+
ok = amqp10_client:send_msg(Sender, amqp10_msg:new(<<"t2">>, <<"second message">>, true)),
437+
{ok, Msg8} = amqp10_client:get_msg(DLQReceiver),
438+
?assertEqual(<<"first message">>, amqp10_msg:body_bin(Msg8)),
439+
?assertMatch(#{<<"x-last-death-reason">> := <<"maxlen">>},
440+
amqp10_msg:message_annotations(Msg8)),
441+
?assertMatch(#{delivery_count := 3,
442+
first_acquirer := false},
443+
amqp10_msg:headers(Msg8)),
444+
445+
ok = amqp10_client:settle_msg(DLQReceiver, Msg8, accepted),
415446

416-
ok = amqp10_client:settle_msg(QReceiver, M6, accepted),
447+
ok = detach_link_sync(Sender),
417448
ok = detach_link_sync(QReceiver),
418449
ok = detach_link_sync(DLQReceiver),
419-
?assertMatch({ok, #{message_count := 0}},
420-
rabbitmq_amqp_client:delete_queue(LinkPair, QName)),
421-
?assertMatch({ok, #{message_count := 0}},
422-
rabbitmq_amqp_client:delete_queue(LinkPair, DLQName)),
450+
{ok, _} = rabbitmq_amqp_client:delete_queue(LinkPair, QName),
451+
{ok, _} = rabbitmq_amqp_client:delete_queue(LinkPair, DLQName),
423452
ok = close(Init).
424453

425454
%% We test the modified outcome with classic queues.

0 commit comments

Comments
 (0)