## Wire Protocol Fuzz Tests import std/unittest import std/random import std/strutils import barabadb/protocol/wire suite "Wire Protocol Fuzz": test "deserializeValue survives random bytes": var rng = initRand(12345) for i in 0..<500: var buf = newSeq[byte](rng.rand(1..256)) for b in buf.mitems: b = byte(rng.rand(0..255)) var pos = 0 try: discard deserializeValue(buf, pos) except: discard # Exceptions are expected for garbage input test "deserializeValue survives truncated buffers": var rng = initRand(12346) for i in 0..<200: # Start with a valid-ish prefix then truncate var buf: seq[byte] = @[byte(rng.rand(0..12))] # random FieldKind let extra = rng.rand(0..64) for j in 0..= 12 test "serializeMessage roundtrip with random payloads": var rng = initRand(12350) for i in 0..<100: let reqId = uint32(rng.rand(int64(high(uint32)))) var msg = WireMessage( header: MessageHeader(kind: mkQuery, length: uint32(rng.rand(0..1000)), requestId: reqId), payload: newSeq[byte](rng.rand(0..200)) ) for j in 0..= 12 test "makeErrorMessage with large IDs": var rng = initRand(12351) for i in 0..<100: let reqId = uint32(rng.rand(int64(high(uint32)))) let err = makeErrorMessage(reqId, uint32(rng.rand(0..255)), "fuzz") check err.len > 0