Conversation
…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 ### TypeScript Client Abstraction - Extract TypeScriptClient class for managing TS client processes - Move client scripts to integration-test/src/jvmTest/typescript/client/ - Add npm scripts: client:stdio and client:sse ### Parallel Test Execution - Enable JUnit parallel execution (dynamic strategy, concurrent mode) - Replace `mutableListOf` with `ConcurrentLinkedQueue` for thread-safe notification handling - Add @execution(CONCURRENT) annotation to TsEdgeCasesTestSse - Set default test timeout to 2 minutes in junit-platform.properties ### Test Infrastructure Simplification - Eliminate sdkDir parameter and dependency injection across tests - Automate TypeScript dependency installation in static initializer ### Real I/O Support - Migrate integration tests from runTest to runBlocking(Dispatchers.IO) - Remove withContext wrappers for cleaner code structure - Use runBlocking for tests with real HTTP, SSE, and process I/O Rationale: Virtual time in runTest is inappropriate for integration tests requiring real network timing and external process coordination ### Utilities & Extensions - 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 ### Test Reliability - Generate unique resource URIs using UUIDs for test isolation - Fix script references: myClient.ts → sse-client.ts, stdio-client.ts ### CI/CD - Add --rerun-tasks flag to Gradle workflows for reliable builds ## 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.
9 tasks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Refactor integration test infrastructure, fix and enable tests with ts-client
runTesttorunBlockingfor tests that spawn actual processes and communicate over real network connections.Key Changes
Extract
TypeScriptClientclass for managing TS client processesMove client scripts to integration-test/src/jvmTest/typescript/client/
Migrate typescript:
myClient.ts(2) →sse-client.ts,stdio-client.tsAutomate TypeScript dependency installation in static initializer
Enable JUnit parallel execution (dynamic strategy, concurrent mode) with test timeout of 2 minutes
Replace
mutableListOfwithConcurrentLinkedQueuefor thread-safe notification handlingMigrate integration tests from
runTesttorunBlockingRationale: 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 portStandardize kotlin.time.Duration usage across test utilities
Update processUtils.stopProcess() to accept Duration parameter
Replace RuntimeException checks with idiomatic check() calls
Revert
--rerun-tasksflag to Gradle workflows for reliable buildsMotivation 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
Types of changes
Checklist
Additional context
Follow up for #477