Skip to content

Run client protocol tests against the dynamic client too#1233

Merged
yasmewad merged 1 commit into
mainfrom
dynamic-client-protocol-tests
Jun 10, 2026
Merged

Run client protocol tests against the dynamic client too#1233
yasmewad merged 1 commit into
mainfrom
dynamic-client-protocol-tests

Conversation

@mtdowling

Copy link
Copy Markdown
Member

Client protocol tests previously exercised only the codegen path, so the document-backed DynamicClient serialization/deserialization went untested and several bugs went unnoticed. Each @HttpClientRequestTests and @HttpClientResponseTests case now runs twice — once per TestMode (codegen and dynamic). They use suffixed display names: [codegen] and [dynamic].

Harness:

  • Build a dynamic ApiOperation per operation (DynamicTestModels), mirroring DynamicClient, and run every request/response/error case through both models.
  • Isolate setup failures to a single attributable test (FailedGenerationTestCase) instead of aborting the whole method.
  • Bind the mock transport at execution time, not during stream generation, so the two invocations per case don't clobber each other's captured request.
  • Support per-mode suppression via a "[dynamic]"/"[codegen]" suffix on skipTests, plus @ProtocolTest(modes=...) to narrow a whole suite.

Dynamic-path fixes surfaced by the new coverage:

  • Document.equals: compare DOCUMENT-typed values by content instead of always returning false, so document-typed members round-trip.
  • SchemaConverter: honor OriginalShapeIdTrait (with the Unit exception) so renamed input/output shapes serialize under their original wire name (e.g. the restXml root element XmlBlobsRequest), matching codegen.
  • SchemaGuidedDocumentBuilder: preserve null entries in @Sparse maps/lists and drop them otherwise, instead of failing to read a null as a typed value.
  • Comparison: compare Documents with NUMBER_PROMOTION so NaN/Infinity floats are tolerant, matching the typed comparators.

What behavior changes?

Describe the observable difference in behavior before and after this change.

Why is this change needed?

Explain the motivation: bug, feature request, refactor, performance, etc.

How was this validated?

List tests added, benchmarks run, or manual verification performed.

What should reviewers focus on?

Point reviewers to the files or sections that contain the interesting logic.

Additional Links

Related issues, design docs, or prior art.


By submitting this pull request, I confirm that my contribution is made under the terms of the Apache 2.0 license.

Client protocol tests previously exercised only the codegen path, so the
document-backed DynamicClient serialization/deserialization went untested
and several bugs went unnoticed. Each @HttpClientRequestTests and
@HttpClientResponseTests case now runs twice — once per TestMode (codegen
and dynamic). They use suffixed display names: `[codegen]` and `[dynamic]`.

Harness:
- Build a dynamic ApiOperation per operation (DynamicTestModels), mirroring
  DynamicClient, and run every request/response/error case through both models.
- Isolate setup failures to a single attributable test
  (FailedGenerationTestCase) instead of aborting the whole method.
- Bind the mock transport at execution time, not during stream generation, so
  the two invocations per case don't clobber each other's captured request.
- Support per-mode suppression via a "[dynamic]"/"[codegen]" suffix on
  skipTests, plus @ProtocolTest(modes=...) to narrow a whole suite.

Dynamic-path fixes surfaced by the new coverage:
- Document.equals: compare DOCUMENT-typed values by content instead of always
  returning false, so document-typed members round-trip.
- SchemaConverter: honor OriginalShapeIdTrait (with the Unit exception) so
  renamed input/output shapes serialize under their original wire name (e.g.
  the restXml root element XmlBlobsRequest), matching codegen.
- SchemaGuidedDocumentBuilder: preserve null entries in @Sparse maps/lists and
  drop them otherwise, instead of failing to read a null as a typed value.
- Comparison: compare Documents with NUMBER_PROMOTION so NaN/Infinity floats
  are tolerant, matching the typed comparators.
@yasmewad yasmewad merged commit dd53b24 into main Jun 10, 2026
5 checks passed
@yasmewad yasmewad deleted the dynamic-client-protocol-tests branch June 10, 2026 17:01
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.

2 participants