diff options
Diffstat (limited to 'src/couch_replicator/test/eunit/couch_replicator_rate_limiter_tests.erl')
-rw-r--r-- | src/couch_replicator/test/eunit/couch_replicator_rate_limiter_tests.erl | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/src/couch_replicator/test/eunit/couch_replicator_rate_limiter_tests.erl b/src/couch_replicator/test/eunit/couch_replicator_rate_limiter_tests.erl new file mode 100644 index 000000000..034550aec --- /dev/null +++ b/src/couch_replicator/test/eunit/couch_replicator_rate_limiter_tests.erl @@ -0,0 +1,89 @@ +-module(couch_replicator_rate_limiter_tests). + +-include_lib("couch/include/couch_eunit.hrl"). + + +rate_limiter_test_() -> + { + foreach, + fun setup/0, + fun teardown/1, + [ + t_new_key(), + t_1_failure(), + t_2_failures_back_to_back(), + t_2_failures(), + t_success_threshold(), + t_1_failure_2_successes() + ] + }. + + +t_new_key() -> + ?_test(begin + ?assertEqual(0, couch_replicator_rate_limiter:interval({"foo", get})) + end). + + +t_1_failure() -> + ?_test(begin + ?assertEqual(24, couch_replicator_rate_limiter:failure({"foo", get})) + end). + + +t_2_failures() -> + ?_test(begin + couch_replicator_rate_limiter:failure({"foo", get}), + low_pass_filter_delay(), + Interval = couch_replicator_rate_limiter:failure({"foo", get}), + ?assertEqual(29, Interval) + end). + + +t_2_failures_back_to_back() -> + ?_test(begin + couch_replicator_rate_limiter:failure({"foo", get}), + Interval = couch_replicator_rate_limiter:failure({"foo", get}), + ?assertEqual(24, Interval) + end). + + +t_success_threshold() -> + ?_test(begin + Interval = couch_replicator_rate_limiter:success({"foo", get}), + ?assertEqual(0, Interval), + Interval = couch_replicator_rate_limiter:success({"foo", get}), + ?assertEqual(0, Interval) + end). + + +t_1_failure_2_successes() -> + ?_test(begin + couch_replicator_rate_limiter:failure({"foo", get}), + low_pass_filter_delay(), + Succ1 = couch_replicator_rate_limiter:success({"foo", get}), + ?assertEqual(20, Succ1), + low_pass_filter_delay(), + Succ2 = couch_replicator_rate_limiter:success({"foo", get}), + ?assertEqual(0, Succ2) + end). + + +low_pass_filter_delay() -> + timer:sleep(100). + + +setup() -> + {ok, Pid} = couch_replicator_rate_limiter:start_link(), + Pid. + + +teardown(Pid) -> + Ref = erlang:monitor(process, Pid), + unlink(Pid), + exit(Pid, kill), + receive + {'DOWN', Ref, process, Pid, _} -> + ok + end, + ok. |