[fix][test] Made ProtobufNativeSchemaTest.testSchema order-independent#24805
Merged
lhotari merged 1 commit intoapache:masterfrom Nov 11, 2025
Merged
[fix][test] Made ProtobufNativeSchemaTest.testSchema order-independent#24805lhotari merged 1 commit intoapache:masterfrom
lhotari merged 1 commit intoapache:masterfrom
Conversation
3146821 to
1fbb84e
Compare
lhotari
reviewed
Oct 2, 2025
pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaTest.java
Outdated
Show resolved
Hide resolved
d39852c to
c84ac39
Compare
Contributor
Author
|
@lhotari I incorporated your suggestions and made the code easier to follow. All checks passed on my fork: LucasEby#1 |
lhotari
reviewed
Oct 14, 2025
pulsar-client/src/test/java/org/apache/pulsar/client/impl/schema/ProtobufNativeSchemaTest.java
Show resolved
Hide resolved
c84ac39 to
3473283
Compare
3473283 to
6f31a65
Compare
Member
|
Closing and reopening to trigger the CI to run with latest master branch since updating PR branch wasn't allowed (please create PRs in a way where it's allowed, this is the default). |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## master #24805 +/- ##
============================================
- Coverage 74.34% 74.33% -0.01%
+ Complexity 33842 33667 -175
============================================
Files 1912 1920 +8
Lines 149072 150153 +1081
Branches 17299 17418 +119
============================================
+ Hits 110833 111622 +789
- Misses 29440 29646 +206
- Partials 8799 8885 +86
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
manas-ctds
pushed a commit
to datastax/pulsar
that referenced
this pull request
Nov 13, 2025
apache#24805) (cherry picked from commit b8d0f14) (cherry picked from commit ec4eef5)
srinath-ctds
pushed a commit
to datastax/pulsar
that referenced
this pull request
Nov 14, 2025
apache#24805) (cherry picked from commit b8d0f14) (cherry picked from commit ec4eef5)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #24804
Motivation
In ProtobufNativeSchemaTest.testSchema, the json's contents and the FileDescriptorSet field's contents do not have a deterministic order but the hardcoded string assertion assumes a deterministic order. The json serializer did not guarantee attribute order and inside FileDescriptorSet the contents can also be in different orders due to different generation paths or environments producing the contents in different orders despite the logical content being the same. Since the original test compared the raw strings/trees "as-is", harmless re-ordering could flip the test from pass to fail without any real schema change.
Modifications
We no longer compare raw strings/trees "as-is". Instead the fileDescriptorSet field is base64-decoded into a FileDescriptorSet, then converted into a JSONObject. We compare the expected and actual descriptors with JsonAssert in NON_EXTENSIBLE mode, which ignores field ordering but forbids missing or extra fields.
Next, we remove FileDescriptorSet from the outer JSON and compare the remainder in the NON_EXTENSIBLE mode again. We implemented this two stage approach because JSON assertion does not re-order the inner contents of the FileDescriptorSet (compares directly as strings instead) even if though it's decoded contents can be re-ordered.
By decoding and normalizing fileDescriptorSet first, we ensure the test remains robust to nondeterministic ordering inside the descriptor set, while still validating the schema structure strictly. This change keeps the spirit of the original test while eliminating failures caused solely by allowed reordering.
NOTE: Some additional assertTrue and assertFalse assertions were also added to ensure the test remains robust in the event that the hardcoded string is ever modified for some reason. This will prevent someone from modifying the string and then forgetting to modify the test afterwards, thus causing the fileDescriptorSet assertion to incorrectly pass from comparing empty strings.
Verifying this change
This change is already covered by existing tests, such as
org.apache.pulsar.client.impl.schema.ProtobufSchemaTest#testSchema.Does this pull request potentially affect one of the following parts:
If the box was checked, please highlight the changes
Documentation
docdoc-requireddoc-not-neededdoc-completeMatching PR in forked repository
PR in forked repository: LucasEby#1