Skip to content

Dockerize probe test servers - #1

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

MDA2AV merged 2 commits into
mainfrom
dockerize-servers

Conversation

@MDA2AV

@MDA2AV MDA2AV commented Feb 7, 2026 •

Copy link
Copy Markdown
Owner

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

github-actions Bot commented Feb 7, 2026

Copy link
Copy Markdown

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