Proxies
A proxy is the one piece of network infrastructure an application cannot emulate convincingly in-process: the interesting behaviour is in a real implementation's handling of CONNECT, authentication, and address forms. So the testbed runs real ones, in containers.
Current results
How the result is produced
| Suite | Containers | What it covers |
|---|---|---|
| SocksProxyTest | serjs/go-socks5-proxy and MockServer, on a shared Docker network |
SOCKS5 through Proxy(SOCKS, …), including the case where the origin server is only reachable from inside the proxy's network — so a request that succeeds proves it really went through the proxy. |
| BasicProxyTest | MockServer, in proxy mode | HTTP proxying and CONNECT tunnelling for https, compared against HttpURLConnection as a control. |
The task and severity printed beside each live result above decide whether a failure gates. The table documents the fixture behind each named suite; the published JUnit cases above are the authority for what actually ran.
Specifications
| Document | Title | Why it matters here |
|---|---|---|
| RFC 1928 | SOCKS Protocol Version 5 | The handshake and address forms SocksProxyTest drives. |
| RFC 1929 | Username/Password Authentication for SOCKS V5 | The authenticated variant — a natural next case for the SOCKS suite. |
| RFC 9110 §9.3.6 | HTTP Semantics — CONNECT | The tunnel an https request opens through an HTTP proxy. |
| RFC 9110 §11.7 · RFC 7235 | Proxy authentication | Proxy-Authenticate and Proxy-Authorization handling, including on the CONNECT exchange itself. |
| RFC 9112 | HTTP/1.1 | Absolute-form request targets, which is what distinguishes a proxied request on the wire. |
Test infrastructure
Everything here is containerised, so there are no third-party servers to depend on — but there are third-party images, and those move. Image tags are pinned deliberately:
serjs/go-socks5-proxy:v0.0.3— a small SOCKS5 server.mockserver/mockserver— pinned to match the Java client version ingradle/libs.versions.toml, because the client refuses to talk to a server whose major.minor differs. That mismatch was the first real failure this repository caught.
Reading a result
Check whether the failure reproduces locally with ./gradlew containers:test before
looking upstream. A proxy suite that fails on CI but passes locally usually means the runner's
Docker networking, not the client: these tests depend on container-to-container name resolution
over a user-defined network.