38 lines
1.4 KiB
Markdown
38 lines
1.4 KiB
Markdown
# Test Cases
|
|
|
|
## Timestamp / HLC
|
|
|
|
### Time-traveling node applies own entry
|
|
- Node X has clock at year 2050
|
|
- Node X creates entry, signs, broadcasts
|
|
- All nodes (including X) should clamp to parent.hlc + 1
|
|
- Verify: X's state.db matches other nodes' state.db
|
|
- Failure mode: X applies using 2050, others use 101 → divergence
|
|
|
|
### Clamping with no parent (genesis entry)
|
|
- Node X creates first-ever entry with future timestamp
|
|
- All nodes should DROP the entry (no parent to anchor to)
|
|
- Verify: entry is not applied anywhere
|
|
|
|
### Out-of-order entry arrival
|
|
- Entry B (hlc=91) arrives after Entry A (hlc=100)
|
|
- Both write to same key
|
|
- Verify: A's value wins (LWW with timestamp tracking)
|
|
- Verify: no rollback needed, just comparison on apply
|
|
|
|
### Clock drift detection
|
|
- Node consistently sees its entries clamped
|
|
- Verify: UI alerts user about clock being ahead
|
|
|
|
### Clock in past (Pi without RTC, boots at 1970)
|
|
- Node X has clock at 1970
|
|
- Node X receives entries from peers with HLC around 2024
|
|
- Standard HLC: X uses max(1970, peer_hlc + 1) = peer_hlc + 1
|
|
- Verify: X's entries slot in correctly (no special handling needed)
|
|
|
|
### Pre-flight peer sanity check (future clock)
|
|
- Node X has clock at 2050
|
|
- Before creating entry, X compares local_clock to max_peer_hlc
|
|
- If local_clock > max_peer_hlc + MAX_DRIFT, use max_peer_hlc + 1
|
|
- Verify: X's entry uses sane timestamp, all nodes agree
|