dpol1 opened a new pull request, #3146:
URL: https://github.com/apache/hugegraph/pull/3146
## Purpose of the PR
- close #3145 (part of the groundwork discussed in #3110)
`LongEncoding` encodes ids and sortable keys, so its exact behavior is a
compatibility contract, including the intentional overflow wrapping around
`Long.MIN_VALUE` and inputs the decoder accepts but the encoder never produces.
Today that contract exists only implicitly in the implementation. This PR pins
it in a committed, implementation-independent corpus that any port or refactor
can be checked against line by line.
## Main Changes
- `LongEncodingGoldenGenerator` (test scope): produces the corpus by running
the current implementation and recording, for each input, the exact output or
the exception class. Deterministic: fixed value sets plus a fixed random seed,
duplicate lines dropped.
- `longencoding-golden.txt` (test resource): 3940 cases, plain ASCII, tab
separated with `\uXXXX` escapes. Covers full-range round trips including
`Long.MIN_VALUE`/`MAX_VALUE`, non-canonical decode inputs (`00` decodes to MIN
while encode produces `010`), arbitrary UTF-16 decode input including
surrogates, the error taxonomy (`IllegalArgumentException` vs
`NumberFormatException` vs NPE), and length limits.
- `LongEncodingGoldenTest`: two checks. It replays every corpus line against
the implementation, and it regenerates the corpus in memory to assert the
committed file matches the generator output exactly, so generator and resource
cannot drift apart.
- Both tests registered in `UnitTestSuite` so commons CI executes them.
Review guide: the review surface is the generator (case selection, ~370
lines), the corpus format documented in the file header, and the two-way check
mechanics. The corpus file is generated output verified by
`testCorpusMatchesGenerator` and does not need line-by-line review.
Contract boundaries: six operations (`encodeSortable`/`decodeSortable`,
`encodeB64`/`decodeB64`, `encodeSignedB64`/`decodeSignedB64`). Exact output
strings and decoded values are contract; the exception class is contract, the
exception message deliberately is not. No production code changes.
## Verifying these changes
- [x] Need tests and can be verified as follows:
- `mvn test -pl hugegraph-commons/hugegraph-common -Dtest=UnitTestSuite
-DskipCommonsTests=false` on JDK 11 (the commons CI toolchain): 345 tests, the
only errors are 2 environment NPEs in `MachineInfoTest` that reproduce
identically on a clean master checkout in the same environment.
- Tamper check: altering one byte of the corpus fails both new tests;
regenerating restores green.
- `apache-rat:check`, `checkstyle:check` and `git diff --check` are
clean.
## Does this PR potentially affect the following parts?
- [x] Nope
## Documentation Status
- [x] `Doc - No Need` (user docs unaffected; the technical contract is
documented in #3145, the corpus file header, and this PR)
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]