Title: fix: Eliminate port allocation race condition in all affected test files by maxisbey · Pull Request #1528 · modelcontextprotocol/python-sdk · GitHub
Open Graph Title: fix: Eliminate port allocation race condition in all affected test files by maxisbey · Pull Request #1528 · modelcontextprotocol/python-sdk
X Title: fix: Eliminate port allocation race condition in all affected test files by maxisbey · Pull Request #1528 · modelcontextprotocol/python-sdk
Description: This PR extends the port allocation race condition fix to all test files affected by the same TOCTOU issue, eliminating intermittent test failures when running with pytest-xdist parallel workers. Motivation and Context When running tests with pytest-xdist parallel workers, multiple workers would receive the same "free" port from socket.bind(("127.0.0.1", 0)), causing a TOCTOU (Time-of-Check-Time-of-Use) race condition. This manifested as: "address already in use" errors when multiple workers tried to bind the same port Tests connecting to wrong servers (e.g., expecting one server but getting another) Flaky tests in CI that would pass locally but fail intermittently in parallel runs This builds on the initial fix in tests/server/fastmcp/test_integration.py by applying the same solution to 7 additional test files that had the identical issue. How Has This Been Tested? ✅ Ran full test suite with 14 parallel workers: PYTEST_DISABLE_PLUGIN_AUTOLOAD="" uv run --frozen pytest tests/ -v ✅ All 703 tests pass consistently ✅ Verified no "address already in use" errors occur ✅ Confirmed no test cross-contamination between workers ✅ Tested multiple consecutive runs to ensure stability Each pytest-xdist worker now receives an exclusive port range from 40000-59999 based on its worker ID, eliminating port conflicts entirely. Breaking Changes None. This is an internal test infrastructure change with no impact on the public API or user-facing functionality. Types of changes Bug fix (non-breaking change which fixes an issue) New feature (non-breaking change which adds functionality) Breaking change (fix or feature that would cause existing functionality to change) Documentation update 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 Files modified: tests/server/test_streamable_http_security.py - Updated server_port fixture tests/server/test_sse_security.py - Updated server_port fixture tests/shared/test_streamable_http.py - Updated 3 port fixtures (basic, json, event server) tests/shared/test_sse.py - Updated server_port fixture tests/shared/test_ws.py - Updated server_port fixture tests/client/test_http_unicode.py - Updated unicode_server_port fixture tests/client/test_notification_response.py - Updated non_sdk_server_port fixture tests/test_test_helpers.py - Fixed socket cleanup to prevent ResourceWarning Implementation details: All affected fixtures now use get_worker_specific_port(worker_id) instead of the race-prone socket.bind(("127.0.0.1", 0)) pattern. The helper function allocates worker-specific port ranges ensuring no overlap between parallel test workers.
Open Graph Description: This PR extends the port allocation race condition fix to all test files affected by the same TOCTOU issue, eliminating intermittent test failures when running with pytest-xdist parallel workers. M...
X Description: This PR extends the port allocation race condition fix to all test files affected by the same TOCTOU issue, eliminating intermittent test failures when running with pytest-xdist parallel workers. M...
Opengraph URL: https://github.com/modelcontextprotocol/python-sdk/pull/1528
X: @github
Domain: github.com
| route-pattern | /:user_id/:repository/pull/:id/files(.:format) |
| route-controller | pull_requests |
| route-action | files |
| fetch-nonce | v2:5de9e0e2-0602-adee-0d86-43327823dc6d |
| current-catalog-service-hash | ae870bc5e265a340912cde392f23dad3671a0a881730ffdadd82f2f57d81641b |
| request-id | D066:26468C:1B2DB8:237B8D:6A5B1903 |
| html-safe-nonce | 6413287816360320bd45cffe421ede2bc8d6dd764a18493d1908f5a0ced2b51e |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJEMDY2OjI2NDY4QzoxQjJEQjg6MjM3QjhEOjZBNUIxOTAzIiwidmlzaXRvcl9pZCI6IjMwMjMwNjYzOTQzOTUzNTEyOTkiLCJyZWdpb25fZWRnZSI6ImlhZCIsInJlZ2lvbl9yZW5kZXIiOiJpYWQifQ== |
| visitor-hmac | 94281dfb8b096bdc4b910b1c96f3a0dbe440afa32e58f137b3e9d02d4fc0f377 |
| hovercard-subject-tag | pull_request:2957049075 |
| github-keyboard-shortcuts | repository,pull-request-list,pull-request-conversation,pull-request-files-changed,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/modelcontextprotocol/python-sdk/pull/1528/files |
| twitter:image | https://avatars.githubusercontent.com/u/224885523?s=400&v=4 |
| twitter:card | summary_large_image |
| og:image | https://avatars.githubusercontent.com/u/224885523?s=400&v=4 |
| og:image:alt | This PR extends the port allocation race condition fix to all test files affected by the same TOCTOU issue, eliminating intermittent test failures when running with pytest-xdist parallel workers. M... |
| og:site_name | GitHub |
| og:type | object |
| hostname | github.com |
| expected-hostname | github.com |
| None | 5290d7e14309ad1e76106a9c4237bd1041517e83ea182c8ab756752cb0c6940b |
| turbo-cache-control | no-preview |
| diff-view | unified |
| go-import | github.com/modelcontextprotocol/python-sdk git https://github.com/modelcontextprotocol/python-sdk.git |
| octolytics-dimension-user_id | 182288589 |
| octolytics-dimension-user_login | modelcontextprotocol |
| octolytics-dimension-repository_id | 862584018 |
| octolytics-dimension-repository_nwo | modelcontextprotocol/python-sdk |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 862584018 |
| octolytics-dimension-repository_network_root_nwo | modelcontextprotocol/python-sdk |
| turbo-body-classes | logged-out env-production page-responsive full-width |
| disable-turbo | true |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | 9c975978430e9ad293956f2bbdaf153b1bd84a99 |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width