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

ilpanich / axiam-java-sdk / 29638217438
91%

Build:
DEFAULT BRANCH: main
Ran 18 Jul 2026 08:54AM UTC
Jobs 1
Files 27
Run time 1min
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

18 Jul 2026 08:53AM UTC coverage: 91.227% (-0.09%) from 91.316%
29638217438

push

github

web-flow
feat(tls): add client-certificate mTLS support (CONTRACT §6.1) (#18)

Add an optional client-side X.509 identity (PEM certificate chain + PKCS#8
private key) applied to both the REST and gRPC transports:

- AxiamClient.Builder.clientCertificate(byte[] certPem, byte[] keyPem): parses
  the cert chain (X.509) and the PKCS#8 key (RSA/EC/Ed25519 auto-detected) into
  an in-memory PKCS#12 key store and passes the resulting KeyManager[] as the
  first arg to SSLContext.init(...). Both-or-neither is validated at build()
  (IllegalArgumentException); malformed PEM fails at construction (NetworkError).
  Server verification (system trust store + optional customCa) is unchanged.
- AuthClientInterceptor.channelBuilder(target, customCa, clientCert, clientKey)
  and a matching GrpcAuthzClient constructor overload feed the same identity to
  Netty via GrpcSslContexts.keyManager(...).
- The private key is secret material (§7): consumed into the key store, never
  retained on a client field, and never exposed via a getter/toString/logs.

Also fix a pre-existing latent bug surfaced by the first real HTTPS-through-SDK
test: the REST client overrode OkHttp's hostname verifier with
HttpsURLConnection.getDefaultHostnameVerifier(), an always-reject verifier that
failed verification for every host. It now uses OkHttp's built-in strict
OkHostnameVerifier (full SAN/CN matching).

Tests: real end-to-end mTLS via MockWebServer.requireClientAuth() (handshake
succeeds only when the client presents its cert; fails without it), plus
construction-validation and gRPC keyManager-path tests. All PKI is generated at
test time (keytool + in-memory KeyStore) — no key material is committed.
226 tests pass; JaCoCo line coverage floor (0.92) met; javadoc and TLS-bypass
gates pass. CONTRACT.md re-vendored; README + CHANGELOG updated.


Claude-Session: https://claude.ai/code/session_01FM1xTLBaGvfUv8X3bPw6oj

Co-authored-by: Claude <noreply@anthropic.com>

384 of 451 branches covered (85.14%)

Branch coverage included in aggregate %.

1051 of 1122 relevant lines covered (93.67%)

4.07 hits per line

Coverage Regressions

Lines Coverage ∆ File
15
93.16
-1.46% io/axiam/sdk/AxiamClient.java
4
91.46
2.42% io/axiam/sdk/grpc/AuthClientInterceptor.java
4
93.1
0.12% io/axiam/sdk/grpc/GrpcAuthzClient.java
Jobs
ID Job ID Ran Files Coverage
1 29638217438.1 18 Jul 2026 08:54AM UTC 27
91.23
GitHub Action Run
Source Files on build 29638217438
  • Tree
  • List 27
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • Github Actions Build #29638217438
  • 5e9e4bb8 on github
  • Prev Build on main (#29611452422)
  • Next Build on main (#29639334259)
  • Delete
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