Skip to content

Dockerize probe test servers#1

Merged
MDA2AV merged 2 commits into
mainfrom
dockerize-servers
Feb 7, 2026
Merged

Dockerize probe test servers#1
MDA2AV merged 2 commits into
mainfrom
dockerize-servers

Conversation

@MDA2AV
Copy link
Copy Markdown
Owner

@MDA2AV MDA2AV commented Feb 7, 2026

Summary

  • Add Dockerfiles for all 12 test servers and a docker-compose.yml with host networking
  • Replace native SDK setup (Python, Node.js, Java, Rust, Nginx, Apache, Caddy) in the probe workflow with docker compose up/down
  • Add proper ApacheServer/ directory (replaces inline apt-get + sed hack)
  • Fix gh-pages publish step → orphan latest-results branch with correct worktree logic

Test plan

  • Probe workflow triggers on this PR and all 12 servers start via Docker Compose
  • All health checks pass
  • Probe results match previous runs

🤖 Generated with Claude Code

MDA2AV and others added 2 commits February 7, 2026 15:51
Replace native SDK setup (Python, Node.js, Java, Rust, Nginx, Apache, Caddy)
with per-server Dockerfiles and a single docker-compose.yml using host networking.
Only .NET SDK remains on the runner for the probe CLI itself.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
libz-ng-sys requires cmake and a C++ compiler to build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

github-actions Bot commented Feb 7, 2026

Http11Probe — Compliance Comparison

Glyph11 41/41 · Kestrel 29/41 · Flask 13/41 · Express 37/41 · Spring Boot 31/41 · Quarkus 25/41 · Nancy 0/41 · Jetty 33/41 · Nginx 0/41 · Apache 32/41 · Caddy 25/41 · Pingora 20/41

Compliance

Server BASELINE BARE-LF-REQUEST-LINE BARE-LF-HEADER OBS-FOLD SP-BEFORE-COLON MULTI-SP-REQUEST-LINE MISSING-HOST INVALID-VERSION EMPTY-HEADER-NAME CR-ONLY-LINE-ENDING MISSING-TARGET FRAGMENT-IN-TARGET HTTP09-REQUEST INVALID-HEADER-NAME HEADER-NO-COLON DUPLICATE-HOST CL-NON-NUMERIC CL-PLUS-SIGN
Expected 2xx 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400/505 or close 400 or close 400 or close 400 or close 400 or close 400/close/timeout 400 or close 400 or close 400 or close 400 or close 400 or close
Glyph11 200 400 400 400 400 400 400 400 400 400 400 400 TimedOut 400 400 400 400 400
Kestrel 200 200 200 400 400 400 400 505 400 400 400 404 400 200 400 400 400 405
Flask 200 200 200 200 200 200 200 ClosedByServer 200 ClosedByServer ClosedByServer 200 TimedOut 200 200 200 405 405
Express 200 400 400 400 400 200 400 400 400 400 400 200 TimedOut 400 400 200 400 400
Spring Boot 200 200 200 200 400 200 400 505 400 400 ClosedByServer ClosedByServer ClosedByServer 400 400 400 400 400
Quarkus 200 200 200 200 400 200 400 200 200 400 400 200 400 400 400 200 400 400
Nancy Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error
Jetty 200 200 200 400 400 200 400 505 400 400 505 200 505 400 400 400 400 400
Nginx Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error Error
Apache 200 400 400 200 400 400 400 200 400 400 400 400 ClosedByServer 400 400 400 400 400
Caddy 200 200 200 200 400 400 400 505 400 400 400 200 TimedOut 400 400 400 400 400
Pingora 200 200 200 400 400 200 200 400 400 400 400 200 400 400 400 200 200 200

Smuggling

Server CL-TE-BOTH DUPLICATE-CL CL-LEADING-ZEROS TE-XCHUNKED TE-TRAILING-SPACE TE-SP-BEFORE-COLON CL-NEGATIVE CLTE-PIPELINE TECL-PIPELINE CL-TRAILING-SPACE HEADER-INJECTION TE-DOUBLE-CHUNKED CL-EXTRA-LEADING-SP TE-CASE-MISMATCH
Expected 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or close 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx 400 or 2xx
Glyph11 400 400 400 400 400 400 400 400 400 ⚠️200 ⚠️200 400 ⚠️200 400
Kestrel 405 400 405 400 405 400 400 405 405 405 ⚠️200 405 405 405
Flask 405 405 405 405 405 405 405 405 405 405 ⚠️200 405 405 405
Express 400 400 404 400 400 400 400 400 400 404 ⚠️200 400 404 400
Spring Boot 405 400 405 501 405 400 400 405 405 405 ⚠️200 400 405 405
Quarkus 405 400 405 405 405 400 400 405 405 405 ⚠️200 405 405 405
Nancy Error Error Error Error Error Error Error Error Error Error Error Error Error Error
Jetty 400 400 200 400 400 400 400 400 400 ⚠️200 ⚠️200 400 ⚠️200 400
Nginx Error Error Error Error Error Error Error Error Error Error Error Error Error Error
Apache 200 400 200 400 200 400 400 200 200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200
Caddy 200 400 200 501 TimedOut 400 400 200 200 ⚠️200 ⚠️200 501 ⚠️200 TimedOut
Pingora 200 400 200 200 200 400 200 200 200 ⚠️200 ⚠️200 ⚠️200 ⚠️200 ⚠️200

Malformed Input

Server BINARY-GARBAGE LONG-URL LONG-HEADER-VALUE MANY-HEADERS NUL-IN-URL CONTROL-CHARS-HEADER INCOMPLETE-REQUEST EMPTY-REQUEST LONG-HEADER-NAME LONG-METHOD NON-ASCII-HEADER-NAME NON-ASCII-URL CL-OVERFLOW WHITESPACE-ONLY-LINE
Expected 400/close/timeout 400/414/431 or close 400/431 or close 400/431 or close 400 or close 400 or close 400/close/timeout 400/close/timeout 400/431 or close 400 or close 400 or close 400 or close 400 or close 400/close/timeout
Glyph11 TimedOut ClosedByServer ClosedByServer ClosedByServer 400 400 TimedOut TimedOut ClosedByServer ClosedByServer 400 400 400 400
Kestrel 400 414 431 431 400 200 TimedOut TimedOut 431 414 400 400 400 400
Flask ClosedByServer 414 431 431 200 200 TimedOut ClosedByServer 431 414 200 200 405 ClosedByServer
Express 400 431 431 431 400 400 TimedOut TimedOut 431 400 400 400 400 400
Spring Boot 400 400 400 400 400 400 TimedOut TimedOut 400 400 400 400 400 400
Quarkus 400 414 431 431 400 400 TimedOut TimedOut 431 414 400 200 400 TimedOut
Nancy Error Error Error Error Error Error Error Error Error Error Error Error Error Error
Jetty 400 414 431 431 400 400 TimedOut TimedOut 431 431 400 400 400 400
Nginx Error Error Error Error Error Error Error Error Error Error Error Error Error Error
Apache 400 414 400 400 400 400 TimedOut TimedOut 400 414 400 404 400 400
Caddy 400 200 200 200 400 400 TimedOut TimedOut 200 405 400 200 400 TimedOut
Pingora 400 200 200 400 200 400 TimedOut TimedOut 400 200 400 200 200 400

Commit: d7369bf

@MDA2AV MDA2AV merged commit e4d9613 into main Feb 7, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant