GithubHelp home page GithubHelp logo

fuzzer-2's Introduction

Dolt Fuzzer

This tool has the core ability to randomly generate a collection of Dolt repositories, and to perform some kind of action(s) on them. This is for the purpose of fuzzing Dolt. All generated repositories will be created based on the parameters from the configuration file.

Commands are a way to interact with the generated repositories in some way, or to influence the generation itself. If no command is given to the fuzzer, then a repository is generated as mentioned earlier. However, commands may hook into the generation phase or provide a test routine. For more information on the commands, please view the README in the relevant folder.

Configuration

General Configurable Options

  • Invalid Name Regexes
    • Branches
    • Tables
    • Columns
    • Indexes
    • Constraints
  • Amounts
    • Branches
    • Tables
    • Primary Keys
    • Columns
    • Indexes
    • Foreign Key Constraints
    • Rows
    • Index Delay
  • Statement Distribution
    • INSERT
    • REPLACE
    • UPDATE
    • DELETE
  • Interface Distribution
    • CLI Query
    • CLI Batch
    • SQL Server
    • Consecutive Range
  • Options
    • Dolt Version/Hash
    • Auto GC
    • Manual GC
    • Include README Config
    • Enforce Rows Lower Bound on Main Only
    • Logging
    • Port
  • Type Parameters
    • Applicable Types
  • Type Distribution
    • All Types

Section Breakdown

  • Invalid Name Regexes
    • Provides a regex that generated names are matched against. If the name fails the regex, then a new one is generated until a passing name is found. If we try 10,000,000 times and still fail, then we abort the cycle.
  • Amounts
    • Specifies the range for that value in the format [x, y], where x is the lower bound and y is the upper bound (both inclusive). For example, Rows = [10, 1000] means that all generated repositories will contain tables with at least 10 rows but no more than 1000.
    • For Rows, the row target is an approximation, so although the upperbound is set to 1000, it may go over slightly by a few rows in rare instances.
  • Statement Distribution
    • Specifies the rough distribution of the SQL operations. The percentage frequency is determined by the statement's number divided by the sum of all statement' numbers. If a range is given rather than a number, then each cycle will choose a number from the range. A value of 0 will prevent a statement from occurring.
    • It is recommended to set DELETE to a value less than the sum of INSERT and REPLACE, otherwise you may dramatically increase cycle run times.
  • Interface Distribution
    • Specifies the rough distribution of the interface to use for a statement. The percentage frequency is determined by the interface's number divided by the sum of all interfaces' numbers. If a range is given rather than a number, then each cycle will choose a number from the range. A value of 0 will prevent an interface from being used.
    • Consecutive range allows for multiple statements to be sent over an interface. For the server, this will shorten cycle run time. The overall distribution is kept intact, as the larger the consecutive range for an interface, the lower its distribution number until it normalizes.
    • CLI_Query may be set to 0 by the cycle if it is determined that queries would be too long to be passed as an argument.
  • Options
    • These are options that apply to all cycles for this run.
    • Auto GC is whether auto GC is enabled. Manual GC will run gc in rough intervals.
  • Type Parameters
    • Controls the parameter ranges for the listed parameters. All parameter ranges must be valid for the relevant type. For example, setting the length of a VARCHAR to zero is illegal, and will throw an error.
  • Type Distribution
    • Determines the frequency that the type will occur, given as either a number or a range in the format [x, y]. A value of 0 will prevent the type from being used.

fuzzer-2's People

Contributors

coffeegoddd avatar hydrocharged avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.