Skip to content

v0.8.0

Choose a tag to compare

@pingedbrain pingedbrain released this 09 Oct 18:06
· 18 commits to main since this release

What's new

Envelope-shape conformance — report is 28/28

fidelity report and fidelity conform now diff a structural body
signature
on top of status/code/Content-Type: namespace-qualified XML
element paths + <?xml presence, and JSON top-level keys + __type
namespacing. It immediately caught four real divergences that botocore's
parser tolerates — all fixed from captures:

  • ec2 errors now render the real AWS envelope: <?xml version="1.0" encoding="UTF-8"?> + <Response><Errors><Error> + <RequestID> at
    text/xml;charset=UTF-8 — distinct from the query envelope
  • query errors carry the model's xmlNamespace and AWS's
    Type, Code, Message member order
  • coral front-layer codes use capital Message
  • rest-json fills modeled RequestID/RequestIdentifier members
  • athena InvalidRequestException carries semantic
    AthenaErrorCode/ErrorCode (probed against real AWS)

fidelity diff — compare any two capture sets

microburst fidelity diff A B diffs emulator-vs-emulator or
region-vs-region captures directly. Verified: AWS us-west-2 and
ap-southeast-2 captures are shape-identical 28/28.

Request-side faults — request: rule block

Faults on the client→proxy upload path, not just the response:

request:
  slow_upload: {rate_kbps: 8}      # pace the upload read
  cut_upload: {after_bytes: 1024}  # reset mid-PUT — SDK sees ECONNRESET on its write path

On streaming uploads (S3 PutObject, >4 MiB payloads) a cut is a true
mid-write reset — boto3 sees ConnectionClosedError, a distinct retry
path from response faults.

SigV4 presets, header mutation, scheduling, hot-reload

  • expired-token (400), clock-skew (RequestTimeTooSkewed 403),
    bad-signature (SignatureDoesNotMatch 403) presets
  • response: {set_headers:, strip_headers:} — wrong Content-Type on a
    200, stripped x-amz-*: exercises SDK parse paths body corruption can't
  • active_at/until bound when a rule starts/stops matching
    (starts_in_s/ends_in_s in GET /rules)
  • --watch hot-reloads the --config ruleset on save; a broken file
    keeps the previous rules

Measured latency presets

latency: {preset: dynamodb} — 25 named service baselines measured
against real AWS (us-east-1, read-only ops, n=8). Each preset is the
service-side residual over the network floor — your own RTT stacks on
top, like the real thing. tools/latency_probe.py re-measures.

SDK matrix: Rust + .NET

tools/sdk-matrix/ now runs six SDKs — boto3, JS v3, Go v2, Java v2,
aws-sdk-rust, AWSSDK .NET — 20/20 cells pass with zero serializer
changes. SDK-specific HEAD-error parsing documented.

Install

pip install microburst
# or
docker run -p 9999:9999 ghcr.io/pingedbrain/microburst:v0.8.0

Full changelog: CHANGELOG.md