]>
git.proxmox.com Git - ceph.git/blob - 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).
8 #include "test_util/testharness.h"
9 #include "utilities/cassandra/format.h"
10 #include "utilities/cassandra/test_utils.h"
12 namespace ROCKSDB_NAMESPACE
{
15 class RowValueMergeTest
: public testing::Test
{};
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),
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),
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),
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);
49 TEST(RowValueMergeTest
, MergeWithRowTombstone
) {
50 std::vector
<RowValue
> row_values
;
53 row_values
.push_back(CreateRowTombstone(11));
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),
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),
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),
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);
80 // If the tombstone's timestamp is the latest, then it returns a
82 row_values
.push_back(CreateRowTombstone(15));
84 row_values
.push_back(CreateRowTombstone(17));
86 merged
= RowValue::Merge(std::move(row_values
));
87 EXPECT_TRUE(merged
.IsTombstone());
88 EXPECT_EQ(merged
.LastModifiedTime(), 17);
91 } // namespace cassandra
92 } // namespace ROCKSDB_NAMESPACE
94 int main(int argc
, char** argv
) {
95 ROCKSDB_NAMESPACE::port::InstallStackTraceHandler();
96 ::testing::InitGoogleTest(&argc
, argv
);
97 return RUN_ALL_TESTS();