diff --git a/deps/rabbitmq_cli/lib/rotate_logs_command.ex b/deps/rabbitmq_cli/lib/rotate_logs_command.ex new file mode 100644 index 0000000000..756efb8dd8 --- /dev/null +++ b/deps/rabbitmq_cli/lib/rotate_logs_command.ex @@ -0,0 +1,38 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at http://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved. + + +defmodule RotateLogsCommand do + @behaviour CommandBehaviour + @flags [] + + def merge_defaults(args, opts), do: {args, opts} + def validate([_|_] = args, _) when length(args) > 0, do: {:validation_failure, :too_many_args} + def validate([], _), do: :ok + def switches(), do: [] + + + def run([], %{node: node_name}) do + node_name + |> Helpers.parse_node + |> :rabbit_misc.rpc_call(:rabbit, :rotate_logs, []) + end + + def usage, do: "rotate_logs" + + def flags, do: @flags + + def banner(_, %{node: node_name}), do: "Rotating logs for node #{node_name} ..." +end diff --git a/deps/rabbitmq_cli/test/rotate_logs_command_test.exs b/deps/rabbitmq_cli/test/rotate_logs_command_test.exs new file mode 100644 index 0000000000..e1975f2718 --- /dev/null +++ b/deps/rabbitmq_cli/test/rotate_logs_command_test.exs @@ -0,0 +1,57 @@ +## The contents of this file are subject to the Mozilla Public License +## Version 1.1 (the "License"); you may not use this file except in +## compliance with the License. You may obtain a copy of the License +## at http://www.mozilla.org/MPL/ +## +## Software distributed under the License is distributed on an "AS IS" +## basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See +## the License for the specific language governing rights and +## limitations under the License. +## +## The Original Code is RabbitMQ. +## +## The Initial Developer of the Original Code is GoPivotal, Inc. +## Copyright (c) 2007-2016 Pivotal Software, Inc. All rights reserved. + + +defmodule RotateLogsCommandTest do + use ExUnit.Case, async: false + import TestHelper + + @command RotateLogsCommand + + setup_all do + :net_kernel.start([:rabbitmqctl, :shortnames]) + :net_kernel.connect_node(get_rabbit_hostname) + + on_exit([], fn -> + :erlang.disconnect_node(get_rabbit_hostname) + :net_kernel.stop() + end) + + :ok + end + + setup do + {:ok, opts: %{node: get_rabbit_hostname}} + end + + test "validate: with extra arguments returns an arg count error", context do + assert @command.validate(["extra"], context[:opts]) == {:validation_failure, :too_many_args} + end + + test "run: request to a named, active node succeeds", context do + assert @command.run([], context[:opts]) == :ok + end + + test "run: request to a non-existent node returns nodedown" do + target = :jake@thedog + :net_kernel.connect_node(target) + opts = %{node: target} + assert match?({:badrpc, :nodedown}, @command.run([], opts)) + end + + test "banner", context do + assert @command.banner([], context[:opts]) =~ ~r/Rotating logs for node #{get_rabbit_hostname}/ + end +end