fuzzer

a fuzzy input creator for tests

fuzzer

A fuzzer for testing. This implements mutation fuzzing, in which an expect input is mutated (changed) many times in order to trigger unexpected behavior or crashes.

npm install fuzzer

Generate a mutated version of an object. This does not modify the object directly, but returns a modified copy. This mutation will increment and decrement numbers, randomize arrays, remove properties, and more.

Generate a mutated version of a string, with reversed, removed, and added characters.

Seed the random number generator random-js that determines mutations. By calling this function with the same number, you can generate the same mutations consistently.

If you install this globally it provides a single cli utility called fuzz-get.

npm install -g fuzzer
fuzz-get "./bin/fuzz-get "http://localhost:8889/foo/bar/your/rest/api"

This will run mutated requests against your server continously - it will mutate the path requested into other incorrect requests, and log in the form:

HTTP200:/foo/bar/your/rest/api
HTTP404:/foo/baryour/rest/api

So you can pipe into | grep "HTTP500" if you wish.

var test = require('tap').test,
    fuzzer = require('fuzzer');
 
fuzzer.seed(0);
 
test('something', function(t) {
    var generator = fuzzer.mutate.object(yourTestingInput);
    for (var i = 0; i < 1000; i++) {
        t.doesNotThrow(function() {
            yourLibrary(generator());
        });
    }
});