About
The goal of apollo-smith
is to generate valid GraphQL documents by sampling
from all available possibilities of GraphQL grammar.
We've written apollo-smith
to use in fuzzing, but you may wish to use it for
anything that requires GraphQL document generation.
apollo-smith
is inspired by bytecodealliance's wasm-smith
crate, and the
article written by Nick Fitzgerald on writing test case generators in Rust.
This is still a work in progress, for outstanding issues, checkout out the apollo-smith label in our issue tracker.
Using apollo-smith
with cargo fuzz
Define a new target with cargo fuzz
,
$ cargo fuzz add my_apollo_smith_fuzz_target
and add apollo-smith
to your Cargo.toml:
## fuzz/Cargo.toml
[]
= "0.1.3"
It can then be used in a fuzz_target
along with the arbitrary
crate,
// fuzz/fuzz_targets/my_apollo_smith_fuzz_target.rs
use fuzz_target;
use Unstructured;
use DocumentBuilder;
fuzz_target!;
and fuzzed with the following command:
$ cargo +nightly fuzz run my_apollo_smith_fuzz_target
Using apollo-smith
with apollo-parser
You can use apollo-parser
to generate valid operations in apollo-smith
. This
can be done with the parser-impl
feature flag.
## Cargo.toml
[]
= { = "0.1.1", = ["parser-impl"] }
use fs;
use Parser;
use ;
use ;
/// This generate an arbitrary valid GraphQL operation
Feature flags
Enable parser-impl
feature in apollo-smith
is used to convert
apollo-parser
types to apollo-smith
types. This is useful when you require
the test-case generator to generate documents based on a given schema.
## Cargo.toml
[]
= { = "0.1.1", = ["parser-impl"] }
Limitations
- Recursive object type not yet supported (example :
myType { inner: myType }
)
License
Licensed under either of
- Apache License, Version 2.0 (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.