The suite tests about half of the published API. Seamware proposes to bring it to every operation, every URL parameter and every status code of TS 104-176. The work goes in as about 50 small coverage MRs and 19 fix MRs, each one small enough to review and merge in a day or two. The last one is merged by the end of February 2027, which leaves March to August for scripts that run the suite against several real brokers, and September for the final measurement and the TTF's documents.
The measurement, operation by operation, is on How much of NGSI-LD does the test suite test?
developMeasured on develop at c16cd2ec with scripts/api_coverage, after the MRs merged since
30 October. The MRs still in review (HEAD, the attribute value, the first fix MRs) are not counted yet. The share of a
broker's code that the suite reaches is measured again at the milestones.
timerel.scripts/api_coverage (MR 1) against
develop.MRs 1, 4 and 7 of the list below were sent on 31 October 2026, to show the size and the description every MR will have. All three
are based on develop and do not depend on each other.
feat/api-coverage: the measurement
script. No Test Case changes.feat/retrieve-attribute:
Retrieve Attribute, 8 Test Cases. Operations 50 → 51, URL parameters 84 → 85,
status codes 135 → 138.feat/context-source-identity:
the context source identity, 1 Test Case. Operations 50 → 51, status codes
135 → 136.Seamware's part of the TTF is task T2, Extend coverage up to version 1.9.1 (September 2026 to February 2027), and a part of task T4, Interoperability Test Automation via Scripted Orchestration (November 2026 to August 2027). The schedule follows the two.
| When | What | Coverage MRs (§7) | Fix MRs (§8) |
|---|---|---|---|
| Nov 2026 | The measurement script, HEAD, the attribute value and the context source identity | 1–8 | 1–7 |
| Dec 2026 | EntityMaps and Snapshots: every operation tested | 9–16 | 8–11 |
| Jan 2027 | The untested parameters and status codes, Query Entities and the temporal queries first | 17–34 | 12–16 |
| Feb 2027 | The rest of the parameters and status codes, then beyond the HTTP resources: notifications, MQTT, q, attribute types, geo, timerel. The last MR merged by 28 February | 35–52 | 17–19 |
| Mar – Aug 2027 | Scripts that set up several real brokers, and the interoperability tests with real brokers (IOP_TP) | ||
| Sep 2027 | The final measurement, the TTF's documents and the report to the group |
That is 52 coverage MRs and 19 fix MRs by the end of February, about four a week. How fast the reviews come back sets the real pace. A doubt about the specification that an MR brings up goes to the weekly NGSI-LD API call (Tuesdays) or to Discord, with the aim of an answer within a week.
develop (MR 1), so that every later MR can be measured the same way.One line per MR. The number in brackets is its number of Test Cases. Those marked ready are on the forge already.
scripts/api_coverage: the measurement script and the TS 104-176 inventory (0) feat/api-coverageRequest With HEAD keyword and HEAD in the documentation generator, plus 061_01: 204 on 16 resources (16) !337 feat/head-success061_02: HEAD errors, the same 400 or 404 as the GET, no body (16) !338 feat/head-errorsdatasetId, 400 and 404 (8) feat/retrieve-attributefeat/retrieve-attribute-valueobservedAt, errors (9); after Retrieve Attribute feat/set-attribute-valuefeat/context-source-identity/info/sourceIdentity: 204, and the 404 of the GET (6) !339 feat/head-attribute-value/entityMaps/, retrieve, 400 and 404 (8)/entityMaps/, plus HEAD (6)/temporal/entityMaps, GET, POST and HEAD (8)/entityMaps/{entityMapId} (10)lang and collation (8)geometryProperty, orderGeometry and orderFrom (10)entityMap and entityMapLifetime, 201 (6)containedBy, csf and splitEntities, 203 (10)/entityOperations/query): 201, 203 and 400 (6)type, datasetId and containedBy (8)entityMap and entityMapLifetime, 201 and 203 (6)format, lang, observedAt and options (10)type on the eight single-entity writes (8)idPattern, scopeQ, csf, splitEntities, 207 (8)/types/{type}, /attributes/ and /attributes/{attrId} (6)lang, collation, expandValues and jsonKeys (10)scopeQ, csf, splitEntities, entityMap, 201 and 203 (10)datasetId and lang, 203 (6)pick, omit, lang and endTimeAt (8)geometryProperty, scopeQ and csf (6)limit and 409 (4)core, 400 and 422 (5)scripts/api_coverage (0)scripts/api_coverage: from the request bodies, which attribute types and which sub-attributes, such as unitCode and valueType, the suite sends (0); suggested in the review of !326normalized, concise and keyValues, plus the attribute selection (12)showChanges and sysAttrs (10);, | and parentheses (15)near with minDistance and maxDistance, equals and disjoint (12)within, contains, intersects and overlaps on every geometry type (15)timerel: before, after and between on observedAt, createdAt and modifiedAt (12)Steps 4 and 5 also have parameters and status codes beyond the ones named here. Each of those gets an MR of its own, once the ones in this list are in.
Running the suite against a broker, Test Cases were found whose expectation contradicts TS 104-175 or TS 104-176,
or whose setup or teardown is incomplete. On today's develop they are 132 Test Cases. Their fixes go in
as a list of their own, the same way: one theme per MR, at most about 15 Test Cases, each one with the clause it
follows. Those marked rework were sent once and closed in favour of a forge issue; they come back changed
as the review asked.
BadRequestData; Replace and Merge without an id; an empty attribute name in a temporal path; Delete Entity without an id (5)@context and Content-Type do not match is a 400 for the whole request (2) !341 - the API call of 10 November kept the 207 of a per-entity errorexpiresAt removed with urn:ngsi-ld:null (2) !342q in a JSON body is not URL-encoded (1) !343021_25 with both entities, 021_08 only the matching instances (2) !346020_13, 020_14 (12) !347021_15, 021_16 (9) !348037: entity-id matching, a real polygon for within, three-page pagination (9) !350033_01_02 and the exclusive and redirect batch setups (12) !357047, part 1: the initial notification (§12.4.7), the CSR ids, timesFailed (8) !358047, part 2: the triggers, the @context on PATCH (10) !359D011: the @context in a POST body, the forwarded pick (14)D001 to D005, D010 and D016 (15)D018_01 on a redirect registration, where 508 is the answer (1) !360logUtils: the console argument is documented but ignored, every request goes to the terminal (0) !356attributeNames or as the deprecated propertyNames and relationshipNames (12) !349041_03; the @context tests' ${uri} - already fixed on develop (4) !361020_17 to 020_20, 008_01 (7)They go in between the coverage MRs of section 7, a few at a time, so that neither list waits for the other.
The interoperability Test Cases with several real brokers (IOP_TP) have a plan of their own:
Interoperability tests with real brokers.