docs: testing.md with testcases to keep in mind
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
# Testing Scenarios (Validation Apps)
|
||||
|
||||
These apps test HLC ordering, gossip convergence, and conflict resolution.
|
||||
|
||||
## Level 1: Pixel Board (Visual Convergence)
|
||||
|
||||
50x50 collaborative grid where users paint pixels.
|
||||
|
||||
**Data Model:** `/canvas/{x}_{y}` → `{hex_color}`
|
||||
|
||||
**Tests:**
|
||||
- Visualize sync disagreements immediately
|
||||
- High write volume (log performance)
|
||||
- Simultaneous writes (HLC tiebreaker)
|
||||
|
||||
**Scenario:** Node A paints all red (offline), Node B paints all blue (offline), connect. Board must be identical on both.
|
||||
|
||||
---
|
||||
|
||||
## Level 2: Shared Grocery List (LWW Trap)
|
||||
|
||||
List with add/check/delete operations.
|
||||
|
||||
**Data Model:** `/list/{item_uuid}` → `{ name, status: "needed"|"bought" }`
|
||||
|
||||
**Tests:** Exposes LWW weakness (resurrection bug)
|
||||
|
||||
**Scenario:**
|
||||
1. Alice syncs, sees "Milk", goes offline, marks "bought"
|
||||
2. Bob syncs, sees "Milk", deletes it
|
||||
3. Reconnect
|
||||
|
||||
**Result:** Item either resurrects or vanishes based on timestamp. Forces tombstone pattern.
|
||||
|
||||
---
|
||||
|
||||
## Level 3: Chat Room (Causal Ordering)
|
||||
|
||||
Group chat application.
|
||||
|
||||
**Data Model:** `/chat/{channel}/{timestamp}_{node_id}` → `{ msg }`
|
||||
|
||||
**Tests:**
|
||||
- HLC causal ordering
|
||||
- Prefix queries (redb range scans)
|
||||
- Gap detection via vector clocks
|
||||
|
||||
**Scenario:**
|
||||
1. Node A sends "Msg 1"
|
||||
2. Node B sees it, replies "Msg 2"
|
||||
3. Node C comes online, connects only to B
|
||||
|
||||
**Success:** Node C receives "Msg 1" before/with "Msg 2" (transitive sync).
|
||||
|
||||
---
|
||||
|
||||
## Level 4: Chaos Monkey (Automated Simulation)
|
||||
|
||||
Tokio-based simulation harness with in-memory networking.
|
||||
|
||||
**Setup:**
|
||||
- 5 node threads in one process
|
||||
- In-memory network (tokio channels)
|
||||
- Chaos monkey randomly: cuts connections, writes random keys, sleeps threads
|
||||
|
||||
**Assertion:**
|
||||
```rust
|
||||
let state_0 = nodes[0].dump_state_hash();
|
||||
for i in 1..5 {
|
||||
assert_eq!(state_0, nodes[i].dump_state_hash());
|
||||
}
|
||||
```
|
||||
|
||||
Catches HLC clamping edge cases that manual testing misses.
|
||||
Reference in New Issue
Block a user