Skip to main content
Glama
session-config.test.ts6.2 kB
import { describe, test, expect, beforeEach } from "bun:test"; import { getSessionConfig } from "../../../src/config/session-config.js"; describe("Session Configuration", () => { const originalEnv = process.env; beforeEach(() => { // Reset process.env for each test process.env = { ...originalEnv }; delete process.env.CLIENT_IDLE_TIMEOUT; delete process.env.CLIENT_MAX_LIFETIME; delete process.env.TRANSPORT_IDLE_TIMEOUT; delete process.env.TRANSPORT_MAX_LIFETIME; delete process.env.CLEANUP_INTERVAL; }); describe("Default Values", () => { test("should use default values when no env vars set", () => { const config = getSessionConfig(); expect(config.CLIENT_IDLE_TIMEOUT).toBe(600000); // 10 minutes expect(config.CLIENT_MAX_LIFETIME).toBe(3600000); // 1 hour expect(config.TRANSPORT_IDLE_TIMEOUT).toBe(900000); // 15 minutes expect(config.TRANSPORT_MAX_LIFETIME).toBe(7200000); // 2 hours expect(config.CLEANUP_INTERVAL).toBe(300000); // 5 minutes }); }); describe("Environment Variable Parsing", () => { test("should parse CLIENT_IDLE_TIMEOUT from env", () => { process.env.CLIENT_IDLE_TIMEOUT = "300000"; // 5 minutes const config = getSessionConfig(); expect(config.CLIENT_IDLE_TIMEOUT).toBe(300000); }); test("should parse CLIENT_MAX_LIFETIME from env", () => { process.env.CLIENT_MAX_LIFETIME = "1800000"; // 30 minutes const config = getSessionConfig(); expect(config.CLIENT_MAX_LIFETIME).toBe(1800000); }); test("should parse TRANSPORT_IDLE_TIMEOUT from env", () => { process.env.TRANSPORT_IDLE_TIMEOUT = "600000"; // 10 minutes const config = getSessionConfig(); expect(config.TRANSPORT_IDLE_TIMEOUT).toBe(600000); }); test("should parse TRANSPORT_MAX_LIFETIME from env", () => { process.env.TRANSPORT_MAX_LIFETIME = "3600000"; // 1 hour const config = getSessionConfig(); expect(config.TRANSPORT_MAX_LIFETIME).toBe(3600000); }); test("should parse CLEANUP_INTERVAL from env", () => { process.env.CLEANUP_INTERVAL = "180000"; // 3 minutes const config = getSessionConfig(); expect(config.CLEANUP_INTERVAL).toBe(180000); }); test("should parse all env vars together", () => { process.env.CLIENT_IDLE_TIMEOUT = "120000"; process.env.CLIENT_MAX_LIFETIME = "600000"; process.env.TRANSPORT_IDLE_TIMEOUT = "180000"; process.env.TRANSPORT_MAX_LIFETIME = "900000"; process.env.CLEANUP_INTERVAL = "60000"; const config = getSessionConfig(); expect(config.CLIENT_IDLE_TIMEOUT).toBe(120000); expect(config.CLIENT_MAX_LIFETIME).toBe(600000); expect(config.TRANSPORT_IDLE_TIMEOUT).toBe(180000); expect(config.TRANSPORT_MAX_LIFETIME).toBe(900000); expect(config.CLEANUP_INTERVAL).toBe(60000); }); }); describe("Validation", () => { test("should enforce minimum CLIENT_IDLE_TIMEOUT (1 minute)", () => { process.env.CLIENT_IDLE_TIMEOUT = "30000"; // 30 seconds expect(() => getSessionConfig()).toThrow(); }); test("should enforce minimum CLIENT_MAX_LIFETIME (5 minutes)", () => { process.env.CLIENT_MAX_LIFETIME = "120000"; // 2 minutes expect(() => getSessionConfig()).toThrow(); }); test("should enforce minimum TRANSPORT_IDLE_TIMEOUT (1 minute)", () => { process.env.TRANSPORT_IDLE_TIMEOUT = "45000"; // 45 seconds expect(() => getSessionConfig()).toThrow(); }); test("should enforce minimum TRANSPORT_MAX_LIFETIME (5 minutes)", () => { process.env.TRANSPORT_MAX_LIFETIME = "240000"; // 4 minutes expect(() => getSessionConfig()).toThrow(); }); test("should enforce minimum CLEANUP_INTERVAL (1 minute)", () => { process.env.CLEANUP_INTERVAL = "30000"; // 30 seconds expect(() => getSessionConfig()).toThrow(); }); test("should accept minimum valid values", () => { process.env.CLIENT_IDLE_TIMEOUT = "60000"; // 1 minute process.env.CLIENT_MAX_LIFETIME = "300000"; // 5 minutes process.env.TRANSPORT_IDLE_TIMEOUT = "60000"; // 1 minute process.env.TRANSPORT_MAX_LIFETIME = "300000"; // 5 minutes process.env.CLEANUP_INTERVAL = "60000"; // 1 minute const config = getSessionConfig(); expect(config.CLIENT_IDLE_TIMEOUT).toBe(60000); expect(config.CLIENT_MAX_LIFETIME).toBe(300000); expect(config.TRANSPORT_IDLE_TIMEOUT).toBe(60000); expect(config.TRANSPORT_MAX_LIFETIME).toBe(300000); expect(config.CLEANUP_INTERVAL).toBe(60000); }); }); describe("Type Coercion", () => { test("should convert string numbers to integers", () => { process.env.CLIENT_IDLE_TIMEOUT = "900000"; const config = getSessionConfig(); expect(typeof config.CLIENT_IDLE_TIMEOUT).toBe("number"); expect(config.CLIENT_IDLE_TIMEOUT).toBe(900000); }); test("should reject non-numeric strings", () => { process.env.CLIENT_IDLE_TIMEOUT = "not-a-number"; expect(() => getSessionConfig()).toThrow(); }); test("should reject decimal numbers", () => { process.env.CLIENT_IDLE_TIMEOUT = "600000.5"; const config = getSessionConfig(); // parseInt truncates decimals, so this becomes 600000 expect(config.CLIENT_IDLE_TIMEOUT).toBe(600000); }); }); describe("Edge Cases", () => { test("should handle very large timeout values", () => { process.env.CLIENT_IDLE_TIMEOUT = "86400000"; // 24 hours process.env.CLIENT_MAX_LIFETIME = "604800000"; // 7 days const config = getSessionConfig(); expect(config.CLIENT_IDLE_TIMEOUT).toBe(86400000); expect(config.CLIENT_MAX_LIFETIME).toBe(604800000); }); test("should handle mixed set/unset environment variables", () => { process.env.CLIENT_IDLE_TIMEOUT = "180000"; // Other vars use defaults const config = getSessionConfig(); expect(config.CLIENT_IDLE_TIMEOUT).toBe(180000); // Custom expect(config.CLIENT_MAX_LIFETIME).toBe(3600000); // Default expect(config.TRANSPORT_IDLE_TIMEOUT).toBe(900000); // Default }); }); });

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/robertn702/mcp-sunsama'

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