test: Add minimal test coverage for CLI transport options
- Add tests for config files with different transport types (stdio, sse, streamable-http) - Add test for backward compatibility with configs missing type field - Verify transport and serverUrl options are correctly parsed from config files - All 36 tests pass
This commit is contained in:
parent
acf6c1e118
commit
1d89d750e0
1 changed files with 135 additions and 6 deletions
|
|
@ -120,6 +120,85 @@ try {
|
||||||
const invalidConfigPath = path.join(TEMP_DIR, "invalid-config.json");
|
const invalidConfigPath = path.join(TEMP_DIR, "invalid-config.json");
|
||||||
fs.writeFileSync(invalidConfigPath, '{\n "mcpServers": {\n "invalid": {');
|
fs.writeFileSync(invalidConfigPath, '{\n "mcpServers": {\n "invalid": {');
|
||||||
|
|
||||||
|
// Create config files with different transport types for testing
|
||||||
|
const sseConfigPath = path.join(TEMP_DIR, "sse-config.json");
|
||||||
|
fs.writeFileSync(
|
||||||
|
sseConfigPath,
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
mcpServers: {
|
||||||
|
"test-sse": {
|
||||||
|
type: "sse",
|
||||||
|
url: "http://localhost:3000/sse",
|
||||||
|
note: "Test SSE server",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
const httpConfigPath = path.join(TEMP_DIR, "http-config.json");
|
||||||
|
fs.writeFileSync(
|
||||||
|
httpConfigPath,
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
mcpServers: {
|
||||||
|
"test-http": {
|
||||||
|
type: "streamable-http",
|
||||||
|
url: "http://localhost:3000/mcp",
|
||||||
|
note: "Test HTTP server",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
const stdioConfigPath = path.join(TEMP_DIR, "stdio-config.json");
|
||||||
|
fs.writeFileSync(
|
||||||
|
stdioConfigPath,
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
mcpServers: {
|
||||||
|
"test-stdio": {
|
||||||
|
type: "stdio",
|
||||||
|
command: "npx",
|
||||||
|
args: ["@modelcontextprotocol/server-everything"],
|
||||||
|
env: {
|
||||||
|
TEST_ENV: "test-value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
|
// Config without type field (backward compatibility)
|
||||||
|
const legacyConfigPath = path.join(TEMP_DIR, "legacy-config.json");
|
||||||
|
fs.writeFileSync(
|
||||||
|
legacyConfigPath,
|
||||||
|
JSON.stringify(
|
||||||
|
{
|
||||||
|
mcpServers: {
|
||||||
|
"test-legacy": {
|
||||||
|
command: "npx",
|
||||||
|
args: ["@modelcontextprotocol/server-everything"],
|
||||||
|
env: {
|
||||||
|
LEGACY_ENV: "legacy-value",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
null,
|
||||||
|
2,
|
||||||
|
),
|
||||||
|
);
|
||||||
|
|
||||||
// Function to run a basic test
|
// Function to run a basic test
|
||||||
async function runBasicTest(testName, ...args) {
|
async function runBasicTest(testName, ...args) {
|
||||||
const outputFile = path.join(
|
const outputFile = path.join(
|
||||||
|
|
@ -649,6 +728,56 @@ async function runTests() {
|
||||||
"debug",
|
"debug",
|
||||||
);
|
);
|
||||||
|
|
||||||
|
console.log(
|
||||||
|
`\n${colors.YELLOW}=== Running Config Transport Type Tests ===${colors.NC}`,
|
||||||
|
);
|
||||||
|
|
||||||
|
// Test 25: Config with stdio transport type
|
||||||
|
await runBasicTest(
|
||||||
|
"config_stdio_type",
|
||||||
|
"--config",
|
||||||
|
stdioConfigPath,
|
||||||
|
"--server",
|
||||||
|
"test-stdio",
|
||||||
|
"--cli",
|
||||||
|
"--method",
|
||||||
|
"tools/list",
|
||||||
|
);
|
||||||
|
|
||||||
|
// Test 26: Config with SSE transport type (should pass transport to client)
|
||||||
|
await runBasicTest(
|
||||||
|
"config_sse_type",
|
||||||
|
"--config",
|
||||||
|
sseConfigPath,
|
||||||
|
"--server",
|
||||||
|
"test-sse",
|
||||||
|
"echo",
|
||||||
|
"test",
|
||||||
|
);
|
||||||
|
|
||||||
|
// Test 27: Config with streamable-http transport type
|
||||||
|
await runBasicTest(
|
||||||
|
"config_http_type",
|
||||||
|
"--config",
|
||||||
|
httpConfigPath,
|
||||||
|
"--server",
|
||||||
|
"test-http",
|
||||||
|
"echo",
|
||||||
|
"test",
|
||||||
|
);
|
||||||
|
|
||||||
|
// Test 28: Legacy config without type field (backward compatibility)
|
||||||
|
await runBasicTest(
|
||||||
|
"config_legacy_no_type",
|
||||||
|
"--config",
|
||||||
|
legacyConfigPath,
|
||||||
|
"--server",
|
||||||
|
"test-legacy",
|
||||||
|
"--cli",
|
||||||
|
"--method",
|
||||||
|
"tools/list",
|
||||||
|
);
|
||||||
|
|
||||||
console.log(
|
console.log(
|
||||||
`\n${colors.YELLOW}=== Running HTTP Transport Tests ===${colors.NC}`,
|
`\n${colors.YELLOW}=== Running HTTP Transport Tests ===${colors.NC}`,
|
||||||
);
|
);
|
||||||
|
|
@ -668,7 +797,7 @@ async function runTests() {
|
||||||
|
|
||||||
await new Promise((resolve) => setTimeout(resolve, 3000));
|
await new Promise((resolve) => setTimeout(resolve, 3000));
|
||||||
|
|
||||||
// Test 25: HTTP transport inferred from URL ending with /mcp
|
// Test 29: HTTP transport inferred from URL ending with /mcp
|
||||||
await runBasicTest(
|
await runBasicTest(
|
||||||
"http_transport_inferred",
|
"http_transport_inferred",
|
||||||
"http://127.0.0.1:3001/mcp",
|
"http://127.0.0.1:3001/mcp",
|
||||||
|
|
@ -677,7 +806,7 @@ async function runTests() {
|
||||||
"tools/list",
|
"tools/list",
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test 26: HTTP transport with explicit --transport http flag
|
// Test 30: HTTP transport with explicit --transport http flag
|
||||||
await runBasicTest(
|
await runBasicTest(
|
||||||
"http_transport_with_explicit_flag",
|
"http_transport_with_explicit_flag",
|
||||||
"http://127.0.0.1:3001/mcp",
|
"http://127.0.0.1:3001/mcp",
|
||||||
|
|
@ -688,7 +817,7 @@ async function runTests() {
|
||||||
"tools/list",
|
"tools/list",
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test 27: HTTP transport with suffix and --transport http flag
|
// Test 31: HTTP transport with suffix and --transport http flag
|
||||||
await runBasicTest(
|
await runBasicTest(
|
||||||
"http_transport_with_explicit_flag_and_suffix",
|
"http_transport_with_explicit_flag_and_suffix",
|
||||||
"http://127.0.0.1:3001/mcp",
|
"http://127.0.0.1:3001/mcp",
|
||||||
|
|
@ -699,7 +828,7 @@ async function runTests() {
|
||||||
"tools/list",
|
"tools/list",
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test 28: SSE transport given to HTTP server (should fail)
|
// Test 32: SSE transport given to HTTP server (should fail)
|
||||||
await runErrorTest(
|
await runErrorTest(
|
||||||
"sse_transport_given_to_http_server",
|
"sse_transport_given_to_http_server",
|
||||||
"http://127.0.0.1:3001",
|
"http://127.0.0.1:3001",
|
||||||
|
|
@ -710,7 +839,7 @@ async function runTests() {
|
||||||
"tools/list",
|
"tools/list",
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test 29: HTTP transport without URL (should fail)
|
// Test 33: HTTP transport without URL (should fail)
|
||||||
await runErrorTest(
|
await runErrorTest(
|
||||||
"http_transport_without_url",
|
"http_transport_without_url",
|
||||||
"--transport",
|
"--transport",
|
||||||
|
|
@ -720,7 +849,7 @@ async function runTests() {
|
||||||
"tools/list",
|
"tools/list",
|
||||||
);
|
);
|
||||||
|
|
||||||
// Test 30: SSE transport without URL (should fail)
|
// Test 34: SSE transport without URL (should fail)
|
||||||
await runErrorTest(
|
await runErrorTest(
|
||||||
"sse_transport_without_url",
|
"sse_transport_without_url",
|
||||||
"--transport",
|
"--transport",
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue