Add rate limit test
This commit is contained in:
@@ -0,0 +1,148 @@
|
||||
#include <check.h>
|
||||
#include <ucore/rate_limit.h>
|
||||
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user