Files
libucore/test/test_ratelimit.c
T
Nils O. Selåsdal 52eb710db7 Add rate limit test
2013-10-12 01:29:00 +02:00

149 lines
2.8 KiB
C

#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;
}