-
Notifications
You must be signed in to change notification settings - Fork 1
feat(load-tests): add distributed infrastructure management #65
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Conversation
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
d833694 to
885a284
Compare
ffmcgee725
previously approved these changes
Jan 13, 2026
An error occurred while trying to automatically change base from
ts/load-testing-scaffolding
to
main
January 15, 2026 09:24
An error occurred while trying to automatically change base from
ts/load-testing-scaffolding
to
main
January 15, 2026 09:24
59062fd to
f75e1ab
Compare
…testing - DigitalOcean droplet provisioning (create/destroy) - SSH-based command execution on droplets - Parallel execution with progress tracking - Results collection via SFTP - Background execution for long-running tests - Results aggregation across multiple droplets
- Fix latency aggregation bug (allLatencies was never populated) - Rename latency → connectTime to match scaffolding PR - Use corepack for Yarn installation instead of npm install -g yarn - Fix SSH exit code null handling (assume failure if no exit code) - Add concurrency limit (5) for droplet creation to avoid rate limits - Add aggregator input validation for required fields - Extract DROPLET_HOURLY_COST constant
- Add branch name validation to prevent shell injection (droplet.ts, infra.ts) - Add regex escaping for name prefix to prevent incorrect droplet matching - Add shell single-quote escaping for file paths in wait command - Add NaN validation for timeout/interval to prevent infinite loops - Add timeout to SFTP download to prevent hanging indefinitely
f75e1ab to
fa791da
Compare
Add client.end() calls to error handlers in execSsh and downloadFile functions. Previously, connection errors (e.g., ECONNREFUSED, auth failures) would clear the timeout and reject the promise but not explicitly close the SSH connection, potentially leaking socket resources.
ffmcgee725
approved these changes
Jan 15, 2026
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.
Summary
Adds infrastructure management for distributed load testing using DigitalOcean droplets.
What's included
CLI Commands (
yarn infra)create- Provision DigitalOcean droplets with Node.js, clone repo, install depsdestroy- Tear down all load test dropletslist- Show current droplets and hourly costexec- Run commands on all droplets (with--backgroundfor fire-and-forget)wait- Poll for a file to exist on droplets (for async completion)update- Git pull and rebuild on all dropletscollect- Download result files via SFTPResults Aggregation (
yarn results)aggregate- Combine results from multiple droplets into a single summaryValidated
Successfully ran a 70K connection steady-state test (35k per relay server instance) (10 droplets × 7K connections, 5 min hold):
Depends on
Note
Adds end-to-end tooling for distributed load testing across DigitalOcean droplets.
infraCLI:list,create(provisions droplets, installs Node/Yarn, clones repo, builds),destroy,update(git checkout/pull/build),exec(supports--background),wait(polls for file),collect(SFTP fetch of results)list/create/delete/waitForActive), SSH exec/SFTP download, droplet setup/status formatting, log saving, progress output, cost summary.env-based DO token and SSH settings with validation and~expansionresults aggregateto load JSON files and print combined connection/timing/retry statistics per droplet and totalsWritten by Cursor Bugbot for commit 2cf2124. This will update automatically on new commits. Configure here.