diff --git a/deps/rabbitmq_shovel/Makefile b/deps/rabbitmq_shovel/Makefile index 17c04f0890a7..f28b93ba3e9e 100644 --- a/deps/rabbitmq_shovel/Makefile +++ b/deps/rabbitmq_shovel/Makefile @@ -23,7 +23,7 @@ dep_amqp10_client = git https://github.com/rabbitmq/rabbitmq-amqp1.0-client.git LOCAL_DEPS = crypto -TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers rabbitmq_amqp1_0 meck +TEST_DEPS = rabbitmq_ct_helpers rabbitmq_ct_client_helpers rabbitmq_amqp1_0 rabbitmq_amqp_client meck PLT_APPS += rabbitmq_cli diff --git a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl index dfb202c10828..37e8b1dd34b6 100644 --- a/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl +++ b/deps/rabbitmq_shovel/src/rabbit_amqp10_shovel.erl @@ -445,6 +445,4 @@ bin_to_hex(Bin) -> is_amqp10_compat(T) -> is_binary(T) orelse is_number(T) orelse - %% TODO: not all lists are compatible - is_list(T) orelse is_boolean(T). diff --git a/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl b/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl index bf22e8538da3..639045c76ae7 100644 --- a/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl +++ b/deps/rabbitmq_shovel/test/amqp10_dynamic_SUITE.erl @@ -27,7 +27,8 @@ groups() -> autodelete_amqp091_dest_on_confirm, autodelete_amqp091_dest_on_publish, simple_amqp10_dest, - simple_amqp10_src + simple_amqp10_src, + amqp091_to_amqp10_with_dead_lettering ]}, {with_map_config, [], [ simple, @@ -96,6 +97,29 @@ simple_amqp10_dest(Config) -> <<"src-queue">>) end). +amqp091_to_amqp10_with_dead_lettering(Config) -> + Dest = ?config(destq, Config), + Src = ?config(srcq, Config), + TmpQ = <<"tmp">>, + with_session(Config, + fun (Sess) -> + {ok, LinkPair} = rabbitmq_amqp_client:attach_management_link_pair_sync(Sess, <<"my link pair">>), + {ok, _} = rabbitmq_amqp_client:declare_queue(LinkPair, TmpQ, + #{arguments =>#{<<"x-max-length">> => {uint, 0}, + <<"x-dead-letter-exchange">> => {utf8, <<"">>}, + <<"x-dead-letter-routing-key">> => {utf8, Src}}}), + {ok, Sender} = amqp10_client:attach_sender_link(Sess, + <<"sender-tmp">>, + <<"/queues/", TmpQ/binary>>, + unsettled, + unsettled_state), + ok = await_amqp10_event(link, Sender, attached), + expect_empty(Sess, TmpQ), + test_amqp10_destination(Config, Src, Dest, Sess, <<"amqp091">>, <<"src-queue">>), + %% publish to tmp, it should be dead-lettered to src and then shovelled to dest + _ = publish_expect(Sess, TmpQ, Dest, <<"tag1">>, <<"hello">>) + end). + test_amqp10_destination(Config, Src, Dest, Sess, Protocol, ProtocolSrc) -> MapConfig = ?config(map_config, Config), shovel_test_utils:set_param(Config, <<"test">>,