Validation
The following checks are executed by validate.sh for every framework subscribed to the baseline or limited-conn test.
GET with query parameters
Sends GET /baseline11?a=13&b=42 and verifies the response body is 55 (sum of a and b).
POST with Content-Length body
Sends POST /baseline11?a=13&b=42 with body 20 and Content-Type: text/plain. Verifies the response body is 75 (sum of a, b, and body).
POST with chunked Transfer-Encoding
Sends POST /baseline11?a=13&b=42 with body 20 and Transfer-Encoding: chunked. Verifies the response body is 75.
Anti-cheat: randomized query parameters
Generates random values for a and b (100-999), sends GET /baseline11?a={a}&b={b}, and verifies the response matches the expected sum. This detects hardcoded responses.
Anti-cheat: POST body cache detection
Sends two POST requests with different random body values to the same endpoint (/baseline11?a=13&b=42). Verifies each response reflects the correct sum for that specific body. This detects response caching or hardcoded POST handling.
- Request 1: body=
{random1}— expects13 + 42 + random1 - Request 2: body=
{random2}— expects13 + 42 + random2
TCP fragmentation
Each request below is sent over a raw TCP socket (TCP_NODELAY, no Nagle coalescing) in multiple sendall() writes with a 30 ms pause between fragments. Every framework’s HTTP parser must reassemble these partial reads and produce the correct response. Simulates realistic network behavior — slow clients, small MTU, intermediate proxies that chunk data.
Every fragmented request sets Connection: close so the server closes the socket after the response and the test can read until EOF.
- Split request line — the request line arrives in two halves (
"GET /baseli"+"ne11?a=13&b=42 HTTP/1.1\r\n…"). The parser sees an incomplete method/path on the firstrecv(). Expects body55. - Split before headers — the request line arrives in one write, then each header line arrives in its own write (
Host:,User-Agent:,Connection:). Expects body55. - POST split headers/body — the full header block (including terminating
\r\n\r\n) is one write, then the body arrives in a separate write after the pause. Expects body75. - POST split body bytes — headers in one write, then the 2-byte body (
"20") arrives as two 1-byte writes. Stresses the parser’s ability to reassemble a Content-Length body across multiplerecv()calls. Expects body75.