Skip to content

Improve CI Stability - #2299

Merged
hyperxpro merged 1 commit into
mainfrom
ci-fix
Aug 2, 2026
Merged

hyperxpro merged 1 commit into
mainfrom
ci-fix

Conversation

@hyperxpro

Copy link
Copy Markdown
Member

No description provided.

@hyperxpro
hyperxpro merged commit 8f48b40 into main Aug 2, 2026
17 checks passed
@hyperxpro
hyperxpro deleted the ci-fix branch August 2, 2026 09:35
hyperxpro added a commit that referenced this pull request Sep 26, 2026
The two resolver tests that needed a real DNS query reached
www.google.com and www.example.com, so they were tagged external and
ran only in the scheduled Build Check. That split is what let the
native-transport mismatch ship in three releases: the PR build never
executed the one path that could fail. The proxy Testcontainers classes
carried the same tag although they have targeted a local nginx since
8f48b40 (#2299) and only need Docker.

AddressResolverGroupTest now runs its own StubDnsServer, a Netty UDP
responder that answers every A query with 127.0.0.1 and NXDOMAIN for
nonexistent.invalid, and points the DnsAddressResolverGroup at it. The
tests issue genuine queries against the local Jetty server on every OS
and in every PR build, and the unknown-host test asserts the NXDOMAIN
response code instead of whatever the network happened to return.

With no test left that needs the public internet, the external tag, the
excludedGroups property, the run-external-tests profile and the
-Dexternal.tests flag in Build Check are removed. The nightly and the
PR workflow now run the same suite.
hyperxpro added a commit that referenced this pull request Sep 26, 2026
Motivation:

The scheduled Build Check has been red since 2026-08-04 while the PR
build stayed green. The two `AddressResolverGroupTest` methods that need
a real DNS query were tagged `external` and reached www.google.com, so
only the nightly ran them. Since 2216 the client auto-selects epoll or
kqueue when the native library is present, and the test still built its
`DnsAddressResolverGroup` on `NioDatagramChannel`. Netty refuses to
register that channel on a native loop, and every real lookup failed
with `incompatible event loop type`. The PR build never executed that
path, which is how it shipped in 3.0.12 hrough 3.0.14.

Modification:

Add `StubDnsServer`, an in-process Netty UDP responder that answers A
queries with 127.0.0.1 and `nonexistent.invalid` with NXDOMAIN. Point
the resolver tests at it and derive the datagram channel from the
transport the client actually selects.

Assert the NXDOMAIN response code on the unknown-host test instead of
any non-null cause. Remove the `external` tag, the `excludedGroups`
property and profile, and the `-Dexternal.tests` flag from Build Check;
the proxy Testcontainers classes have used a local nginx since #2299 and
only need Docker. Give Build Check `workflow_dispatch` and the same test
commands as the PR workflow. Document on `setAddressResolverGroup` that
the datagram channel must match the transport.

Result:

No test reaches the public internet. The resolver tests issue genuine
DNS queries on every OS in every PR build, and a transport mismatch now
fails three of them in the default suite instead of passing silently.
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