Skip to main content
Glama
fixtures.ts10.4 kB
import { randomUUID } from 'crypto'; // User fixtures export const userFixtures = { validUser: { id: 'user-123', email: 'user@example.com', username: 'testuser', firstName: 'Test', lastName: 'User', roles: ['user'], permissions: ['basic', 'read'], mfaEnabled: false, mfaVerified: false, createdAt: new Date('2023-01-01T00:00:00Z'), updatedAt: new Date('2023-01-01T00:00:00Z'), }, adminUser: { id: 'admin-123', email: 'admin@example.com', username: 'admin', firstName: 'Admin', lastName: 'User', roles: ['admin', 'user'], permissions: ['*'], mfaEnabled: true, mfaVerified: true, createdAt: new Date('2023-01-01T00:00:00Z'), updatedAt: new Date('2023-01-01T00:00:00Z'), }, mfaUser: { id: 'mfa-123', email: 'mfa@example.com', username: 'mfauser', firstName: 'MFA', lastName: 'User', roles: ['user'], permissions: ['basic', 'read', 'write'], mfaEnabled: true, mfaVerified: false, mfaSecret: 'JBSWY3DPEHPK3PXP', createdAt: new Date('2023-01-01T00:00:00Z'), updatedAt: new Date('2023-01-01T00:00:00Z'), }, }; // Session fixtures export const sessionFixtures = { validSession: { id: 'session-123', userId: 'user-123', createdAt: new Date('2023-01-01T00:00:00Z'), lastActivity: new Date(), ipAddress: '192.168.1.100', userAgent: 'Mozilla/5.0 (Test Browser)', }, expiredSession: { id: 'session-expired', userId: 'user-123', createdAt: new Date('2023-01-01T00:00:00Z'), lastActivity: new Date('2023-01-01T01:00:00Z'), ipAddress: '192.168.1.100', userAgent: 'Mozilla/5.0 (Test Browser)', }, suspiciousSession: { id: 'session-suspicious', userId: 'user-123', createdAt: new Date(), lastActivity: new Date(), ipAddress: '10.0.0.1', userAgent: 'sqlmap/1.0 (malicious scanner)', }, }; // JWT payload fixtures export const jwtFixtures = { validPayload: { sub: 'user-123', email: 'user@example.com', roles: ['user'], permissions: ['basic', 'read'], sessionId: 'session-123', mfaVerified: false, iat: Math.floor(Date.now() / 1000), exp: Math.floor(Date.now() / 1000) + 3600, iss: 'secure-mcp-server', aud: 'secure-mcp-client', jti: randomUUID(), }, expiredPayload: { sub: 'user-123', email: 'user@example.com', roles: ['user'], permissions: ['basic'], sessionId: 'session-123', mfaVerified: false, iat: Math.floor(Date.now() / 1000) - 3600, exp: Math.floor(Date.now() / 1000) - 1800, iss: 'secure-mcp-server', aud: 'secure-mcp-client', jti: randomUUID(), }, adminPayload: { sub: 'admin-123', email: 'admin@example.com', roles: ['admin', 'user'], permissions: ['*'], sessionId: 'session-admin', mfaVerified: true, iat: Math.floor(Date.now() / 1000), exp: Math.floor(Date.now() / 1000) + 3600, iss: 'secure-mcp-server', aud: 'secure-mcp-client', jti: randomUUID(), }, }; // MCP message fixtures export const mcpFixtures = { initializeRequest: { jsonrpc: '2.0', id: 1, method: 'initialize', params: { protocolVersion: '2024-11-05', capabilities: { tools: {}, resources: {}, }, clientInfo: { name: 'test-client', version: '1.0.0', }, }, }, initializeResponse: { jsonrpc: '2.0', id: 1, result: { protocolVersion: '2024-11-05', capabilities: { tools: { listChanged: true }, resources: { listChanged: true, subscribe: true }, logging: {}, }, serverInfo: { name: 'secure-mcp-server', version: '1.0.0', }, }, }, listToolsRequest: { jsonrpc: '2.0', id: 2, method: 'tools/list', params: {}, }, listToolsResponse: { jsonrpc: '2.0', id: 2, result: { tools: [ { name: 'echo', description: 'Echo back the input text', inputSchema: { type: 'object', properties: { text: { type: 'string' }, }, required: ['text'], }, }, ], }, }, callToolRequest: { jsonrpc: '2.0', id: 3, method: 'tools/call', params: { name: 'echo', arguments: { text: 'Hello, World!', }, }, }, callToolResponse: { jsonrpc: '2.0', id: 3, result: { content: [ { type: 'text', text: 'Echo: Hello, World!', }, ], }, }, errorResponse: { jsonrpc: '2.0', id: null, error: { code: -32600, message: 'Invalid Request', }, }, }; // Security test fixtures export const securityFixtures = { maliciousInputs: { sqlInjection: [ "'; DROP TABLE users; --", "' OR '1'='1", "1' UNION SELECT * FROM sensitive_data --", "'; EXEC xp_cmdshell('dir'); --", ], xssPayloads: [ '<script>alert("XSS")</script>', '<img src=x onerror=alert("XSS")>', 'javascript:alert("XSS")', '<svg onload=alert("XSS")>', '<iframe src="javascript:alert(XSS)">', ], commandInjection: [ '; rm -rf /', '| cat /etc/passwd', '&& shutdown -h now', '`whoami`', '$(<script>alert(1)</script>)', ], pathTraversal: [ '../../../etc/passwd', '..\\..\\..\\windows\\system32\\config\\sam', '....//....//....//etc/passwd', '%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd', ], noSqlInjection: [ '{"$where": "this.password.match(/.*/)"}', '{"$ne": null}', '{"$regex": ".*"}', '{"$gt": ""}', '{"$or": [{"password": {"$regex": ".*"}}, {"username": "admin"}]}', ], headerInjection: [ 'Value\r\nX-Injected-Header: malicious', 'Value\nSet-Cookie: evil=true', 'Value\r\n\r\n<script>alert("XSS")</script>', ], }, validSecurityHeaders: { 'x-content-type-options': 'nosniff', 'x-frame-options': 'DENY', 'x-xss-protection': '1; mode=block', 'referrer-policy': 'strict-origin-when-cross-origin', 'content-security-policy': "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline';", 'strict-transport-security': 'max-age=31536000; includeSubDomains; preload', }, suspiciousUserAgents: [ 'sqlmap/1.0', 'Nikto/2.1.6', 'DirBuster-1.0-RC1', 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 1.1.4322) Burp', 'OWASP ZAP 2.10.0', ], maliciousIPs: [ '192.168.1.666', // Invalid IP format '10.0.0.1', // Common internal IP that might be suspicious '169.254.1.1', // Link-local address '127.0.0.2', // Suspicious localhost variation ], }; // Performance test fixtures export const performanceFixtures = { loadTestConfig: { concurrent: 100, duration: 30000, // 30 seconds rampUp: 5000, // 5 seconds errorThreshold: 0.01, // 1% error rate }, stressTestConfig: { concurrent: 500, duration: 60000, // 1 minute rampUp: 10000, // 10 seconds errorThreshold: 0.05, // 5% error rate }, spikeTestConfig: { baseLoad: 10, spikeLoad: 1000, spikeDuration: 5000, // 5 seconds totalDuration: 60000, // 1 minute }, performanceThresholds: { responseTime: { p50: 100, // 50th percentile < 100ms p95: 500, // 95th percentile < 500ms p99: 1000, // 99th percentile < 1s }, throughput: { minimum: 1000, // At least 1000 requests/second }, errorRate: { maximum: 0.01, // Max 1% error rate }, }, }; // Database fixtures export const databaseFixtures = { users: [ userFixtures.validUser, userFixtures.adminUser, userFixtures.mfaUser, ], sessions: [ sessionFixtures.validSession, sessionFixtures.expiredSession, sessionFixtures.suspiciousSession, ], auditLogs: [ { id: 'audit-1', userId: 'user-123', action: 'LOGIN', resource: 'auth', details: { ip: '192.168.1.100' }, timestamp: new Date('2023-01-01T00:00:00Z'), }, { id: 'audit-2', userId: 'admin-123', action: 'CREATE_USER', resource: 'user', details: { targetUserId: 'user-123' }, timestamp: new Date('2023-01-01T00:05:00Z'), }, ], }; // WebSocket fixtures export const websocketFixtures = { connectionInfo: { id: 'conn-123', userId: 'user-123', sessionId: 'session-123', ipAddress: '192.168.1.100', userAgent: 'Mozilla/5.0 (Test Browser)', connectedAt: new Date(), }, handshakeData: { address: '192.168.1.100', headers: { 'user-agent': 'Mozilla/5.0 (Test Browser)', 'authorization': 'Bearer valid-jwt-token', }, auth: { token: 'valid-jwt-token', }, }, messages: { ping: { jsonrpc: '2.0', method: 'ping', id: 'ping-1', }, pong: { jsonrpc: '2.0', id: 'ping-1', result: { status: 'pong', timestamp: new Date().toISOString(), }, }, }, }; // Configuration fixtures export const configFixtures = { testConfig: { env: 'test', server: { port: 3001, host: '127.0.0.1', }, database: { url: 'postgresql://test:test@localhost:5432/secure_mcp_test', ssl: false, pool: { min: 1, max: 5 }, timeout: 5000, }, redis: { url: 'redis://localhost:6379/1', db: 1, connectTimeout: 5000, commandTimeout: 2000, }, jwt: { secret: 'test-jwt-secret-must-be-at-least-32-characters-long', accessExpiresIn: '15m', refreshExpiresIn: '7d', issuer: 'secure-mcp-server', audience: 'secure-mcp-client', }, security: { forceHttps: false, hstsMaxAge: 31536000, frameOptions: 'DENY', }, }, productionConfig: { env: 'production', server: { port: 443, host: '0.0.0.0', }, security: { forceHttps: true, hstsMaxAge: 31536000, frameOptions: 'DENY', }, }, }; // Export all fixtures export const fixtures = { users: userFixtures, sessions: sessionFixtures, jwt: jwtFixtures, mcp: mcpFixtures, security: securityFixtures, performance: performanceFixtures, database: databaseFixtures, websocket: websocketFixtures, config: configFixtures, };

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/perfecxion-ai/secure-mcp'

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