Testbed status

Loading the most recent run…

Failures and findings

Suites

Endpoints

Handshake offered

Resolvers, side by side

HTTP/3 offered, and taken

Revocation, pinning and CT

History

Open work

Loading the open issues…

Topics

Encrypted Client Hello

RFC 9849 and RFC 9848, retry on rejection, and the servers — fixture and public — that exercise it.

DNS

DNS over HTTPS, SVCB and HTTPS records, Happy Eyeballs, and the resolvers used.

TLS

Certificate verification against a real server, and the interoperability sites.

Proxies

SOCKS5 and HTTP CONNECT against containerised proxies.

Virtual threads

Carrier-thread pinning under Loom, and what JEP 491 changes.

Test servers

The public HTTP, TLS and DNS servers client authors test against, and the roadmap for pointing the testbed at them.

About these results

What is being tested, and against what

Tests for OkHttp features that need real infrastructure behind them — containers to run against, or a network to reach out over. They run daily against published OkHttp artifacts, through the public API only, so the results compare versions rather than builds.

Results are grouped by the OkHttp version they were produced against, not by the workflow that produced them: the container suites and the Android ECH suite both testing 5.5.0-SNAPSHOT belong on one card. The pinned release is the version in gradle/libs.versions.toml, which every push and pull request tests; the scheduled runs add the current snapshot, so a regression on OkHttp's main branch shows up here before it reaches a release.

Red, amber and grey: what a result means

failing is either this repository being broken — suites run under the test task — or something unpredicted going wrong in a suite marked critical in the table above. Critical means the question that suite asks is one the repository is currently trying to answer, so a surprise there is the headline. The build still stays green: these suites record rather than gate, and it is this page that turns red, not the workflow.

findings is an unpredicted failure in a watch suite — one being kept honest rather than actively investigated, where a server this repository doesn't operate is as likely a cause as the client.

expected is a failure this repository predicted and can explain: the assertion is right and the answer is currently no, which is the finding rather than a problem with it. Examples include ECH on the JVM and monitor-based virtual-thread pinning before JDK 24. These are folded shut, and each carries its reason where a stack trace would otherwise be. When one starts passing, it becomes an unexpected pass to look at.

not run against a suite whose endpoint is down is the preflight doing its job: a public test server that has gone away reads as unavailable rather than as OkHttp failing. The Endpoints table above says which, and how long for.

How this page is built

The containers, network and android-ech workflows each upload the JUnit XML from every task they run, including the tasks that report without failing, and the network workflow adds what its endpoint preflight found. The pages workflow rebuilds this page when any of them finishes, collecting the most recent completed run of all three — so a container run finishing doesn't blank the ECH results, or the reverse — converts them to JSON, appends a summary to the history already published here, and redeploys the site. Nothing is committed to the repository: the deployed site is its own datastore.

The history strip keeps one block per published update, oldest on the left, capped at the last 120. Hover a block for its counts, click it for the workflow run behind it.

The raw data is served alongside the page — latest.json and history.json.