diff --git a/src/oidcc_backoff.erl b/src/oidcc_backoff.erl index ccfc386..ed75bd0 100644 --- a/src/oidcc_backoff.erl +++ b/src/oidcc_backoff.erl @@ -48,11 +48,11 @@ priv_handle_retry(exponential, _Min, Max, State) -> {Wait, Wait}; priv_handle_retry(random_exponential, Min, Max, undefined) -> Lower = max(Min, Max div 3), - priv_handle_retry(random_exponential, Min, Max, {Lower, Lower}); + priv_handle_retry(random_exponential, Min, Max, {Min, Lower}); priv_handle_retry(random_exponential, _Min, Max, {Prev, Lower}) -> NextMin = min(Prev, Lower), NextMax = min(Prev * 3, Max), Next = rand(NextMin, NextMax), - priv_handle_retry(random, NextMin, NextMax, {Next, Lower}). + {Next, {Next, Lower}}. rand(Min, Max) -> rand:uniform(Max - Min + 1) + Min - 1. diff --git a/test/oidcc_backoff_test.erl b/test/oidcc_backoff_test.erl index 9cb0a96..edcc689 100644 --- a/test/oidcc_backoff_test.erl +++ b/test/oidcc_backoff_test.erl @@ -84,6 +84,18 @@ rand_exp_backoff_in_min_max_test() -> calculate_backoffs(20, random_exponential, Min, Max) ). +rand_exp_backoff_starts_near_min_test() -> + Min = 1000, + Max = 30000, + lists:foreach( + fun(_) -> + [{wait, Wait} | _] = calculate_backoffs(1, random_exponential, Min, Max), + ?assert(Wait >= Min), + ?assert(Wait =< Min * 3) + end, + lists:seq(1, 100) + ). + rand_exp_backoff_increase_until_third_max_test() -> Min = 1000, Max = 30000,