Skip to content

Commit 36eb612

Browse files
authored
Makes get_batch/get_values lenient to nonexistent limit-configs too (#42)
1 parent 525054e commit 36eb612

3 files changed

Lines changed: 42 additions & 8 deletions

File tree

apps/limiter/src/lim_config_machine.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,7 @@ rollback(#limiter_LimitChange{id = ID, version = Version} = LimitChange, LimitCo
305305
{ok, [lim_liminator:limit_response()]} | {error, config_error() | {processor(), get_limit_error()}}.
306306
get_values(LimitChanges, LimitContext) ->
307307
do(fun() ->
308-
Changes = unwrap(collect_changes(hold, LimitChanges, LimitContext, strict)),
308+
Changes = unwrap(collect_changes(hold, LimitChanges, LimitContext, lenient)),
309309
Names = lists:map(fun lim_liminator:get_name/1, Changes),
310310
unwrap(lim_liminator:get_values(Names, LimitContext))
311311
end).
@@ -318,7 +318,7 @@ get_batch(OperationID, LimitChanges, LimitContext) ->
318318
OperationID,
319319
lim_liminator:get(
320320
OperationID,
321-
unwrap(collect_changes(hold, LimitChanges, LimitContext, strict)),
321+
unwrap(collect_changes(hold, LimitChanges, LimitContext, lenient)),
322322
LimitContext
323323
)
324324
)

apps/limiter/src/lim_liminator.erl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,15 @@ get_name(#liminator_LimitChange{limit_name = Name}) ->
4343

4444
-spec get_values([limit_name()], lim_context()) ->
4545
{ok, [limit_response()]} | {error, invalid_request_error()}.
46+
get_values([], _LimitContext) ->
47+
{ok, []};
4648
get_values(Names, LimitContext) ->
4749
do('GetLastLimitsValues', Names, LimitContext).
4850

4951
-spec get(operation_id(), [limit_change()], lim_context()) ->
5052
{ok, [limit_response()]} | {error, invalid_request_error()}.
53+
get(_OperationID, [], _LimitContext) ->
54+
{ok, []};
5155
get(OperationID, Changes, LimitContext) ->
5256
do('Get', #liminator_LimitRequest{operation_id = OperationID, limit_changes = Changes}, LimitContext).
5357

apps/limiter/test/lim_turnover_SUITE.erl

Lines changed: 36 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@
7070
-export([batch_commit_ok/1]).
7171
-export([batch_rollback_ok/1]).
7272
-export([batch_rollback_lenient_to_config_notfound_ok/1]).
73+
-export([batch_get_values_lenient_to_config_notfound_ok/1]).
74+
-export([batch_hold_strict_to_config_notfound_ok/1]).
7375
-export([two_batch_hold_ok/1]).
7476
-export([two_batch_commit_ok/1]).
7577
-export([two_batch_rollback_ok/1]).
@@ -140,6 +142,8 @@ groups() ->
140142
batch_commit_ok,
141143
batch_rollback_ok,
142144
batch_rollback_lenient_to_config_notfound_ok,
145+
batch_get_values_lenient_to_config_notfound_ok,
146+
batch_hold_strict_to_config_notfound_ok,
143147
two_batch_hold_ok,
144148
two_batch_commit_ok,
145149
two_batch_rollback_ok,
@@ -879,6 +883,10 @@ construct_request(C) ->
879883
?LIMIT_CHANGE(ID2, 0, Version2)
880884
]).
881885

886+
add_non_existent_limit_config(?LIMIT_REQUEST(_ID, Changes) = Request) ->
887+
NonexistentChange = ?LIMIT_CHANGE(<<"this-does-not-exist">>, 0, dmt_client:get_last_version()),
888+
Request#limiter_LimitRequest{limit_changes = [NonexistentChange | Changes]}.
889+
882890
-spec batch_hold_ok(config()) -> _.
883891
batch_hold_ok(C) ->
884892
Context =
@@ -922,15 +930,37 @@ batch_rollback_lenient_to_config_notfound_ok(C) ->
922930
end,
923931
Request0 = construct_request(C),
924932
ok = hold_and_assert_batch(10, Request0, Context, C),
925-
Request1 = Request0#limiter_LimitRequest{
926-
limit_changes = [
927-
?LIMIT_CHANGE(<<"this-does-not-exist">>, 0, dmt_client:get_last_version())
928-
| Request0#limiter_LimitRequest.limit_changes
929-
]
930-
},
933+
Request1 = add_non_existent_limit_config(Request0),
931934
{ok, ok} = lim_client:rollback_batch(Request1, Context, ?config(client, C)),
932935
ok = assert_values(0, Request0, Context, C).
933936

937+
-spec batch_get_values_lenient_to_config_notfound_ok(config()) -> _.
938+
batch_get_values_lenient_to_config_notfound_ok(C) ->
939+
Context =
940+
case get_group_name(C) of
941+
withdrawals -> ?wthdproc_ctx_withdrawal(?cash(10));
942+
_Default -> ?payproc_ctx_payment(?cash(10), ?cash(10))
943+
end,
944+
Request0 = construct_request(C),
945+
ok = hold_and_assert_batch(10, Request0, Context, C),
946+
Request1 = add_non_existent_limit_config(Request0),
947+
ok = assert_batch(10, Request1, Context, C),
948+
ok = assert_values(10, Request1, Context, C).
949+
950+
-spec batch_hold_strict_to_config_notfound_ok(config()) -> _.
951+
batch_hold_strict_to_config_notfound_ok(C) ->
952+
Context =
953+
case get_group_name(C) of
954+
withdrawals -> ?wthdproc_ctx_withdrawal(?cash(10));
955+
_Default -> ?payproc_ctx_payment(?cash(10), ?cash(10))
956+
end,
957+
Request0 = construct_request(C),
958+
Request1 = add_non_existent_limit_config(Request0),
959+
?assertEqual(
960+
{exception, #limiter_LimitNotFound{}},
961+
lim_client:hold_batch(Request1, Context, ?config(client, C))
962+
).
963+
934964
-spec two_batch_hold_ok(config()) -> _.
935965
two_batch_hold_ok(C) ->
936966
Context =

0 commit comments

Comments
 (0)