Skip to content

Commit 6ed8190

Browse files
Merge pull request #12066 from rabbitmq/md/experimental-ff-ctl-fixes
Return non-0 exit code when failing to enable an experimental feature flag
2 parents 4a3fa4d + dce8135 commit 6ed8190

File tree

2 files changed

+28
-3
lines changed

2 files changed

+28
-3
lines changed

deps/rabbitmq_cli/lib/rabbitmq/cli/ctl/commands/enable_feature_flag_command.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EnableFeatureFlagCommand do
2525
def run(["all"], %{node: node_name, experimental: experimental}) do
2626
case experimental do
2727
true ->
28-
{:error, RabbitMQ.CLI.Core.ExitCodes.exit_usage(), "`--experiemntal` flag is not allowed when enabling all feature flags.\nUse --experimental with a specific feature flag if you want to enable an experimental feature."}
28+
{:error, RabbitMQ.CLI.Core.ExitCodes.exit_usage(), "`--experimental` flag is not allowed when enabling all feature flags.\nUse --experimental with a specific feature flag if you want to enable an experimental feature."}
2929
false ->
3030
case :rabbit_misc.rpc_call(node_name, :rabbit_feature_flags, :enable_all, []) do
3131
{:badrpc, _} = err -> err
@@ -40,7 +40,7 @@ defmodule RabbitMQ.CLI.Ctl.Commands.EnableFeatureFlagCommand do
4040
])} do
4141
{_, {:badrpc, _} = err} -> err
4242
{false, :experimental} ->
43-
IO.puts("Feature flag #{feature_flag} is experimental. If you understand the risk, use --experimental to enable it.")
43+
{:error, RabbitMQ.CLI.Core.ExitCodes.exit_usage(), "Feature flag #{feature_flag} is experimental. If you understand the risk, use --experimental to enable it."}
4444
_ ->
4545
case :rabbit_misc.rpc_call(node_name, :rabbit_feature_flags, :enable, [
4646
String.to_atom(feature_flag)

deps/rabbitmq_cli/test/ctl/enable_feature_flag_test.exs

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ defmodule EnableFeatureFlagCommandTest do
1010

1111
@command RabbitMQ.CLI.Ctl.Commands.EnableFeatureFlagCommand
1212
@feature_flag :ff_from_enable_ff_testsuite
13+
@experimental_flag :ff_from_enable_ff_testsuite_experimental
14+
@usage_exit_code RabbitMQ.CLI.Core.ExitCodes.exit_usage()
1315

1416
setup_all do
1517
RabbitMQ.CLI.Core.Distribution.start()
@@ -22,6 +24,11 @@ defmodule EnableFeatureFlagCommandTest do
2224
desc: ~c"My feature flag",
2325
provided_by: :EnableFeatureFlagCommandTest,
2426
stability: :stable
27+
},
28+
@experimental_flag => %{
29+
desc: ~c"An **experimental** feature!",
30+
provided_by: :EnableFeatureFlagCommandTest,
31+
stability: :experimental
2532
}
2633
}
2734

@@ -35,7 +42,9 @@ defmodule EnableFeatureFlagCommandTest do
3542

3643
{
3744
:ok,
38-
opts: %{node: get_rabbit_hostname(), experimental: false}, feature_flag: @feature_flag
45+
opts: %{node: get_rabbit_hostname(), experimental: false},
46+
feature_flag: @feature_flag,
47+
experimental_flag: @experimental_flag
3948
}
4049
end
4150

@@ -63,6 +72,16 @@ defmodule EnableFeatureFlagCommandTest do
6372
assert match?({:badrpc, _}, @command.run(["na"], opts))
6473
end
6574

75+
test "run: enabling an experimental flag requires '--experimental'", context do
76+
experimental_flag = Atom.to_string(context[:experimental_flag])
77+
assert match?(
78+
{:error, @usage_exit_code, _},
79+
@command.run([experimental_flag], context[:opts])
80+
)
81+
opts = Map.put(context[:opts], :experimental, true)
82+
assert @command.run([experimental_flag], opts) == :ok
83+
end
84+
6685
test "run: enabling the same feature flag twice is idempotent", context do
6786
enable_feature_flag(context[:feature_flag])
6887
assert @command.run([Atom.to_string(context[:feature_flag])], context[:opts]) == :ok
@@ -75,6 +94,12 @@ defmodule EnableFeatureFlagCommandTest do
7594
assert list_feature_flags(:enabled) |> Map.has_key?(context[:feature_flag])
7695
end
7796

97+
test "run: enabling all feature flags with '--experimental' returns an error", context do
98+
enable_feature_flag(context[:feature_flag])
99+
opts = Map.put(context[:opts], :experimental, true)
100+
assert match?({:error, @usage_exit_code, _}, @command.run(["all"], opts))
101+
end
102+
78103
test "banner", context do
79104
assert @command.banner([context[:feature_flag]], context[:opts]) =~
80105
~r/Enabling feature flag \"#{context[:feature_flag]}\" \.\.\./

0 commit comments

Comments
 (0)