Files
scylladb/test/lib/mutation_assertions.cc
Ernest Zaslavsky d2c5765a6b treewide: Move keys related files to a new keys directory
As requested in #22102, #22103 and #22105 moved the files and fixed other includes and build system.

Moved files:
- clustering_bounds_comparator.hh
- keys.cc
- keys.hh
- clustering_interval_set.hh
- clustering_key_filter.hh
- clustering_ranges_walker.hh
- compound_compat.hh
- compound.hh
- full_position.hh

Fixes: #22102
Fixes: #22103
Fixes: #22105

Closes scylladb/scylladb#25082
2025-07-25 10:45:32 +03:00

132 lines
4.7 KiB
C++

// Copyright (C) 2025-present ScyllaDB
// SPDX-License-Identifier: LicenseRef-ScyllaDB-Source-Available-1.0
#include "mutation_assertions.hh"
#include "keys/clustering_interval_set.hh"
mutation_partition_assertion&
mutation_partition_assertion::is_equal_to(const schema& s, const mutation_partition& other,
const std::optional<query::clustering_row_ranges>& ck_ranges) {
if (ck_ranges) {
mutation_partition_assertion(_schema, _m.sliced(*_schema, *ck_ranges))
.is_equal_to(s, other.sliced(s, *ck_ranges));
return *this;
}
if (!_m.equal(*_schema, other, s)) {
BOOST_FAIL(format("Mutations differ, expected {}\n ...but got: {}",
mutation_partition::printer(s, other), mutation_partition::printer(*_schema, _m)));
}
if (!other.equal(s, _m, *_schema)) {
BOOST_FAIL(format("Mutation inequality is not symmetric for {}\n ...and: {}",
mutation_partition::printer(s, other), mutation_partition::printer(*_schema, _m)));
}
return *this;
}
mutation_partition_assertion&
mutation_partition_assertion::is_not_equal_to(const schema& s, const mutation_partition& other) {
if (_m.equal(*_schema, other, s)) {
BOOST_FAIL(format("Mutations equal but expected to differ: {}\n ...and: {}",
mutation_partition::printer(s, other), mutation_partition::printer(*_schema, _m)));
}
return *this;
}
mutation_partition_assertion&
mutation_partition_assertion::has_same_continuity(const mutation_partition& other) {
if (!_m.equal_continuity(*_schema, other)) {
auto expected = other.get_continuity(*_schema, is_continuous::yes);
auto got = _m.get_continuity(*_schema, is_continuous::yes);
BOOST_FAIL(format("Continuity doesn't match, expected: {}\nbut got: {}, mutation before: {}\n ...and after: {}",
expected, got, mutation_partition::printer(*_schema, other), mutation_partition::printer(*_schema, _m)));
}
return *this;
}
mutation_partition_assertion&
mutation_partition_assertion::is_continuous(const position_range& r, ::is_continuous cont) {
if (!_m.check_continuity(*_schema, r, cont)) {
BOOST_FAIL(format("Expected range {} to be {} in {}", r, cont ? "continuous" : "discontinuous", mutation_partition::printer(*_schema, _m)));
}
return *this;
}
mutation_assertion&
mutation_assertion::is_equal_to(const mutation& other, const std::optional<query::clustering_row_ranges>& ck_ranges) {
if (ck_ranges) {
mutation_assertion(_m.sliced(*ck_ranges)).is_equal_to(other.sliced(*ck_ranges));
return *this;
}
if (_m != other) {
BOOST_FAIL(format("Mutations differ, expected {}\n ...but got: {}", other, _m));
}
if (other != _m) {
BOOST_FAIL(format("Mutation inequality is not symmetric for {}\n ...and: {}", other, _m));
}
return *this;
}
mutation_assertion&
mutation_assertion::is_equal_to_compacted(const mutation& other, const std::optional<query::clustering_row_ranges>& ck_ranges) {
mutation_assertion(_m.compacted()).is_equal_to(other.compacted(), ck_ranges);
return *this;
}
mutation_assertion&
mutation_assertion::is_not_equal_to(const mutation& other) {
if (_m == other) {
BOOST_FAIL(format("Mutations equal but expected to differ: {}\n ...and: {}", other, _m));
}
return *this;
}
mutation_assertion&
mutation_assertion::has_schema(schema_ptr s) {
if (_m.schema() != s) {
BOOST_FAIL(format("Expected mutation of schema {}, but got {}", *s, *_m.schema()));
}
return *this;
}
mutation_assertion&
mutation_assertion::has_same_continuity(const mutation& other) {
assert_that(_m.schema(), _m.partition()).has_same_continuity(other.partition());
return *this;
}
mutation_assertion&
mutation_assertion::is_continuous(const position_range& r, ::is_continuous cont) {
assert_that(_m.schema(), _m.partition()).is_continuous(r, cont);
return *this;
}
// Verifies that mutation data remains unchanged when upgraded to the new schema
void
mutation_assertion::is_upgrade_equivalent(schema_ptr new_schema) {
mutation m2 = _m;
m2.upgrade(new_schema);
BOOST_REQUIRE(m2.schema() == new_schema);
mutation_assertion(m2).is_equal_to(_m);
mutation m3 = m2;
m3.upgrade(_m.schema());
BOOST_REQUIRE(m3.schema() == _m.schema());
mutation_assertion(m3).is_equal_to(_m);
mutation_assertion(m3).is_equal_to(m2);
}
mutation_assertion
mutation_opt_assertions::has_mutation() {
if (!_mo) {
BOOST_FAIL("Expected engaged mutation_opt, but found not");
}
return { *_mo };
}
void
mutation_opt_assertions::has_no_mutation() {
if (_mo) {
BOOST_FAIL("Expected disengaged mutation_opt");
}
}