import { assertEquals } from "@std/assert"; import { config } from "../config.ts"; Deno.test("RateLimiter - allows first request", () => { // Create a new rate limiter instance for testing class TestRateLimiter { private storage = new Map(); isRateLimited(ip: string): boolean { const now = Date.now(); const entry = this.storage.get(ip); if (!entry || now > entry.resetTime) { this.storage.set(ip, { count: 1, resetTime: now + config.rateLimit.windowMs, }); return false; } if (entry.count >= config.rateLimit.maxUploads) { return true; } entry.count++; return false; } } const limiter = new TestRateLimiter(); assertEquals(limiter.isRateLimited("127.0.0.1"), false); }); Deno.test("RateLimiter - allows requests within limit", () => { class TestRateLimiter { private storage = new Map(); isRateLimited(ip: string): boolean { const now = Date.now(); const entry = this.storage.get(ip); if (!entry || now > entry.resetTime) { this.storage.set(ip, { count: 1, resetTime: now + config.rateLimit.windowMs, }); return false; } if (entry.count >= config.rateLimit.maxUploads) { return true; } entry.count++; return false; } } const limiter = new TestRateLimiter(); const ip = "192.168.1.1"; // Make requests up to the limit for (let i = 0; i < config.rateLimit.maxUploads; i++) { assertEquals(limiter.isRateLimited(ip), false, `Request ${i + 1} should be allowed`); } // Next request should be blocked assertEquals(limiter.isRateLimited(ip), true, "Request beyond limit should be blocked"); }); Deno.test("RateLimiter - different IPs have separate limits", () => { class TestRateLimiter { private storage = new Map(); isRateLimited(ip: string): boolean { const now = Date.now(); const entry = this.storage.get(ip); if (!entry || now > entry.resetTime) { this.storage.set(ip, { count: 1, resetTime: now + config.rateLimit.windowMs, }); return false; } if (entry.count >= config.rateLimit.maxUploads) { return true; } entry.count++; return false; } } const limiter = new TestRateLimiter(); // Max out first IP for (let i = 0; i < config.rateLimit.maxUploads; i++) { limiter.isRateLimited("10.0.0.1"); } assertEquals(limiter.isRateLimited("10.0.0.1"), true); // Second IP should still be allowed assertEquals(limiter.isRateLimited("10.0.0.2"), false); });