• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ooni / probe-cli / 34840782310
71%

Build:
DEFAULT BRANCH: master
Ran 14 Sep 2026 12:03PM UTC
Jobs 1
Files 687
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

14 Sep 2026 11:56AM UTC coverage: 71.025% (+0.002%) from 71.023%
34840782310

push

github

web-flow
fix(echcheck): do not attempt a TLS handshake when the TCP connect failed (#1817)

## Checklist

- [x] I have read the [contribution
guidelines](https://github.com/ooni/probe-cli/blob/master/CONTRIBUTING.md)
- [x] reference issue for this pull request: #1728
- [x] if you changed anything related to how experiments work and you
need to reflect these changes in the ooni/spec repository, please link
to the related ooni/spec pull request: not needed, the test keys do not
change shape
- [x] if you changed code inside an experiment, make sure you bump its
version number: 0.3.1 -> 0.3.2

## Description

`handshake()` in `internal/experiment/echcheck` dials the target and
then calls `tls.Client(conn, ...).HandshakeContext()` without checking
whether the dial succeeded. When it did not, `conn` is nil and
`crypto/tls` panics while writing the ClientHello. This is the trace
reported in #1725 and tracked in #1728: it shows up whenever a target
stops answering on its port, as `min-ng.test.defo.ie:15443` did.

The change returns the test keys right after the failed TCP connect has
been recorded, since that is the measurement: a `tcp_connects` entry
with the failure and no `tls_handshakes` entry, because no handshake was
attempted. No shape of `TestKeys` changes.

The regression test binds a port on localhost, closes it, and runs
`startHandshake` against it with and without GREASE. Without the fix the
test panics with the same nil pointer dereference as the issue; with the
fix it passes. Verified with `go test -short
./internal/experiment/echcheck/`.

Small side observation, not addressed here to keep the diff minimal: the
TLS conn is never closed after the handshake, so a successful handshake
leaks the socket until the process exits. Happy to send that as a
separate PR if you want it.

Co-authored-by: freetoshi-nakamoto <macintoshi-nakamoto@users.noreply.github.com>

3 of 3 new or added lines in 1 file covered. (100.0%)

5 existing lines in 2 files now uncovered.

28704 of 40414 relevant lines covered (71.02%)

44.81 hits per line

Coverage Regressions

Lines Coverage ∆ File
3
87.2
-2.4% internal/experiment/webconnectivitylte/priority.go
2
98.82
-1.18% internal/measurexlite/dns.go
Jobs
ID Job ID Ran Files Coverage
1 0 - 34840782310.1 14 Sep 2026 12:03PM UTC 687
71.02
GitHub Action Run
Source Files on build 34840782310
  • Tree
  • List 687
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • 4eb33628 on github
  • Prev Build on master (#33477003717)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc