Skip to content

Conversation

@kpavlov
Copy link
Contributor

@kpavlov kpavlov commented Jan 10, 2026

refactor(test): add centralized TypeScript server factory for integration tests

  • Create TypeScriptServer class for managing TypeScript MCP servers
  • Add dedicated typescript/ directory with server infrastructure
  • Refactor TsTestBase to use TypeScriptServer for stdio transport
  • Extract TypeScript test tools (greet, multi-greet, prompts, resources)
  • Use npx tsx for direct execution (better performance than npm run)
  • Install TypeScript dependencies automatically in test setup

The TypeScriptServer factory provides:

  • startSse(port): Start SSE transport server
  • startStdio(): Start STDIO transport server
  • stop(): Graceful server shutdown
  • installDependencies(): npm install automation

Motivation and Context

To resurrect typescript tests

How Has This Been Tested?

Locally, CI

Breaking Changes

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • Test fix

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

Additional context

#475

@kpavlov kpavlov added tests bugfix Something was fixed 🎉 refactoring Making things better labels Jan 10, 2026
Comment on lines -39 to -44
fun setUp() {
port = findFreePort()
serverUrl = "http://$host:$port/mcp"
tsServerProcess = startTypeScriptServer(port)
println("TypeScript server started on port $port")
}
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Typescript server is started once for all SSE tests

@kpavlov kpavlov force-pushed the kpavlov/fix-ts-tests branch 2 times, most recently from ce56af3 to 0ff900f Compare January 10, 2026 18:29
…tion tests

  - Create TypeScriptServer class for managing TypeScript MCP servers
  - Add dedicated typescript/ directory with server infrastructure
  - Refactor TsTestBase to use TypeScriptServer for stdio transport
  - Extract TypeScript test tools (greet, multi-greet, prompts, resources)
  - Use npx tsx for direct execution (better performance than npm run)
  - Install TypeScript dependencies automatically in test setup
  - Don't run integration tests under Windows

  The TypeScriptServer factory provides:
  - startSse(port): Start SSE transport server
  - startStdio(): Start STDIO transport server
  - stop(): Graceful server shutdown
  - installDependencies(): npm install automation
@kpavlov kpavlov force-pushed the kpavlov/fix-ts-tests branch from 0ff900f to 9245718 Compare January 10, 2026 18:30
@kpavlov kpavlov marked this pull request as ready for review January 10, 2026 18:38
@kpavlov kpavlov merged commit 658b370 into main Jan 10, 2026
10 checks passed
@kpavlov kpavlov deleted the kpavlov/fix-ts-tests branch January 10, 2026 18:46
kpavlov added a commit that referenced this pull request Jan 11, 2026
…and enable tests with ts-client (#478)

# Refactor integration test infrastructure, fix and enable tests with
ts-client

- Refactor TypeScript integration test infrastructure to support
parallel execution and real I/O operations.
- Extract reusable TypeScriptClient component
- Migrate some tests from `runTest` to `runBlocking` for tests that
spawn actual processes and communicate over real network connections.

## Key Changes 

  - Extract `TypeScriptClient` class for managing TS client processes
- Move client scripts to integration-test/src/jvmTest/typescript/client/
- Migrate typescript: `myClient.ts`(2) → `sse-client.ts`,
`stdio-client.ts`
  - Automate TypeScript dependency installation in static initializer
  
- Enable JUnit parallel execution (dynamic strategy, concurrent mode)
with test timeout of 2 minutes
- Replace `mutableListOf` with `ConcurrentLinkedQueue` for thread-safe
notification handling
  - Migrate integration tests from `runTest` to `runBlocking`
**Rationale:** Integration tests that spawn real TypeScript processes,
establish actual
HTTP/SSE connections, and manage server lifecycles require real-time I/O
behavior. The runTest framework's virtual time is designed for fast unit
tests with simulated timing, not for integration scenarios where
external processes and network communication must occur in real time.
Parallel execution requires thread-safe data structures
(ConcurrentLinkedQueue)
to safely collect notifications from multiple concurrent test instances.

  - Add `EmbeddedServer.actualPort()` extension to get bound port
  - Standardize kotlin.time.Duration usage across test utilities
  - Update processUtils.stopProcess() to accept Duration parameter
  - Replace RuntimeException checks with idiomatic check() calls
  - Revert `--rerun-tasks` flag to Gradle workflows for reliable builds

## Motivation and Context

Integration tests with typescript client are now broken. Enabling
parallel test execution will force writing thread-safe independent tests
and will highlight problems faster.

## How Has This Been Tested?
CI

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [x] CI Update
- [x] Test Fix

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
Follow up for #477
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bugfix Something was fixed 🎉 refactoring Making things better tests

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants