/* * Copyright (C) 2015 ScyllaDB */ /* * This file is part of Scylla. * * Scylla is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * Scylla is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with Scylla. If not, see . */ #pragma once #include "mutation_reader.hh" using populate_fn = std::function&)>; // Must be run in a seastar thread void run_mutation_source_tests(populate_fn populate); enum are_equal { no, yes }; // Calls the provided function on mutation pairs, equal and not equal. Is supposed // to exercise all potential ways two mutations may differ. void for_each_mutation_pair(std::function); // Calls the provided function on mutations. Is supposed to exercise as many differences as possible. void for_each_mutation(std::function); // Returns true if mutations in schema s1 can be upgraded to s2. inline bool can_upgrade_schema(schema_ptr from, schema_ptr to) { return from->is_counter() == to->is_counter(); } class random_mutation_generator { class impl; std::unique_ptr _impl; public: struct generate_counters_tag { }; using generate_counters = bool_class; explicit random_mutation_generator(generate_counters); ~random_mutation_generator(); mutation operator()(); schema_ptr schema() const; clustering_key make_random_key(); std::vector make_random_ranges(unsigned n_ranges); }; bytes make_blob(size_t blob_size);