Skip to content

Switch Android emulator tests to emulator.wtf with OIDC auth#22

Open
yschimke wants to merge 3 commits into
masterfrom
wtf
Open

Switch Android emulator tests to emulator.wtf with OIDC auth#22
yschimke wants to merge 3 commits into
masterfrom
wtf

Conversation

@yschimke

Copy link
Copy Markdown
Owner

Replace the local Android emulator runner (reactivecircus/android-emulator-runner) with emulator.wtf cloud-based testing. This removes the need for KVM setup, AVD caching, and local emulator management in CI.

  • Use emulator-wtf/configure-credentials@v1 with OIDC (no secrets needed)
  • Run tests for android-test, android-test-app, and regression-test separately
  • Add emulator.wtf CLI instructions to android-test README
  • Keep existing API level matrix (21, 23, 29, 34)

yschimke and others added 3 commits April 12, 2026 11:28
Replace the local Android emulator runner (reactivecircus/android-emulator-runner)
with emulator.wtf cloud-based testing. This removes the need for KVM setup, AVD
caching, and local emulator management in CI.

- Use emulator-wtf/configure-credentials@v1 with OIDC (no secrets needed)
- Run tests for android-test, android-test-app, and regression-test separately
- Add emulator.wtf CLI instructions to android-test README
- Keep existing API level matrix (21, 23, 29, 34)
Pin emulator-wtf/configure-credentials to commit SHA to fix Semgrep
warnings about unpinned third-party actions. Add the emulator.wtf OIDC
configuration ID.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
android-test and regression-test are Android library modules, not app
modules, so they don't produce an app APK. Use the library-test
parameter instead of test for emulator.wtf run-tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@emulator-wtf

emulator-wtf Bot commented Apr 12, 2026

Copy link
Copy Markdown

android-test-debug-androidTest - There were errors while running the tests

⚠️ Note! There were errors encountered during this test run, you may have hit a bug novel use-case with emulator.wtf.
Let us know at support@emulator.wtf to give it the attention it needs!

yschimke added a commit that referenced this pull request Apr 21, 2026
…e edges

Real timeout propagation (#19). QuicBodySource and QuicRequestBodySink
used to return Timeout.NONE, so OkHttpClient.readTimeout / writeTimeout
on the buffered source/sink had no effect. Both now expose a mutable
Timeout seeded from chain.readTimeoutMillis / writeTimeoutMillis, and
honour both the timeout value and any deadline callers set on top.
QuicBodySource's bodyQueue.take() becomes a bounded poll; sink writes
translate the remaining budget into sendBodyChunk's existing timeout
parameter, so the I/O-thread retry loop bails at the right moment too.

Pool lock scoped per origin (#8). Quiche4jEngine had a process-wide
ReentrantLock around acquire() — a call to origin B waited for origin
A's handshake. Replaced with ConcurrentHashMap.compute so handshakes
to distinct keys run in parallel; only same-origin races serialise,
which is the correct behaviour (the second call reuses the pooled
connection the first one produces).

I/O thread joined on pool close (#10). QuicPooledConnection.close
now briefly joins the I/O thread so tests that build+tear-down
engines in sequence don't leak threads.

Soft-cast the chain (#14). Quiche4jInterceptor used `chain as
RealInterceptorChain`. A test-wrapped chain would have thrown CCE
at the user's call site; now we fall through to the standard
transport if we can't recognise the chain.

HttpsAwareDns polish (#15/#16). Three fixes in one: a 5-minute TTL
on cached lookups (unbounded caching meant a transient DNS outage
poisoned the cache forever), a single resolver.lookup call instead
of two on the "no h3 record" fallback path, and a bounded default
executor (newFixedThreadPool(2)) shared across instances instead
of newCachedThreadPool.

AltSvcEntry parse edges (#21/#22). splitAuthority now handles
bracketed IPv6 literals (`[2001:db8::1]:443`) instead of splitting
on the last colon of the v6 address. splitAtCommas no longer uses
an integer depth counter that got stuck on unbalanced quotes —
malformed entries drop out, the rest of the header parses normally.

Three new AltSvc tests cover the bracketed-IPv6, unbalanced-quote,
and unbracketed-IPv6 rejection paths.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
yschimke added a commit that referenced this pull request Apr 21, 2026
No code changes — just refreshes the review doc so it reflects which
items have landed (#5, #6, #7, #8, #10, #11, #12, #14, #15, #16, #17,
#19, #21, #22) and which are still parked (#9, #13, #18, #20). Item
#13's block-via-latch is now block-via-CompletableFuture bounded by
the write-timeout, so the concern is narrower than it was.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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