diff options
author | Arnaud Cogoluègnes <acogoluegnes@gmail.com> | 2021-06-04 16:35:46 +0200 |
---|---|---|
committer | Arnaud Cogoluègnes <acogoluegnes@gmail.com> | 2021-06-04 16:35:46 +0200 |
commit | 49a70a0f9f7ab674bd0c08caa46a6b9812995096 (patch) | |
tree | eafacd366ecb8781e8cee2a65549c3c82b702528 | |
parent | 16455426f08fac2e0b908e36227d731d7f03ddc4 (diff) | |
download | rabbitmq-server-git-49a70a0f9f7ab674bd0c08caa46a6b9812995096.tar.gz |
Handle last_stream_member more gently in CLI
3 files changed, 14 insertions, 1 deletions
diff --git a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex index 299699801f..529ca3ee72 100644 --- a/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex +++ b/deps/rabbitmq_cli/lib/rabbitmq/cli/streams/commands/delete_replica_command.ex @@ -29,6 +29,8 @@ defmodule RabbitMQ.CLI.Streams.Commands.DeleteReplicaCommand do {:error, :quorum_queue_not_supported} -> {:error, "Cannot delete replicas from a quorum queue"} + {:error, :last_stream_member} -> + {:error, "Cannot delete the last member of a stream"} other -> other end diff --git a/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs b/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs index 6e3833da8c..b7fe17edb0 100644 --- a/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs +++ b/deps/rabbitmq_cli/test/streams/delete_replica_command_test.exs @@ -20,7 +20,8 @@ defmodule RabbitMQ.CLI.Streams.Commands.DeleteReplicaCommandTest do setup context do {:ok, opts: %{ node: get_rabbit_hostname(), - timeout: context[:test_timeout] || 30000 + timeout: context[:test_timeout] || 30000, + vhost: "/" }} end @@ -42,6 +43,12 @@ defmodule RabbitMQ.CLI.Streams.Commands.DeleteReplicaCommandTest do assert @command.validate(["stream-queue-a", "rabbit@new-node"], %{}) == :ok end + test "run: trying to delete the last member of a stream should fail and return a meaningful message", context do + declare_stream("test_stream_1", "/") + assert @command.run(["test_stream_1", get_rabbit_hostname()], context[:opts]) == + {:error, "Cannot delete the last member of a stream"} + end + @tag test_timeout: 3000 test "run: targeting an unreachable node throws a badrpc" do assert match?({:badrpc, _}, @command.run(["stream-queue-a", "rabbit@new-node"], diff --git a/deps/rabbitmq_cli/test/test_helper.exs b/deps/rabbitmq_cli/test/test_helper.exs index f39028902a..0ad6044729 100644 --- a/deps/rabbitmq_cli/test/test_helper.exs +++ b/deps/rabbitmq_cli/test/test_helper.exs @@ -162,6 +162,10 @@ defmodule TestHelper do [queue_name, durable, auto_delete, args, owner, "acting-user"]) end + def declare_stream(name, vhost) do + declare_queue(name, vhost, true, false, [{"x-queue-type", :longstr, "stream"}]) + end + def delete_queue(name, vhost) do queue_name = :rabbit_misc.r(vhost, :queue, name) :rpc.call(get_rabbit_hostname(), |