Open SimonSapin opened 2 months ago
This PR is draft because I’m unsure if this generator should live inside apollo-rs. I think eventually yes, but at first we’ll likely want to tweak it a lot and going through a crates.io release for every change would be a significant obstacle.
For a given valid schema, use a byte string typically provided by cargo-fuzz as a source of entropy to deterministically generate a valid executable document:
Instead of using the
arbitrary
crate, parts of it are forked for reasons documented at the top of the newentropy.rs
file.At a high level, it creates a minimal operation then keeps adding selections to it until entropy is exhausted. As a result, providing a longer byte string tends to create larger documents. Hopefully this helps fuzzers better explore the space of possible documents, compared to apollo-smith which uses code like
u.int_in_range(1..=5)
to decide how many items to generate regardless of remaining entropy.With this approach I believe we could enumerate all possible valid documents up to a certain "size" with bounded amounts of entropy. We’re not quite there yet for at least a few reasons: