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;
|
||||||
|
}
|
||||||
|
|
||||||
@@ -24,6 +24,7 @@ extern Suite *human_bytesz_suite(void);
|
|||||||
extern Suite *dbuf_suite(void);
|
extern Suite *dbuf_suite(void);
|
||||||
extern Suite *sprintb_suite(void);
|
extern Suite *sprintb_suite(void);
|
||||||
extern Suite *strv_suite(void);
|
extern Suite *strv_suite(void);
|
||||||
|
extern Suite *ratelimit_suite(void);
|
||||||
|
|
||||||
static suite_func suites[] = {
|
static suite_func suites[] = {
|
||||||
bitvec_suite,
|
bitvec_suite,
|
||||||
@@ -42,6 +43,7 @@ static suite_func suites[] = {
|
|||||||
dbuf_suite,
|
dbuf_suite,
|
||||||
sprintb_suite,
|
sprintb_suite,
|
||||||
strv_suite,
|
strv_suite,
|
||||||
|
ratelimit_suite,
|
||||||
clock_suite,
|
clock_suite,
|
||||||
threadqueue_suite
|
threadqueue_suite
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user