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

Folders and files

NameName
Last commit message
Last commit date

Latest commit

author
Dmitry Kropachev
Jul 6, 2023
2a125f3 · Jul 6, 2023
Jun 18, 2023
Jul 6, 2023
Jun 11, 2023
Jul 3, 2023
Jun 11, 2023
Jun 22, 2023
Jun 6, 2023
Jul 6, 2023
Nov 28, 2019
Jun 6, 2023
Sep 21, 2020
Jun 20, 2023
Jun 20, 2023

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.