Files
libucore/test/test_ratelimit.c
2025-07-18 22:45:08 +02:00

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