summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--deps/rabbit/src/rabbit_policies.erl4
-rw-r--r--deps/rabbit/test/unit_operator_policy_SUITE.erl55
2 files changed, 55 insertions, 4 deletions
diff --git a/deps/rabbit/src/rabbit_policies.erl b/deps/rabbit/src/rabbit_policies.erl
index 062635c5b4..e23d12d81a 100644
--- a/deps/rabbit/src/rabbit_policies.erl
+++ b/deps/rabbit/src/rabbit_policies.erl
@@ -176,4 +176,6 @@ merge_policy_value(<<"max-length-bytes">>, Val, OpVal) -> min(Val, OpVal);
merge_policy_value(<<"max-in-memory-length">>, Val, OpVal) -> min(Val, OpVal);
merge_policy_value(<<"max-in-memory-bytes">>, Val, OpVal) -> min(Val, OpVal);
merge_policy_value(<<"expires">>, Val, OpVal) -> min(Val, OpVal);
-merge_policy_value(<<"delivery-limit">>, Val, OpVal) -> min(Val, OpVal).
+merge_policy_value(<<"delivery-limit">>, Val, OpVal) -> min(Val, OpVal);
+%% use operator policy value for booleans
+merge_policy_value(_Key, Val, OpVal) when is_boolean(Val) andalso is_boolean(OpVal) -> OpVal.
diff --git a/deps/rabbit/test/unit_operator_policy_SUITE.erl b/deps/rabbit/test/unit_operator_policy_SUITE.erl
index 804da2d1c9..dedd6c82af 100644
--- a/deps/rabbit/test/unit_operator_policy_SUITE.erl
+++ b/deps/rabbit/test/unit_operator_policy_SUITE.erl
@@ -21,7 +21,8 @@ all() ->
groups() ->
[
{parallel_tests, [parallel], [
- merge_operator_policy_definitions
+ merge_operator_policy_definitions,
+ conflict_resolution_for_booleans
]}
].
@@ -102,6 +103,54 @@ merge_operator_policy_definitions(_Config) ->
[{definition, [
{<<"message-ttl">>, 3000}
]}])
- ),
+ ).
+
- passed.
+ conflict_resolution_for_booleans(_Config) ->
+ ?assertEqual(
+ [
+ {<<"remote-dc-replicate">>, true}
+ ],
+ rabbit_policy:merge_operator_definitions(
+ #{definition => #{
+ <<"remote-dc-replicate">> => true
+ }},
+ [{definition, [
+ {<<"remote-dc-replicate">>, true}
+ ]}])),
+
+ ?assertEqual(
+ [
+ {<<"remote-dc-replicate">>, false}
+ ],
+ rabbit_policy:merge_operator_definitions(
+ #{definition => #{
+ <<"remote-dc-replicate">> => false
+ }},
+ [{definition, [
+ {<<"remote-dc-replicate">>, false}
+ ]}])),
+
+ ?assertEqual(
+ [
+ {<<"remote-dc-replicate">>, true}
+ ],
+ rabbit_policy:merge_operator_definitions(
+ #{definition => #{
+ <<"remote-dc-replicate">> => false
+ }},
+ [{definition, [
+ {<<"remote-dc-replicate">>, true}
+ ]}])),
+
+ ?assertEqual(
+ [
+ {<<"remote-dc-replicate">>, false}
+ ],
+ rabbit_policy:merge_operator_definitions(
+ #{definition => #{
+ <<"remote-dc-replicate">> => true
+ }},
+ [{definition, [
+ {<<"remote-dc-replicate">>, false}
+ ]}])). \ No newline at end of file