16. Testing (Connectathon approach)
16.1 Actors
| Actor | Role |
|---|---|
Federation Tier (Gateway) |
System under test for the gateway profile; presents the openEHR Query API, resolves identity, fans out, combines, routes follow-ups. |
Node (openEHR CDR + Query API) |
System under test for the node profile; runs standard AQL scoped to an |
PIX Manager |
Resolves |
Localization service (optional) |
Returns candidate nodes (XCPD ITI-55; or a regional service). MAY additionally return a consent decision if the deployment under test is consent-aware (§14.3). |
Consent service (optional) |
Supplies the Step-1 pre-filter decision where a deployment has one (N27a). Absent in a minimal conformant deployment; consent is then enforced at the nodes alone. |
Client (Consumer) |
Drives queries and follow-ups; verifies it needs no federation-specific syntax. |
16.2 Two conformance profiles
A system declares conformance to one or both profiles (mirroring the Exchange-Routing IG’s two CapabilityStatements, "Intermediary" and "Destination Server"):
-
Federation-Gateway - implements the transparent façade and the ITS-REST surface, Step-1 resolution, query-side identifier hygiene, fan-out, combine/annotate, dedup policy, completeness/timeout semantics, follow-up read/write routing, and auth conveyance (N1–N43).
-
Federation-Node - implements a standard openEHR Query API and ITS-REST scoped by
ehr_id, passes through node-level errors, honours per-node authorization/consent, never requiressubject, and satisfies the federation’s admission conditions (§12b.2).
The Federation-Node profile is thin because the specification’s scope stops at a node’s interface; the asymmetry with the gateway profile is a scope boundary. A node must be invocable on ehr_id alone, must not require subject, must enforce consent before it releases data, and must meet the identifier-integrity conditions of §12b.2. The specification does not cover node internals: it does not mandate where a directly identifying identifier is stored (N34), does not constrain what a node holds (N5), and leaves the wider admission profile unsettled (§12b.3), so that a federation can admit CDRs it did not design.
The thin profile has a consequence for scoring. A conformance point marked Node or Operator in §17 is scored against that actor. CP-18, CP-19 and CP-27 are node obligations; CP-20 and CP-33a are operator obligations verified at admission or in the registry; and a gateway is not marked down for any of them. A fuller node profile is a candidate for a future release (§18).
16.3 Test tracks
| # | Track | Asserts | Key requirements |
|---|---|---|---|
Transparency |
An unmodified openEHR client queries the gateway with a plain patient AQL and gets a single-CDR-shaped result (no endpoint columns unless selected); |
||
subject → ehrId resolution |
The gateway resolves |
||
Directed / endpoint pin |
|
||
Partial results |
Unresponsive / |
||
Dedup + DISTINCT |
Default pass-through leaves duplicates; |
||
Follow-up read/write routing |
A follow-up read/write for a row routes to the owning CDR via |
||
Auth conveyance + consent-deny |
The gateway authenticates onward and conveys client identity (OAuth 2.0 client-credentials with an RFC 7523 signed JWT client assertion, verified against the gateway’s JWKS, whose location the gateway publishes in |
||
PMIR merge/split (ITI-93/94) (provisional) |
An identity merge/split at the identity source propagates so a subsequent federated query resolves the surviving identity. (Hooks reserved; full propagation MAY be deferred, §18.) |
||
REST surface & self-description |
An unmodified openEHR client, configured only with the registry base URL, performs a read and a write through the gateway - no |
||
Identifier leakage (adversarial) |
The same directly identifying identifier is supplied four ways in the query surface ( |
||
Integrity: |
Gateway: a deliberately seeded duplicate |
Track 8 is provisional. Its subject matter, full propagation of PMIR identity merges and splits, MAY be deferred to a future release (§18), and the track is numbered here so the hooks have somewhere to be asserted once it is not. It is accordingly the only track that no conformance point in §17 scores. A claim of "passes tracks 1–11" is not weakened by its omission, and a scorer should not read its absence as a gap. Equally, a deferred item should not be taken to carry the same weight as the tracks around it.
Tracks 10 and 11 are adversarial, designed to fail a gateway that is merely plausible. Track 10 in particular should be run with node-side wire capture and not the gateway’s own logs, because a gateway that sanitises its logs but not its dispatches passes the wrong test. The track cuts both ways: it fails a gateway that leaks an identifier into a dispatched query, and a gateway that takes it upon itself to rewrite a commit body.
16.4 Process
Run a peer-to-peer test matrix (each Gateway against each Node, each Node against each PIX Manager), with Gazelle-style pass/fail logging per test track and conformance point. Each executed test records the conformance points it exercised (§17), so coverage is auditable.