]> git.proxmox.com Git - ceph.git/blob - ceph/src/rocksdb/utilities/cassandra/cassandra_row_merge_test.cc
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / rocksdb / utilities / cassandra / cassandra_row_merge_test.cc
1 // Copyright (c) 2017-present, Facebook, Inc. All rights reserved.
2 // This source code is licensed under both the GPLv2 (found in the
3 // COPYING file in the root directory) and Apache 2.0 License
4 // (found in the LICENSE.Apache file in the root directory).
5
6 #include <memory>
7
8 #include "test_util/testharness.h"
9 #include "utilities/cassandra/format.h"
10 #include "utilities/cassandra/test_utils.h"
11
12 namespace ROCKSDB_NAMESPACE {
13 namespace cassandra {
14
15 class RowValueMergeTest : public testing::Test {};
16
17 TEST(RowValueMergeTest, Merge) {
18 std::vector<RowValue> row_values;
19 row_values.push_back(CreateTestRowValue({
20 CreateTestColumnSpec(kTombstone, 0, 5),
21 CreateTestColumnSpec(kColumn, 1, 8),
22 CreateTestColumnSpec(kExpiringColumn, 2, 5),
23 }));
24
25 row_values.push_back(CreateTestRowValue({
26 CreateTestColumnSpec(kColumn, 0, 2),
27 CreateTestColumnSpec(kExpiringColumn, 1, 5),
28 CreateTestColumnSpec(kTombstone, 2, 7),
29 CreateTestColumnSpec(kExpiringColumn, 7, 17),
30 }));
31
32 row_values.push_back(CreateTestRowValue({
33 CreateTestColumnSpec(kExpiringColumn, 0, 6),
34 CreateTestColumnSpec(kTombstone, 1, 5),
35 CreateTestColumnSpec(kColumn, 2, 4),
36 CreateTestColumnSpec(kTombstone, 11, 11),
37 }));
38
39 RowValue merged = RowValue::Merge(std::move(row_values));
40 EXPECT_FALSE(merged.IsTombstone());
41 EXPECT_EQ(merged.get_columns().size(), 5);
42 VerifyRowValueColumns(merged.get_columns(), 0, kExpiringColumn, 0, 6);
43 VerifyRowValueColumns(merged.get_columns(), 1, kColumn, 1, 8);
44 VerifyRowValueColumns(merged.get_columns(), 2, kTombstone, 2, 7);
45 VerifyRowValueColumns(merged.get_columns(), 3, kExpiringColumn, 7, 17);
46 VerifyRowValueColumns(merged.get_columns(), 4, kTombstone, 11, 11);
47 }
48
49 TEST(RowValueMergeTest, MergeWithRowTombstone) {
50 std::vector<RowValue> row_values;
51
52 // A row tombstone.
53 row_values.push_back(CreateRowTombstone(11));
54
55 // This row's timestamp is smaller than tombstone.
56 row_values.push_back(CreateTestRowValue({
57 CreateTestColumnSpec(kColumn, 0, 5),
58 CreateTestColumnSpec(kColumn, 1, 6),
59 }));
60
61 // Some of the column's row is smaller, some is larger.
62 row_values.push_back(CreateTestRowValue({
63 CreateTestColumnSpec(kColumn, 2, 10),
64 CreateTestColumnSpec(kColumn, 3, 12),
65 }));
66
67 // All of the column's rows are larger than tombstone.
68 row_values.push_back(CreateTestRowValue({
69 CreateTestColumnSpec(kColumn, 4, 13),
70 CreateTestColumnSpec(kColumn, 5, 14),
71 }));
72
73 RowValue merged = RowValue::Merge(std::move(row_values));
74 EXPECT_FALSE(merged.IsTombstone());
75 EXPECT_EQ(merged.get_columns().size(), 3);
76 VerifyRowValueColumns(merged.get_columns(), 0, kColumn, 3, 12);
77 VerifyRowValueColumns(merged.get_columns(), 1, kColumn, 4, 13);
78 VerifyRowValueColumns(merged.get_columns(), 2, kColumn, 5, 14);
79
80 // If the tombstone's timestamp is the latest, then it returns a
81 // row tombstone.
82 row_values.push_back(CreateRowTombstone(15));
83
84 row_values.push_back(CreateRowTombstone(17));
85
86 merged = RowValue::Merge(std::move(row_values));
87 EXPECT_TRUE(merged.IsTombstone());
88 EXPECT_EQ(merged.LastModifiedTime(), 17);
89 }
90
91 } // namespace cassandra
92 } // namespace ROCKSDB_NAMESPACE
93
94 int main(int argc, char** argv) {
95 ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
96 ::testing::InitGoogleTest(&argc, argv);
97 return RUN_ALL_TESTS();
98 }