← all adapters

sqs-style

simulates Amazon SQS API 2012-11-05

restadapter v0.1.02 routes

verification

SDK + VMverified with aws-sdk-go-v2 v1.43.7· surface 2 · not implemented 4 · differs 5

use it

# add to stunt.yaml
services:
  sqs:
    adapter: embedded:sqs-style

# then
$ stunt up

The embedded: source extracts this adapter from the binary — no git clone, fully offline.

how to mock the Amazon SQS API locally

Install stunt, paste the service block above into stunt.yaml, run stunt up — then point your client at localhost instead of Amazon SQS API. It works offline, keeps state across requests and restarts, and every response is synthetic: the route shapes, status codes, pagination, and webhook delivery follow the real Amazon SQS API 2012-11-05 surface — the data is fake, the behavior is real.

backing stores

queuesmessages

api surface (2)

generated from the adapter manifest — exactly what boots, nothing more

2 routes
POST/
POST/{queueName}

SDK-verified behaviors (6)

  • CreateQueue/GetQueueUrl via real SigV4
  • SendMessage/ReceiveMessage with ms-precision system attributes
  • visibility timeout: in-flight hidden, expiry redelivers
  • DeleteMessage consumes the redelivered message
  • SendMessageBatch correlated results
  • missing-queue typed error surface

VM-verified behaviors (20)

  • signed calls pass on both transports with the real MD5
  • missing and garbage auth are 403
  • tampered signatures and wrong or unknown keys are 403
  • a stale x-amz-date is RequestTimeTooSkewed; a fresh signature passes
  • a delayed send is not receivable until the delay lapses
  • MaxNumberOfMessages bounds are enforced
  • receive hides the message until the timeout lapses, counted NotVisible
  • redelivery mints a fresh receipt handle and bumps the receive count
  • ChangeMessageVisibility extends the in-flight window
  • delete removes the message; stale handles are ReceiptHandleIsInvalid
  • one bad entry fails alone; the rest of the batch still sends
  • delivered entries round-trip their message attributes
  • oversize and duplicate-id batches are rejected
  • purge empties the queue immediately over the queue-URL transport
  • a second purge inside 60s is 403, then works again after the window
  • create, GetQueueUrl, and prefix-filtered ListQueues round-trip
  • identical re-create is idempotent; conflicting attributes are QueueAlreadyExists
  • SetQueueAttributes persists; unknown names are InvalidAttributeName
  • DeleteQueue tears the queue down for its messages too
  • the throttled profile alternates empty receives deterministically

Not implemented (4)

  • No ListQueues MaxResults/NextToken paging; no AttributeNames prefix wildcards (.*)
  • No AddPermission/RemovePermission, Tag/Untag/ListQueueTags, or ListDeadLetterSourceQueues
  • No presigned URL (query-parameter) auth; SigV4 Authorization header only
  • FIFO queues allowed by name only; no MessageGroupId or deduplication semantics

Differs from the real API (5)

  • QueueUrl omits the 12-digit account id; http://<host>/<queueName> instead of the AWS path
  • No long polling: WaitTimeSeconds is validated but never blocks; receive returns at once
  • MD5OfMessageAttributes omitted (compound encoding not reproduced), only body MD5
  • PurgeQueue is immediate, not async; the one-purge-per-60s rule is still enforced
  • Message ids and receipt handles are synthetic deterministic strings, not real AWS ids
want more of the Amazon SQS API surface? adapters are YAML + Starlark — the authoring guide covers adding routes, fixtures, and state machines. Open an issue for anything big first, or just file a PR — merged routes ship in the next release.