Skip to content

Conversation

@LucasEby
Copy link
Contributor

@LucasEby LucasEby commented Oct 18, 2025

Fixes #24869

Motivation

Each of the below tests utilized a helper test method (called test) which incorrectly assumed that the json key-value pairs in responseBody would have a deterministic order. The order of key-value pairs is not guaranteed in JSON, however. As a result, the ordering can change due to different environments producing the contents in different orders despite the logical contents being the same. Each of the tests below used this helper to compare the responseBody "as-is" with an incorrect equals method so harmless re-ordering could flip the tests from pass to fail despite the data being semantically the same.

  • org.apache.pulsar.io.http.HttpSinkTest#testGenericRecord
  • org.apache.pulsar.io.http.HttpSinkTest#testKeyValueGenericRecord
  • org.apache.pulsar.io.http.HttpSinkTest#testKeyValuePrimitives

This fix is similar to this other pull request which was previously merged (with the small difference that I used the test library these tests were already utilizing instead): #24821

Modifications

We no longer compare raw strings "as-is" with WireMock.equalTo. Instead, we compare the json structures with WireMock.equalToJson to perform a semantic comparison of the input JSON against the expected JSON as described in their documentation. This ensures the tests pass consistently, even when the serializer outputs fields in a different order.

In essence, these changes keep the spirit of the original tests while eliminating failures caused solely by allowed (but previously unexpected) reordering.

Verifying this change

  • Make sure that the change passes the CI checks.

This change is already covered by existing tests, such as

  • org.apache.pulsar.io.http.HttpSinkTest#testGenericRecord
  • org.apache.pulsar.io.http.HttpSinkTest#testKeyValueGenericRecord
  • org.apache.pulsar.io.http.HttpSinkTest#testKeyValuePrimitives
  • org.apache.pulsar.io.http.HttpSinkTest#testKeyValueGenericRecord

Does this pull request potentially affect one of the following parts:

If the box was checked, please highlight the changes

  • Dependencies (add or upgrade a dependency)
  • The public API
  • The schema
  • The default values of configurations
  • The threading model
  • The binary protocol
  • The REST endpoints
  • The admin CLI options
  • The metrics
  • Anything that affects deployment

Documentation

  • doc
  • doc-required
  • doc-not-needed
  • doc-complete

Matching PR in forked repository

PR in forked repository: LucasEby#6

@github-actions github-actions bot added the doc-not-needed Your PR changes do not impact docs label Oct 18, 2025
@Technoboy- Technoboy- added this to the 4.2.0 milestone Oct 24, 2025
@lhotari
Copy link
Member

lhotari commented Nov 11, 2025

Closing and reopening to trigger a new CI run with a new merge commit internally with latest changes from master branch.

@lhotari lhotari closed this Nov 11, 2025
@lhotari lhotari reopened this Nov 11, 2025
@codecov-commenter
Copy link

codecov-commenter commented Nov 11, 2025

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 75.27%. Comparing base (678db6b) to head (bfb0f78).
⚠️ Report is 59 commits behind head on master.

Additional details and impacted files

Impacted file tree graph

@@             Coverage Diff              @@
##             master   #24872      +/-   ##
============================================
+ Coverage     74.34%   75.27%   +0.92%     
- Complexity    33496    35723    +2227     
============================================
  Files          1913     1920       +7     
  Lines        149315   156043    +6728     
  Branches      17331    18622    +1291     
============================================
+ Hits         111012   117462    +6450     
- Misses        29475    29588     +113     
- Partials       8828     8993     +165     
Flag Coverage Δ
inttests 26.28% <ø> (-0.82%) ⬇️
systests 23.90% <ø> (+0.88%) ⬆️
unittests 74.80% <ø> (+0.93%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.
see 134 files with indirect coverage changes

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@lhotari lhotari merged commit 2463254 into apache:master Nov 11, 2025
107 of 109 checks passed
lhotari pushed a commit that referenced this pull request Nov 11, 2025
lhotari pushed a commit that referenced this pull request Nov 11, 2025
manas-ctds pushed a commit to datastax/pulsar that referenced this pull request Nov 13, 2025
(cherry picked from commit 2463254)
(cherry picked from commit f71ff1e)
srinath-ctds pushed a commit to datastax/pulsar that referenced this pull request Nov 14, 2025
(cherry picked from commit 2463254)
(cherry picked from commit f71ff1e)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug] Nondeterministic JSON ordering in ResponseBody

4 participants