-
Notifications
You must be signed in to change notification settings - Fork 1.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
feat: support time-based and continuous fuzzing and invariant testing #990
Comments
Noting here that it does not seem like proptest supports time-based fuzzing out of the box, so we will have to roll our own - that does look like it is somewhat doable, though. We need to wrap the test runner in some time based executor and continually call |
Proptest is largely unmaintained at this point. There hasn't been an update for over a year, though there is a fork that's made a few fixes—more info here: proptest-rs/proptest#268 I only mention that because two alternative options for implementation include:
|
I think we should consider switching at some point. I looked around but didn't find anything that immediately struck me but I haven't looked much. I think forking and maintaining a fuzzer on top of Cast + Anvil + Forge + supporting stuff (foundry-hardhat, book etc.) is probably stretching resources a bit thin 😄 Will take a look at the ones linked in #387 |
Your input on this thread would be appreciated since it sounds like you all have some direction already proptest-rs/proptest#268 (comment) |
Any progress on this one? |
I'm not familiar with the internals of how proptest is invoked, but I was wondering if the following approach could work: wrap the proptest invokation by repeatedly running proptest for a small number of runs until the time limit has been reached. Each "short run" needs to provide a different random seed (derived from the user-provided random seed) when invoking proptest and the results of all "short runs" need to be aggregated. Feel free to ignore this if the proposed approach doesn't make sense. :) |
proposed way to interrupt runs for fuzz / invariant tests when timer expires proptest-rs/proptest#460 to be applied in addition to using rayon collect / short-circuit on |
I opened up #9394 as a sketch implementation of this feature, open to feedback there. My basic strategy is just to exit before |
Component
Forge
Describe the feature you would like
Right now fuzz campaigns are defined by their number of runs. It’s also useful to instead define campaigns with a
timeout
which specifies the duration of the campaign, with a value of 0 meaning to run indefinitely. This is common in other fuzzers such as Echidna.It would also be helpful to support config via cheat codes as discussed in #744, to allow some fuzz/invariant tests to be defined by number of runs with others defined by a timeout
Additional context
No response
The text was updated successfully, but these errors were encountered: