Skip to content

Test data integrity by comparing against an Oracle running in parallel

License

Notifications You must be signed in to change notification settings

scylladb/gemini

Repository files navigation

Gemini

An automatic randomized testing suite for Scylla and Apache Cassandra.

How does Gemini work?

Gemini operates on two clusters, a system under test (SUT) and a test oracle, by generating random mutations (INSERT, UPDATE) and verifying them (SELECT) using the CQL protocol and query language. As the mutations are performed on both systems, their client-visible state is assumed to be the same, unless either of the systems (usually system under test) have bugs. If a verification step fails, Gemini reports the CQL query and its results for further analysis.

Getting started with Gemini

TLDR: Running with default arguments

  1. Download a release from http://downloads.scylladb.com/gemini/

  2. Make sure you have two scylla clusters setup from here on referred to as ORACLE_CLUSTER and TEST_CLUSTER

  3. Unzip the tarball and run ./gemini --oracle-cluster=<ORACLE_CLUSTER> --test-cluster=<TEST_CLUSTER>

Enjoy!

Further CLI arguments

Execute ./gemini --help to see the entire list of arguments available. Their explanation in some detail is available the CLI arguments.

Features

  • Random schema generation
  • Data generation using uniform, normal, and zipf distributions
  • Materialized views
  • Secondary indexes
  • Counters

Contributing

Gemini is already being used for testing Scylla releases, but there's still plenty to do. To contribute to Gemini, please fork the repository and send a pull request.

Documentation

License

Gemini is distributed under the Apache 2.0 license. See LICENSE for more information.