@@ -1,3 +1,26 @@
11# roboservant
22
3+Automatically fuzz your servant apis in a contextually-aware way.
4+
35
6+
7+# why?
8+
9+Servant gives us a lot of information about what a server can do. We
10+use this information to generate arbitrarily long request/response
11+sessions and verify properties that should hold over them.
12+
13+# why not servant-quickcheck?
14+
15+[servant-quickcheck](https://hackage.haskell.org/package/servant-quickcheck)
16+is a great package and I've learned a lot from it. Unfortunately,
17+there's a lot of the state space it can't explore: modern webapps are
18+full of pointer-like structures, whether they're URLs or database
19+keys/uuids. servant-quickcheck demands that you be able to generate
20+these without context via Arbitrary: good luck exploring an API that
21+requires you to generate just the right UUID to hit non-trivial code.
22+
23+roboservant avoids this by using
24+[quickcheck-state-machine](https://github.com/advancedtelematic/quickcheck-state-machine#readme),
25+which models the dynamic state in such a way that we can use results
26+of previous calls.