161 lines
2.8 KiB
C
161 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);
|
|
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;
|
|
}
|
|
|