Skip to main content
Glama
pshempel

MCP Time Server Node

by pshempel
rateLimit.env.test.ts3.81 kB
import { SlidingWindowRateLimiter } from '../../src/utils/rateLimit'; describe('SlidingWindowRateLimiter Environment Variables', () => { // Save original env vars const originalRateLimit = process.env.RATE_LIMIT; const originalRateLimitWindow = process.env.RATE_LIMIT_WINDOW; afterEach(() => { // Restore original env vars if (originalRateLimit !== undefined) { process.env.RATE_LIMIT = originalRateLimit; } else { delete process.env.RATE_LIMIT; } if (originalRateLimitWindow !== undefined) { process.env.RATE_LIMIT_WINDOW = originalRateLimitWindow; } else { delete process.env.RATE_LIMIT_WINDOW; } }); describe('environment variable handling', () => { it('should use environment variables when no constructor params provided', () => { process.env.RATE_LIMIT = '200'; process.env.RATE_LIMIT_WINDOW = '120000'; const rateLimiter = new SlidingWindowRateLimiter(); const info = rateLimiter.getInfo(); expect(info.limit).toBe(200); expect(info.window).toBe(120000); }); it('should use defaults when environment variables are not set', () => { delete process.env.RATE_LIMIT; delete process.env.RATE_LIMIT_WINDOW; const rateLimiter = new SlidingWindowRateLimiter(); const info = rateLimiter.getInfo(); expect(info.limit).toBe(100); expect(info.window).toBe(60000); }); it('should prefer constructor parameters over environment variables', () => { process.env.RATE_LIMIT = '200'; process.env.RATE_LIMIT_WINDOW = '120000'; const rateLimiter = new SlidingWindowRateLimiter(50, 30000); const info = rateLimiter.getInfo(); expect(info.limit).toBe(50); expect(info.window).toBe(30000); }); it('should handle invalid environment variable values gracefully', () => { process.env.RATE_LIMIT = 'invalid'; process.env.RATE_LIMIT_WINDOW = 'notanumber'; const rateLimiter = new SlidingWindowRateLimiter(); const info = rateLimiter.getInfo(); // Should fall back to defaults when parsing fails expect(info.limit).toBe(100); expect(info.window).toBe(60000); }); it('should handle empty string environment variables', () => { process.env.RATE_LIMIT = ''; process.env.RATE_LIMIT_WINDOW = ''; const rateLimiter = new SlidingWindowRateLimiter(); const info = rateLimiter.getInfo(); // Empty strings should fall back to defaults expect(info.limit).toBe(100); expect(info.window).toBe(60000); }); it('should handle negative values in environment variables', () => { process.env.RATE_LIMIT = '-50'; process.env.RATE_LIMIT_WINDOW = '-30000'; const rateLimiter = new SlidingWindowRateLimiter(); const info = rateLimiter.getInfo(); // Negative values should be rejected and fall back to defaults expect(info.limit).toBe(100); expect(info.window).toBe(60000); }); it('should handle zero values in environment variables', () => { process.env.RATE_LIMIT = '0'; process.env.RATE_LIMIT_WINDOW = '0'; const rateLimiter = new SlidingWindowRateLimiter(); const info = rateLimiter.getInfo(); // Zero values should be rejected and fall back to defaults expect(info.limit).toBe(100); expect(info.window).toBe(60000); }); it('should handle floating point values in environment variables', () => { process.env.RATE_LIMIT = '100.5'; process.env.RATE_LIMIT_WINDOW = '60000.7'; const rateLimiter = new SlidingWindowRateLimiter(); const info = rateLimiter.getInfo(); // parseInt should truncate to integers expect(info.limit).toBe(100); expect(info.window).toBe(60000); }); }); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/pshempel/mcp-time-server-node'

If you have feedback or need assistance with the MCP directory API, please join our Discord server