forked from JhaSourav07/commitpulse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathrate-limit.massive-scaling.test.ts
More file actions
148 lines (122 loc) · 4.88 KB
/
Copy pathrate-limit.massive-scaling.test.ts
File metadata and controls
148 lines (122 loc) · 4.88 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
import { describe, it, expect, beforeEach } from 'vitest';
import { rateLimit, RateLimiter } from './rate-limit';
describe('rate-limit massive data sets and extreme high bounds scaling', () => {
beforeEach(() => {
delete process.env.KV_REST_API_URL;
delete process.env.KV_REST_API_TOKEN;
});
it('handles 5,000 unique IP addresses without memory overflow or degradation', async () => {
const limiter = new RateLimiter(10, 60000, 10000);
const startTime = performance.now();
for (let i = 0; i < 5000; i++) {
const ip = `10.${i >> 8}.${i & 255}.1`;
const result = await limiter.checkWithResult(ip);
expect(result.success).toBe(true);
expect(result.remaining).toBe(9);
}
const endTime = performance.now();
const executionTime = endTime - startTime;
expect(executionTime).toBeLessThan(2000);
});
it('correctly exhausts a high-bound limit of 10,000 requests from a single IP', async () => {
const ip = '192.168.1.1';
const limit = 10000;
const windowMs = 60000;
const startTime = performance.now();
for (let i = 0; i < 10000; i++) {
const result = await rateLimit(ip, limit, windowMs);
expect(result.success).toBe(true);
if (i === 0 || i === 4999 || i === 9999) {
expect(result.remaining).toBe(limit - (i + 1));
}
}
const resultExhausted = await rateLimit(ip, limit, windowMs);
expect(resultExhausted.success).toBe(false);
expect(resultExhausted.remaining).toBe(0);
const endTime = performance.now();
const executionTime = endTime - startTime;
expect(executionTime).toBeLessThan(3000);
}, 15000);
it('maintains valid RateLimitResult structure across 100k unique contributor IPs', async () => {
const startTime = performance.now();
for (let i = 0; i < 100000; i++) {
const ip = `10.${(i >> 16) & 255}.${(i >> 8) & 255}.${i & 255}`;
const result = await rateLimit(ip, 60, 60000);
if (i % 1000 === 0) {
expect(typeof result.success).toBe('boolean');
expect(result.limit).toBe(60);
expect(result.remaining).toBeGreaterThanOrEqual(0);
expect(result.reset).toBeGreaterThan(Date.now() - 1000);
expect(result.remaining).toBeLessThanOrEqual(result.limit);
}
}
const endTime = performance.now();
const executionTime = endTime - startTime;
expect(executionTime).toBeLessThan(15000);
}, 30000);
it('keeps reset timestamps within safe numeric bounds under extreme window sizes', async () => {
const extremeWindows = [1, 86400000, 2147483647];
const ip = '198.51.100.1';
for (const windowMs of extremeWindows) {
const result = await rateLimit(ip, 5, windowMs);
expect(Number.isFinite(result.reset)).toBe(true);
expect(result.reset).toBeGreaterThan(Date.now() - 1000);
expect(result.reset).toBeLessThan(Date.now() + windowMs + 1000);
expect(result.remaining).toBeGreaterThanOrEqual(0);
expect(result.remaining).toBeLessThanOrEqual(result.limit);
}
});
it('preserves correct success/failure distribution across 50k IPs with allowlist and blocklist', async () => {
const limiter = new RateLimiter(2, 60000);
const startTime = performance.now();
for (let i = 0; i < 1000; i++) {
limiter.allow(`ip-${i}`);
}
for (let i = 1000; i < 2000; i++) {
limiter.block(`ip-${i}`);
}
let successCount = 0;
let failureCount = 0;
for (let i = 0; i < 50000; i++) {
const ip = `ip-${i}`;
const result = await limiter.checkWithResult(ip);
if (i < 1000) {
expect(result.success).toBe(true);
expect(result.remaining).toBe(2);
} else if (i < 2000) {
expect(result.success).toBe(false);
expect(result.remaining).toBe(0);
} else {
if (i === 2000) {
expect(result.success).toBe(true);
expect(result.remaining).toBe(1);
const result2 = await limiter.checkWithResult(ip);
expect(result2.success).toBe(true);
expect(result2.remaining).toBe(0);
const result3 = await limiter.checkWithResult(ip);
expect(result3.success).toBe(false);
expect(result3.remaining).toBe(0);
if (result2.success) successCount++;
else failureCount++;
if (result3.success) successCount++;
else failureCount++;
} else {
expect(result.success).toBe(true);
expect(result.remaining).toBe(1);
}
}
if (result.success) {
successCount++;
} else {
failureCount++;
}
expect(result.remaining).toBeGreaterThanOrEqual(0);
expect(result.remaining).toBeLessThanOrEqual(result.limit);
}
expect(successCount).toBeGreaterThan(0);
expect(failureCount).toBeGreaterThanOrEqual(0);
const endTime = performance.now();
const executionTime = endTime - startTime;
expect(executionTime).toBeLessThan(10000);
}, 20000);
});