Skip to content

blackbull.fault_injection.catalogue.h1

blackbull.fault_injection.catalogue.h1

Named HTTP/1.1 server-side misbehaviour cases.

The HTTP/1.1 twin of :mod:blackbull.fault_injection.catalogue.h2: each entry is one thing a real server does wrong, named so a suite can parametrize over the set and report which case broke a client.

Every case is raw bytes. The server assembles its own output rather than going through the production send path โ€” see :mod:blackbull.fault_injection.h1_server for why that is load-bearing.

chunked_never_terminates()

Well-formed chunks that never reach the zero-length terminator.

chunked_stops_mid_chunk()

Announces a 5-byte chunk, sends 2, then EOF.

closed_without_response()

Accepts the request, answers nothing, resets the connection.

conflicting_content_length()

Two Content-Length headers that disagree (RFC 9110 ยง8.6).

content_length_overstated()

Declares 100 bytes, sends 5, then closes.

The client must not present the short body as a complete response.

content_length_understated()

Declares 2 bytes and sends 40.

The surplus is what a keep-alive client would parse as the next response's status line โ€” the response-side twin of request smuggling.

half_closed_after_headers()

Announces a body, sends FIN on the write side, keeps reading.

Distinct from closed_without_response (RST, nothing to read) and from content_length_overstated (a full close after partial bytes): here the connection stays readable, so a client that treats FIN as a reset, or that waits for a close it will not get, behaves differently from one that reads EOF and reports a truncated body.

headers_never_end()

Header lines forever, never the blank line that ends the head.

silent_after_request()

Holds the connection open and never writes.

What a client's own response deadline is measured against; the server contributes nothing but patience.

trickled_status_line()

A complete, correct response delivered one byte at a time.

Nothing here is malformed โ€” the pacing is the fault, which is why it cannot be expressed as anything but raw bytes plus an interval.