Skip to main content
Glama
security-scanner-pagination-test.js•6.63 kB
/** * Test Enhanced scan_security_vulnerabilities with Pagination */ import { handleSecurityScanner } from '../lib/tools/security-scanner.js'; async function testSecurityScannerPagination() { console.log('šŸ”’ Testing Enhanced scan_security_vulnerabilities with Pagination'); console.log('================================================================'); // Test 1: Basic pagination functionality console.log('āœ“ Testing basic pagination functionality...'); try { const result1 = await handleSecurityScanner({ projectPath: '.', format: 'detailed', limit: 5, offset: 0, sortBy: 'severity', sortOrder: 'desc' }); console.log('āœ… Basic pagination test completed'); console.log(' - Response type:', typeof result1.content[0].text); const output = result1.content[0].text; console.log(' - Contains pagination info:', output.includes('šŸ“„ Results:')); console.log(' - Contains sorting info:', output.includes('šŸ”„ Sorted by:')); } catch (error) { console.log('āŒ Basic pagination test failed:', error.message); } // Test 2: Different sorting options console.log('āœ“ Testing different sorting options...'); try { const sortTests = [ { sortBy: 'severity', sortOrder: 'desc' }, { sortBy: 'package', sortOrder: 'asc' }, { sortBy: 'title', sortOrder: 'asc' } ]; for (const sortTest of sortTests) { const result = await handleSecurityScanner({ projectPath: '.', format: 'detailed', limit: 3, ...sortTest }); const output = result.content[0].text; const hasSortInfo = output.includes(`šŸ”„ Sorted by: ${sortTest.sortBy} (${sortTest.sortOrder})`); console.log(`āœ… ${sortTest.sortBy} ${sortTest.sortOrder} sorting: ${hasSortInfo ? 'included' : 'missing'}`); } } catch (error) { console.log('āŒ Sorting options test failed:', error.message); } // Test 3: Pagination navigation console.log('āœ“ Testing pagination navigation...'); try { // Test first page const page1 = await handleSecurityScanner({ projectPath: '.', limit: 2, offset: 0, sortBy: 'severity' }); // Test second page const page2 = await handleSecurityScanner({ projectPath: '.', limit: 2, offset: 2, sortBy: 'severity' }); const output1 = page1.content[0].text; const output2 = page2.content[0].text; console.log('āœ… Pagination navigation test completed'); console.log(' - Page 1 has pagination:', output1.includes('šŸ“„ Pagination:')); console.log(' - Page 2 has pagination:', output2.includes('šŸ“„ Pagination:')); console.log(' - Page 1 has next nav:', output1.includes('→ Next:')); console.log(' - Page 2 has prev nav:', output2.includes('← Previous:')); } catch (error) { console.log('āŒ Pagination navigation test failed:', error.message); } // Test 4: Limit boundary testing console.log('āœ“ Testing limit boundary conditions...'); try { const limits = [1, 10, 50, 100]; for (const limit of limits) { const result = await handleSecurityScanner({ projectPath: '.', limit, offset: 0, format: 'summary' }); console.log(`āœ… Limit ${limit}: handled successfully`); } } catch (error) { console.log('āŒ Limit boundary test failed:', error.message); } // Test 5: Edge cases console.log('āœ“ Testing edge cases...'); try { // Test with high offset (beyond available data) const highOffsetResult = await handleSecurityScanner({ projectPath: '.', limit: 10, offset: 1000, sortBy: 'severity' }); console.log('āœ… High offset test completed'); // Test with zero limit (should use default) const zeroLimitResult = await handleSecurityScanner({ projectPath: '.', limit: 0, // Should be handled gracefully offset: 0 }); console.log('āœ… Zero limit test completed'); } catch (error) { console.log('āŒ Edge cases test failed:', error.message); } // Test 6: Format compatibility console.log('āœ“ Testing format compatibility...'); try { const formats = ['summary', 'detailed']; for (const format of formats) { const result = await handleSecurityScanner({ projectPath: '.', format, limit: 5, offset: 0, sortBy: 'severity' }); const output = result.content[0].text; console.log(`āœ… Format ${format}: contains scan results header:`, output.includes('šŸ”’ Security Vulnerability Scan Results')); } } catch (error) { console.log('āŒ Format compatibility test failed:', error.message); } console.log('āœ… Enhanced scan_security_vulnerabilities pagination testing completed'); } async function testSecurityScannerPerformance() { console.log('\n⚔ Testing scan_security_vulnerabilities Performance'); console.log('=================================================='); try { console.log('āœ“ Testing performance with different configurations...'); const configs = [ { name: 'Small page', limit: 5, offset: 0 }, { name: 'Medium page', limit: 20, offset: 0 }, { name: 'Large page', limit: 50, offset: 0 } ]; for (const config of configs) { const startTime = Date.now(); await handleSecurityScanner({ projectPath: '.', format: 'detailed', sortBy: 'severity', ...config }); const endTime = Date.now(); console.log(`āœ… ${config.name}: ${endTime - startTime}ms`); } } catch (error) { console.log('āŒ Performance test failed:', error.message); } } async function runAllSecurityScannerTests() { try { await testSecurityScannerPagination(); await testSecurityScannerPerformance(); console.log('\nšŸ“Š Enhanced scan_security_vulnerabilities Test Summary:'); console.log('āœ… All security scanner pagination tests completed successfully'); console.log('šŸŽ‰ Enhanced pagination and sorting for security scans is fully functional!'); return true; } catch (error) { console.error('āŒ Security scanner pagination tests failed:', error); console.error(error.stack); return false; } } // Run tests if called directly if (import.meta.url === `file://${process.argv[1]}`) { runAllSecurityScannerTests().then(success => { process.exit(success ? 0 : 1); }); } export { runAllSecurityScannerTests };

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/moikas-code/moidvk'

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