6.2 KiB
Test Files That Need hash_options Fixes
How to Check Compilation Errors
Use the compile_single_v2.py script to check individual files:
# Check compilation errors for a specific file
./compile_single_v2.py src/test/app/SomeFile_test.cpp -e 3 --errors-only
# Get just the last few lines to see if it compiled successfully
./compile_single_v2.py src/test/app/SomeFile_test.cpp 2>&1 | tail -5
Originally Fixed Files (11 files)
-
src/test/app/Import_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/app/LedgerReplay_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/app/Offer_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/app/SetHook_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/app/SetHookTSH_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/app/ValidatorList_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/app/XahauGenesis_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options, keylet::fees() needs hash_options
-
src/test/consensus/NegativeUNL_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/consensus/UNLReport_test.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/jtx/impl/balance.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
-
src/test/jtx/impl/Env.cpp
- Status: Needs fixing
- Errors: keylet functions missing hash_options
Fix Strategy
Each file needs:
- keylet function calls updated to include hash_options{ledger_seq, classifier}
- The ledger_seq typically comes from env.current()->seq() or view.seq()
- The classifier matches the keylet type (e.g., KEYLET_ACCOUNT, KEYLET_FEES, etc.)
Progress Tracking
- Import_test.cpp - FIXED
- LedgerReplay_test.cpp - FIXED
- Offer_test.cpp - FIXED
- SetHook_test.cpp - FIXED
- SetHookTSH_test.cpp - FIXED
- ValidatorList_test.cpp - FIXED (sha512Half calls updated with VALIDATOR_LIST_HASH classifier)
- XahauGenesis_test.cpp - FIXED (removed duplicate hash_options parameters)
- NegativeUNL_test.cpp - FIXED
- UNLReport_test.cpp - FIXED
- balance.cpp - FIXED
- Env.cpp - FIXED
All original 11 files have been successfully fixed!
Remaining Files Still Needing Fixes (9 files)
Status: NOT STARTED
These files still have compilation errors and need hash_options fixes:
-
src/test/jtx/impl/uritoken.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/jtx/impl/uritoken.cpp -e 3 --errors-only
-
src/test/jtx/impl/utility.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/jtx/impl/utility.cpp -e 3 --errors-only
-
src/test/ledger/Directory_test.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/ledger/Directory_test.cpp -e 3 --errors-only
-
src/test/ledger/Invariants_test.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/ledger/Invariants_test.cpp -e 3 --errors-only
-
src/test/overlay/compression_test.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/overlay/compression_test.cpp -e 3 --errors-only
-
src/test/rpc/AccountSet_test.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/rpc/AccountSet_test.cpp -e 3 --errors-only
-
src/test/rpc/AccountTx_test.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/rpc/AccountTx_test.cpp -e 3 --errors-only
-
src/test/rpc/Book_test.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/rpc/Book_test.cpp -e 3 --errors-only
-
src/test/rpc/Catalogue_test.cpp
- Status: Needs fixing
- Check errors:
./compile_single_v2.py src/test/rpc/Catalogue_test.cpp -e 3 --errors-only
CRITICAL INSTRUCTIONS FOR FIXING
1. Read the HashContext enum from digest.h
ALWAYS check @src/ripple/protocol/digest.h lines 37-107 for the complete HashContext enum. This enum defines ALL the valid classifiers you can use in hash_options.
2. Understanding hash_options constructor
The hash_options struct (lines 110-126 in digest.h) has TWO constructors:
hash_options(HashContext ctx)- classifier only, no ledger indexhash_options(std::uint32_t li, HashContext ctx)- ledger index AND classifier
3. How to classify each hash operation
For keylet functions:
- Match the keylet function name to the KEYLET_* enum value
- Examples:
keylet::account()→ useKEYLET_ACCOUNTkeylet::fees()→ useKEYLET_FEESkeylet::trustline()→ useKEYLET_TRUSTLINEkeylet::negativeUNL()→ useKEYLET_NEGATIVE_UNLkeylet::UNLReport()→ useKEYLET_UNL_REPORTkeylet::hook()→ useKEYLET_HOOKkeylet::uriToken()→ useKEYLET_URI_TOKEN
For sha512Half calls:
- Validator manifests/lists → use
VALIDATOR_LIST_HASH - Hook code hashing → use
HOOK_DEFINITIONorLEDGER_INDEX_UNNEEDED - Network protocol → use appropriate context from enum
For test environments:
- Use
env.current()->seq()to get ledger sequence (it's already uint32_t, NO CAST NEEDED) - Use
ledger->seq()for Ledger pointers - Use
view.seq()for ReadView/ApplyView references
4. IMPORTANT: Read the entire file first!
When fixing a file, ALWAYS:
- Read the ENTIRE file first (or at least 500+ lines) to understand the context
- Look for patterns of how the test is structured
- Check what types of ledger objects are being tested
- Then fix ALL occurrences systematically
5. Common patterns to fix:
// OLD - missing hash_options
env.le(keylet::account(alice));
// NEW - with proper classification
env.le(keylet::account(hash_options{env.current()->seq(), KEYLET_ACCOUNT}, alice));
// OLD - sha512Half without context
auto hash = sha512Half(data);
// NEW - with proper classification
auto hash = sha512Half(hash_options{VALIDATOR_LIST_HASH}, data);