- tests/acme_event_loop.rs: five integration tests drive the crate's
real ACME path and assert the spawned loop's logged events through a
hand-rolled tracing test subscriber: AccountCacheStore (eager, pre-
network), the Order warn via a plain-HTTP fake directory stub on an
ephemeral 127.0.0.1 port, DeployedCachedCert from a pre-seeded
PKCS#8-key-first PEM chain, CertCacheLoad/AccountCacheLoad errors +
AccountCacheStore warn from an ENOTDIR-poisoned cache path, and
CachedCertParse from a corrupt cached PEM. Event collection is
timeout-bounded, never JoinHandle-bounded (rustls-acme 0.12.1's
stream never terminates — verified against the vendored sources).
- src/server.rs: delete the unreachable debug!("ACME: state machine
ended") line (work item 2: it cannot execute under the
never-terminating stream).
- DirCache's deterministic cache file names (SHA256 over element+NUL*
+ directory URL, base64url-nopad) are recomputed in-test via the
sha2 dependency + a new base64 dev-dependency.
- Explicitly not-covered (work item 4): DeployedNewCert, CertCacheStore
ok+warn, NewCertParse — reachable only through a successful ACME
order (a full fake CA), out of scope at this effort level.
Verification: cargo llvm-cov --all-features line coverage 99.21%
(from 98.26%), server.rs 96.08% -> 98.85% lines / 100% functions;
cargo test (93 passed), --all-features (123 passed), --features acme;
clippy (default + all-features, -D warnings); fmt; doc. The event-loop
suite is stable across five consecutive runs.
port-identity-types (src/identity.rs):
- TlsIdentity (four variants), Ed25519SecretKey, AcmeDirectory ported
verbatim from alknet-core config.rs; OQ-TLS-02 + server-only docs
on the variants; 9 in-module tests incl. Debug-no-leak
- dep decision: rand_core 0.6 (+getrandom) with ed25519-dalek
rand_core feature, NOT rand (lockfile rand 0.10/rand_core 0.10
traits are incompatible with ed25519-dalek 2.2's CryptoRngCore);
rand stays out of the tree entirely
port-fingerprint (src/fingerprint.rs):
- fingerprint_from_cert_der, extract_ed25519_raw_key_from_spki,
DerParser ported verbatim; production code sha2 + manual DER
(+hex for the normalized formats)
- 16 tests: 7 ported + 9 new malformed-DER edges (the extraction
had none despite the invariant naming them)
- empty-input behavior: matches extraction's actual code (always
Some via the SHA-256 fallback); doc records the deviation from
the stale None claim
port-pem-signing (src/pem.rs, src/signing.rs):
- load_cert_chain/load_private_key remapped to TlsError::CertLoad
per ADR-002; InvalidData no-key path kept
- Ed25519SigningKey rewired to crate::identity::Ed25519SecretKey
(the one intentional change); rcgen PEM round-trip test added
lib.rs re-export block: fingerprint + pem + signing + identity lines
landed; server/client/credentials pending their port tasks
Verification: cargo test (36), cargo test --all-features (37),
clippy -D warnings (default+all-features), fmt --check, feature
checks (noq/tcp/acme) — all green
- rust-version 1.85 -> 1.88 (ecosystem-wide resolution from the audit
sessions; matches noq 1.2's floor, sits below iroh 1.91)
- Cargo.lock: time 0.3.36 pin removed (existed only to keep the 1.85
claim satisfiable); tree re-floated to current
- phase-0: MSRV thread marked RESOLVED; OQ-TLS-08 narrowed to the
quinn->noq feature-rename half; lesson recorded (rust-version is
passive metadata — claims must be compile-checked, not assumed)
Verified: cargo test, test --all-features, clippy -D warnings,
fmt --check, rustup run 1.88 cargo check