#include #include "ucore/rate_limit.h" START_TEST (test_ratelimit_1) { struct RateLimit r; long now = 10; int i; uc_ratelimit_init(&r, 30, 2); 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); 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); 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); 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); 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); 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; }