Test against ElasticMQ instead of LocalStack - #111
Merged
Merged
Conversation
There was a problem hiding this comment.
🟡 Changes recommended
The new ElasticMQ availability probe in the scenario setup does not validate HTTP success status, so it can incorrectly treat 4xx/5xx responses as “available” instead of skipping.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
This PR migrates the repository’s SQS integration environment from LocalStack to ElasticMQ to avoid LocalStack’s new license/token requirement, updating both local development (Docker Compose) and CI (GitHub Actions) to use ElasticMQ’s SQS-compatible endpoint and a compatible readiness/health probe.
Changes:
- Replace LocalStack with
softwaremill/elasticmq-native:1.7.1incompose.yamland.github/workflows/test.yml. - Update the SQS endpoint port from
4566to9324. - Change the SQS readiness/health probe to
?Action=ListQueues(instead of/_localstack/health).
File summaries
| File | Description |
|---|---|
probitas/13-client-sqs.probitas.ts |
Updates scenario endpoint port and replaces the LocalStack health check with an SQS ListQueues probe. |
compose.yaml |
Swaps the localstack service for elasticmq, updates port mapping, and replaces the container healthcheck with a wget-based SQS probe. |
.github/workflows/test.yml |
Replaces the LocalStack CI service with ElasticMQ across jobs and updates the service healthcheck to use the SQS ListQueues probe. |
Review details
- Files reviewed: 3/3 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
lambdalisue
force-pushed
the
feat/elasticmq
branch
from
September 7, 2026 15:28
1890649 to
776f62d
Compare
LocalStack merged its community and pro images, so every image published after that merge refuses to start without LOCALSTACK_AUTH_TOKEN. The pin to 4.14.0 bought time but freezes the SQS test environment at February 2026 and will never receive fixes. ElasticMQ is Apache-2.0, needs no account or token, and is an SQS server rather than an emulator of all of AWS — which is all this repository ever used LocalStack for. Its image is also a fraction of the size, so CI starts faster. The endpoint moves from 4566 to 9324 and the readiness probe from LocalStack's /_localstack/health to ListQueues. SQS answers a bare GET with 400 because it wants an Action, so probing the endpoint itself would read as unavailable; ListQueues needs no credentials, which keeps the probe a reachability check. The container healthcheck uses wget rather than curl because the image is Alpine plus the server binary and has no curl. Verified against ElasticMQ 1.7.1: the SQS scenario passes end to end, including message attributes, batch sends, delayed delivery and purge. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E6iErRVYiy7LzNGLT5Vzh1
lambdalisue
force-pushed
the
feat/elasticmq
branch
from
September 7, 2026 15:31
776f62d to
eab2d49
Compare
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.
Closes #109.
Summary
softwaremill/elasticmq-native:1.7.1) in CI andcompose.yaml.4566to9324and the readiness probe from/_localstack/healthtoListQueues.Why
LocalStack merged its community and pro images, so every image published after that merge refuses to start without
LOCALSTACK_AUTH_TOKEN. Pinning to4.14.0unblocked CI but freezes the SQS test environment at February 2026, and it will never receive fixes.ElasticMQ is Apache-2.0, needs no account or token of any kind, and is an SQS server rather than an emulator of the whole of AWS — which is all this repository ever used LocalStack for. The image is also a fraction of the size, so CI containers start faster.
Details worth knowing
The readiness probe had to change, not just its port. SQS answers a bare
GET /with400 MissingAction, so the existingresponse.okcheck would have reported ElasticMQ as unavailable and silently skipped every SQS test.?Action=ListQueuesanswers200and needs no credentials, which keeps it a reachability check and nothing more.The container healthcheck uses
wget, notcurl. Inspecting the image config shows it isalpine-minirootfsplustiniand the server binary — there is nocurlin it. BusyBoxwgetis what is available. The image also exposes only9324; there is no separate statistics or UI port, contrary to what #109 assumed.Verification
ElasticMQ 1.7.1 was run locally and the real code exercised against it, rather than reasoning from documentation:
{"priority":{"dataType":"Number",…},"type":{"dataType":"String",…}})ensureQueueworks, and queue URLs keep the same account-id shape as LocalStack (…/000000000000/test-queue), so nothing downstream had to changedeno task verify— 45 passed, 0 failedCompanion change
probitas-test/probitas-packages#25 does the same for the client package, where the SQS integration suite lives. The two are independent — this repository passes its endpoint explicitly — but they should land together so the whole project is off LocalStack.
🤖 Generated with Claude Code
https://claude.ai/code/session_01E6iErRVYiy7LzNGLT5Vzh1