From 52eb710db7d3ab18d5cd3da7d83612529391e31f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nils=20O=2E=20Sel=C3=A5sdal?= Date: Sat, 12 Oct 2013 01:29:00 +0200 Subject: [PATCH] Add rate limit test --- test/test_ratelimit.c | 148 ++++++++++++++++++++++++++++++++++++++++++ test/test_runner.c | 2 + 2 files changed, 150 insertions(+) create mode 100644 test/test_ratelimit.c diff --git a/test/test_ratelimit.c b/test/test_ratelimit.c new file mode 100644 index 0000000..072c9ea --- /dev/null +++ b/test/test_ratelimit.c @@ -0,0 +1,148 @@ +#include +#include + + +START_TEST (test_ratelimit_1) + struct RateLimit r; + long now = 10; + int i; + + uc_ratelimit_init(&r, 30, 2, now); + for (i = 0; i < 30; i++) { + fail_if(!uc_ratelimit_allow(&r, now)); + } + fail_if(uc_ratelimit_allow(&r, now)); +END_TEST + +START_TEST (test_ratelimit_2) + struct RateLimit r; + long now = 10; + + uc_ratelimit_init(&r, 1, 1, now); + fail_if(!uc_ratelimit_allow(&r, now)); + fail_if(uc_ratelimit_allow(&r, now)); + + now += 1; + + fail_if(!uc_ratelimit_allow(&r, now)); + fail_if(uc_ratelimit_allow(&r, now)); + +END_TEST + +START_TEST (test_ratelimit_3) + struct RateLimit r; + long now = 10; + int i; + + uc_ratelimit_init(&r, 10, 5, now); + + for (i = 0; i < 10; i++) { + fail_if(!uc_ratelimit_allow(&r, now)); + } + + now += 1; + + for (i = 0; i < 2; i++) { + fail_if(!uc_ratelimit_allow(&r, now)); + } + + fail_if(uc_ratelimit_allow(&r, now)); + + now += 1; + + for (i = 0; i < 2; i++) { + fail_if(!uc_ratelimit_allow(&r, now)); + } + fail_if(uc_ratelimit_allow(&r, now)); + + now += 1; + + for (i = 0; i < 2; i++) { + fail_if(!uc_ratelimit_allow(&r, now)); + } + fail_if(uc_ratelimit_allow(&r, now)); + + +END_TEST + +START_TEST (test_ratelimit_4) + struct RateLimit r; + long now = 10; + int i; + + uc_ratelimit_init(&r, 10, 5, now); + + for (i = 0; i < 10; i++) { + fail_if(!uc_ratelimit_allow(&r, now)); + } + + + fail_if(uc_ratelimit_allow(&r, now)); + + uc_ratelimit_reset(&r, now); + + for (i = 0; i < 10; i++) { + fail_if(!uc_ratelimit_allow(&r, now)); + } + fail_if(uc_ratelimit_allow(&r, now)); + +END_TEST + +START_TEST (test_ratelimit_5) + struct RateLimit r; + long now = 1400000000; + + uc_ratelimit_init(&r, 1, 10, now); + + fail_if(!uc_ratelimit_allow(&r, now)); + fail_if(uc_ratelimit_allow(&r, now)); + + now += 5; + + fail_if(uc_ratelimit_allow(&r, now)); + + now += 5; + + fail_if(!uc_ratelimit_allow(&r, now)); + fail_if(uc_ratelimit_allow(&r, now)); + + now += 200; + + fail_if(!uc_ratelimit_allow(&r, now)); + fail_if(uc_ratelimit_allow(&r, now)); + +END_TEST + +START_TEST (test_ratelimit_time_backward) + struct RateLimit r; + long now = 1400000000; + + uc_ratelimit_init(&r, 1, 10, now); + + fail_if(!uc_ratelimit_allow(&r, now)); + fail_if(uc_ratelimit_allow(&r, now)); + + now -= 5; + + fail_if(uc_ratelimit_allow(&r, now)); + +END_TEST + + +Suite *ratelimit_suite(void) +{ + Suite *s = suite_create("ratelimit"); + TCase *tc = tcase_create("ratelimit tests"); + + tcase_add_test(tc, test_ratelimit_1); + tcase_add_test(tc, test_ratelimit_2); + tcase_add_test(tc, test_ratelimit_3); + tcase_add_test(tc, test_ratelimit_4); + tcase_add_test(tc, test_ratelimit_5); + tcase_add_test(tc, test_ratelimit_time_backward); + + suite_add_tcase(s, tc); + + return s; +} + diff --git a/test/test_runner.c b/test/test_runner.c index 73cf4c1..a21b4e9 100644 --- a/test/test_runner.c +++ b/test/test_runner.c @@ -24,6 +24,7 @@ extern Suite *human_bytesz_suite(void); extern Suite *dbuf_suite(void); extern Suite *sprintb_suite(void); extern Suite *strv_suite(void); +extern Suite *ratelimit_suite(void); static suite_func suites[] = { bitvec_suite, @@ -42,6 +43,7 @@ static suite_func suites[] = { dbuf_suite, sprintb_suite, strv_suite, + ratelimit_suite, clock_suite, threadqueue_suite };