1*9507f98cSAndroid Build Coastguard Worker // Copyright (c) 2011 The LevelDB Authors. All rights reserved.
2*9507f98cSAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*9507f98cSAndroid Build Coastguard Worker // found in the LICENSE file. See the AUTHORS file for names of contributors.
4*9507f98cSAndroid Build Coastguard Worker
5*9507f98cSAndroid Build Coastguard Worker #include "db/version_set.h"
6*9507f98cSAndroid Build Coastguard Worker
7*9507f98cSAndroid Build Coastguard Worker #include "gtest/gtest.h"
8*9507f98cSAndroid Build Coastguard Worker #include "util/logging.h"
9*9507f98cSAndroid Build Coastguard Worker #include "util/testutil.h"
10*9507f98cSAndroid Build Coastguard Worker
11*9507f98cSAndroid Build Coastguard Worker namespace leveldb {
12*9507f98cSAndroid Build Coastguard Worker
13*9507f98cSAndroid Build Coastguard Worker class FindFileTest : public testing::Test {
14*9507f98cSAndroid Build Coastguard Worker public:
FindFileTest()15*9507f98cSAndroid Build Coastguard Worker FindFileTest() : disjoint_sorted_files_(true) {}
16*9507f98cSAndroid Build Coastguard Worker
~FindFileTest()17*9507f98cSAndroid Build Coastguard Worker ~FindFileTest() {
18*9507f98cSAndroid Build Coastguard Worker for (int i = 0; i < files_.size(); i++) {
19*9507f98cSAndroid Build Coastguard Worker delete files_[i];
20*9507f98cSAndroid Build Coastguard Worker }
21*9507f98cSAndroid Build Coastguard Worker }
22*9507f98cSAndroid Build Coastguard Worker
Add(const char * smallest,const char * largest,SequenceNumber smallest_seq=100,SequenceNumber largest_seq=100)23*9507f98cSAndroid Build Coastguard Worker void Add(const char* smallest, const char* largest,
24*9507f98cSAndroid Build Coastguard Worker SequenceNumber smallest_seq = 100,
25*9507f98cSAndroid Build Coastguard Worker SequenceNumber largest_seq = 100) {
26*9507f98cSAndroid Build Coastguard Worker FileMetaData* f = new FileMetaData;
27*9507f98cSAndroid Build Coastguard Worker f->number = files_.size() + 1;
28*9507f98cSAndroid Build Coastguard Worker f->smallest = InternalKey(smallest, smallest_seq, kTypeValue);
29*9507f98cSAndroid Build Coastguard Worker f->largest = InternalKey(largest, largest_seq, kTypeValue);
30*9507f98cSAndroid Build Coastguard Worker files_.push_back(f);
31*9507f98cSAndroid Build Coastguard Worker }
32*9507f98cSAndroid Build Coastguard Worker
Find(const char * key)33*9507f98cSAndroid Build Coastguard Worker int Find(const char* key) {
34*9507f98cSAndroid Build Coastguard Worker InternalKey target(key, 100, kTypeValue);
35*9507f98cSAndroid Build Coastguard Worker InternalKeyComparator cmp(BytewiseComparator());
36*9507f98cSAndroid Build Coastguard Worker return FindFile(cmp, files_, target.Encode());
37*9507f98cSAndroid Build Coastguard Worker }
38*9507f98cSAndroid Build Coastguard Worker
Overlaps(const char * smallest,const char * largest)39*9507f98cSAndroid Build Coastguard Worker bool Overlaps(const char* smallest, const char* largest) {
40*9507f98cSAndroid Build Coastguard Worker InternalKeyComparator cmp(BytewiseComparator());
41*9507f98cSAndroid Build Coastguard Worker Slice s(smallest != nullptr ? smallest : "");
42*9507f98cSAndroid Build Coastguard Worker Slice l(largest != nullptr ? largest : "");
43*9507f98cSAndroid Build Coastguard Worker return SomeFileOverlapsRange(cmp, disjoint_sorted_files_, files_,
44*9507f98cSAndroid Build Coastguard Worker (smallest != nullptr ? &s : nullptr),
45*9507f98cSAndroid Build Coastguard Worker (largest != nullptr ? &l : nullptr));
46*9507f98cSAndroid Build Coastguard Worker }
47*9507f98cSAndroid Build Coastguard Worker
48*9507f98cSAndroid Build Coastguard Worker bool disjoint_sorted_files_;
49*9507f98cSAndroid Build Coastguard Worker
50*9507f98cSAndroid Build Coastguard Worker private:
51*9507f98cSAndroid Build Coastguard Worker std::vector<FileMetaData*> files_;
52*9507f98cSAndroid Build Coastguard Worker };
53*9507f98cSAndroid Build Coastguard Worker
TEST_F(FindFileTest,Empty)54*9507f98cSAndroid Build Coastguard Worker TEST_F(FindFileTest, Empty) {
55*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("foo"));
56*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("a", "z"));
57*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps(nullptr, "z"));
58*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("a", nullptr));
59*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps(nullptr, nullptr));
60*9507f98cSAndroid Build Coastguard Worker }
61*9507f98cSAndroid Build Coastguard Worker
TEST_F(FindFileTest,Single)62*9507f98cSAndroid Build Coastguard Worker TEST_F(FindFileTest, Single) {
63*9507f98cSAndroid Build Coastguard Worker Add("p", "q");
64*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("a"));
65*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("p"));
66*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("p1"));
67*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("q"));
68*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, Find("q1"));
69*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, Find("z"));
70*9507f98cSAndroid Build Coastguard Worker
71*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("a", "b"));
72*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("z1", "z2"));
73*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("a", "p"));
74*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("a", "q"));
75*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("a", "z"));
76*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("p", "p1"));
77*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("p", "q"));
78*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("p", "z"));
79*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("p1", "p2"));
80*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("p1", "z"));
81*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("q", "q"));
82*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("q", "q1"));
83*9507f98cSAndroid Build Coastguard Worker
84*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps(nullptr, "j"));
85*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("r", nullptr));
86*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "p"));
87*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "p1"));
88*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("q", nullptr));
89*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, nullptr));
90*9507f98cSAndroid Build Coastguard Worker }
91*9507f98cSAndroid Build Coastguard Worker
TEST_F(FindFileTest,Multiple)92*9507f98cSAndroid Build Coastguard Worker TEST_F(FindFileTest, Multiple) {
93*9507f98cSAndroid Build Coastguard Worker Add("150", "200");
94*9507f98cSAndroid Build Coastguard Worker Add("200", "250");
95*9507f98cSAndroid Build Coastguard Worker Add("300", "350");
96*9507f98cSAndroid Build Coastguard Worker Add("400", "450");
97*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("100"));
98*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("150"));
99*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("151"));
100*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("199"));
101*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, Find("200"));
102*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, Find("201"));
103*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, Find("249"));
104*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, Find("250"));
105*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(2, Find("251"));
106*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(2, Find("299"));
107*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(2, Find("300"));
108*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(2, Find("349"));
109*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(2, Find("350"));
110*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(3, Find("351"));
111*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(3, Find("400"));
112*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(3, Find("450"));
113*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(4, Find("451"));
114*9507f98cSAndroid Build Coastguard Worker
115*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("100", "149"));
116*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("251", "299"));
117*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("451", "500"));
118*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("351", "399"));
119*9507f98cSAndroid Build Coastguard Worker
120*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "150"));
121*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "200"));
122*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "300"));
123*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "400"));
124*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "500"));
125*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("375", "400"));
126*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("450", "450"));
127*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("450", "500"));
128*9507f98cSAndroid Build Coastguard Worker }
129*9507f98cSAndroid Build Coastguard Worker
TEST_F(FindFileTest,MultipleNullBoundaries)130*9507f98cSAndroid Build Coastguard Worker TEST_F(FindFileTest, MultipleNullBoundaries) {
131*9507f98cSAndroid Build Coastguard Worker Add("150", "200");
132*9507f98cSAndroid Build Coastguard Worker Add("200", "250");
133*9507f98cSAndroid Build Coastguard Worker Add("300", "350");
134*9507f98cSAndroid Build Coastguard Worker Add("400", "450");
135*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps(nullptr, "149"));
136*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("451", nullptr));
137*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, nullptr));
138*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "150"));
139*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "199"));
140*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "200"));
141*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "201"));
142*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "400"));
143*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps(nullptr, "800"));
144*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", nullptr));
145*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("200", nullptr));
146*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("449", nullptr));
147*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("450", nullptr));
148*9507f98cSAndroid Build Coastguard Worker }
149*9507f98cSAndroid Build Coastguard Worker
TEST_F(FindFileTest,OverlapSequenceChecks)150*9507f98cSAndroid Build Coastguard Worker TEST_F(FindFileTest, OverlapSequenceChecks) {
151*9507f98cSAndroid Build Coastguard Worker Add("200", "200", 5000, 3000);
152*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("199", "199"));
153*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("201", "300"));
154*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("200", "200"));
155*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("190", "200"));
156*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("200", "210"));
157*9507f98cSAndroid Build Coastguard Worker }
158*9507f98cSAndroid Build Coastguard Worker
TEST_F(FindFileTest,OverlappingFiles)159*9507f98cSAndroid Build Coastguard Worker TEST_F(FindFileTest, OverlappingFiles) {
160*9507f98cSAndroid Build Coastguard Worker Add("150", "600");
161*9507f98cSAndroid Build Coastguard Worker Add("400", "500");
162*9507f98cSAndroid Build Coastguard Worker disjoint_sorted_files_ = false;
163*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("100", "149"));
164*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!Overlaps("601", "700"));
165*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "150"));
166*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "200"));
167*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "300"));
168*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "400"));
169*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("100", "500"));
170*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("375", "400"));
171*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("450", "450"));
172*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("450", "500"));
173*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("450", "700"));
174*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(Overlaps("600", "700"));
175*9507f98cSAndroid Build Coastguard Worker }
176*9507f98cSAndroid Build Coastguard Worker
177*9507f98cSAndroid Build Coastguard Worker void AddBoundaryInputs(const InternalKeyComparator& icmp,
178*9507f98cSAndroid Build Coastguard Worker const std::vector<FileMetaData*>& level_files,
179*9507f98cSAndroid Build Coastguard Worker std::vector<FileMetaData*>* compaction_files);
180*9507f98cSAndroid Build Coastguard Worker
181*9507f98cSAndroid Build Coastguard Worker class AddBoundaryInputsTest : public testing::Test {
182*9507f98cSAndroid Build Coastguard Worker public:
183*9507f98cSAndroid Build Coastguard Worker std::vector<FileMetaData*> level_files_;
184*9507f98cSAndroid Build Coastguard Worker std::vector<FileMetaData*> compaction_files_;
185*9507f98cSAndroid Build Coastguard Worker std::vector<FileMetaData*> all_files_;
186*9507f98cSAndroid Build Coastguard Worker InternalKeyComparator icmp_;
187*9507f98cSAndroid Build Coastguard Worker
AddBoundaryInputsTest()188*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputsTest() : icmp_(BytewiseComparator()) {}
189*9507f98cSAndroid Build Coastguard Worker
~AddBoundaryInputsTest()190*9507f98cSAndroid Build Coastguard Worker ~AddBoundaryInputsTest() {
191*9507f98cSAndroid Build Coastguard Worker for (size_t i = 0; i < all_files_.size(); ++i) {
192*9507f98cSAndroid Build Coastguard Worker delete all_files_[i];
193*9507f98cSAndroid Build Coastguard Worker }
194*9507f98cSAndroid Build Coastguard Worker all_files_.clear();
195*9507f98cSAndroid Build Coastguard Worker }
196*9507f98cSAndroid Build Coastguard Worker
CreateFileMetaData(uint64_t number,InternalKey smallest,InternalKey largest)197*9507f98cSAndroid Build Coastguard Worker FileMetaData* CreateFileMetaData(uint64_t number, InternalKey smallest,
198*9507f98cSAndroid Build Coastguard Worker InternalKey largest) {
199*9507f98cSAndroid Build Coastguard Worker FileMetaData* f = new FileMetaData();
200*9507f98cSAndroid Build Coastguard Worker f->number = number;
201*9507f98cSAndroid Build Coastguard Worker f->smallest = smallest;
202*9507f98cSAndroid Build Coastguard Worker f->largest = largest;
203*9507f98cSAndroid Build Coastguard Worker all_files_.push_back(f);
204*9507f98cSAndroid Build Coastguard Worker return f;
205*9507f98cSAndroid Build Coastguard Worker }
206*9507f98cSAndroid Build Coastguard Worker };
207*9507f98cSAndroid Build Coastguard Worker
TEST_F(AddBoundaryInputsTest,TestEmptyFileSets)208*9507f98cSAndroid Build Coastguard Worker TEST_F(AddBoundaryInputsTest, TestEmptyFileSets) {
209*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputs(icmp_, level_files_, &compaction_files_);
210*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(compaction_files_.empty());
211*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(level_files_.empty());
212*9507f98cSAndroid Build Coastguard Worker }
213*9507f98cSAndroid Build Coastguard Worker
TEST_F(AddBoundaryInputsTest,TestEmptyLevelFiles)214*9507f98cSAndroid Build Coastguard Worker TEST_F(AddBoundaryInputsTest, TestEmptyLevelFiles) {
215*9507f98cSAndroid Build Coastguard Worker FileMetaData* f1 =
216*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 2, kTypeValue),
217*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 1, kTypeValue)));
218*9507f98cSAndroid Build Coastguard Worker compaction_files_.push_back(f1);
219*9507f98cSAndroid Build Coastguard Worker
220*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputs(icmp_, level_files_, &compaction_files_);
221*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, compaction_files_.size());
222*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f1, compaction_files_[0]);
223*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(level_files_.empty());
224*9507f98cSAndroid Build Coastguard Worker }
225*9507f98cSAndroid Build Coastguard Worker
TEST_F(AddBoundaryInputsTest,TestEmptyCompactionFiles)226*9507f98cSAndroid Build Coastguard Worker TEST_F(AddBoundaryInputsTest, TestEmptyCompactionFiles) {
227*9507f98cSAndroid Build Coastguard Worker FileMetaData* f1 =
228*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 2, kTypeValue),
229*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 1, kTypeValue)));
230*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f1);
231*9507f98cSAndroid Build Coastguard Worker
232*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputs(icmp_, level_files_, &compaction_files_);
233*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(compaction_files_.empty());
234*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, level_files_.size());
235*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f1, level_files_[0]);
236*9507f98cSAndroid Build Coastguard Worker }
237*9507f98cSAndroid Build Coastguard Worker
TEST_F(AddBoundaryInputsTest,TestNoBoundaryFiles)238*9507f98cSAndroid Build Coastguard Worker TEST_F(AddBoundaryInputsTest, TestNoBoundaryFiles) {
239*9507f98cSAndroid Build Coastguard Worker FileMetaData* f1 =
240*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 2, kTypeValue),
241*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 1, kTypeValue)));
242*9507f98cSAndroid Build Coastguard Worker FileMetaData* f2 =
243*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("200", 2, kTypeValue),
244*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("200", 1, kTypeValue)));
245*9507f98cSAndroid Build Coastguard Worker FileMetaData* f3 =
246*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("300", 2, kTypeValue),
247*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("300", 1, kTypeValue)));
248*9507f98cSAndroid Build Coastguard Worker
249*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f3);
250*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f2);
251*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f1);
252*9507f98cSAndroid Build Coastguard Worker compaction_files_.push_back(f2);
253*9507f98cSAndroid Build Coastguard Worker compaction_files_.push_back(f3);
254*9507f98cSAndroid Build Coastguard Worker
255*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputs(icmp_, level_files_, &compaction_files_);
256*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(2, compaction_files_.size());
257*9507f98cSAndroid Build Coastguard Worker }
258*9507f98cSAndroid Build Coastguard Worker
TEST_F(AddBoundaryInputsTest,TestOneBoundaryFiles)259*9507f98cSAndroid Build Coastguard Worker TEST_F(AddBoundaryInputsTest, TestOneBoundaryFiles) {
260*9507f98cSAndroid Build Coastguard Worker FileMetaData* f1 =
261*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 3, kTypeValue),
262*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 2, kTypeValue)));
263*9507f98cSAndroid Build Coastguard Worker FileMetaData* f2 =
264*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 1, kTypeValue),
265*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("200", 3, kTypeValue)));
266*9507f98cSAndroid Build Coastguard Worker FileMetaData* f3 =
267*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("300", 2, kTypeValue),
268*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("300", 1, kTypeValue)));
269*9507f98cSAndroid Build Coastguard Worker
270*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f3);
271*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f2);
272*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f1);
273*9507f98cSAndroid Build Coastguard Worker compaction_files_.push_back(f1);
274*9507f98cSAndroid Build Coastguard Worker
275*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputs(icmp_, level_files_, &compaction_files_);
276*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(2, compaction_files_.size());
277*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f1, compaction_files_[0]);
278*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f2, compaction_files_[1]);
279*9507f98cSAndroid Build Coastguard Worker }
280*9507f98cSAndroid Build Coastguard Worker
TEST_F(AddBoundaryInputsTest,TestTwoBoundaryFiles)281*9507f98cSAndroid Build Coastguard Worker TEST_F(AddBoundaryInputsTest, TestTwoBoundaryFiles) {
282*9507f98cSAndroid Build Coastguard Worker FileMetaData* f1 =
283*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 6, kTypeValue),
284*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 5, kTypeValue)));
285*9507f98cSAndroid Build Coastguard Worker FileMetaData* f2 =
286*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 2, kTypeValue),
287*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("300", 1, kTypeValue)));
288*9507f98cSAndroid Build Coastguard Worker FileMetaData* f3 =
289*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 4, kTypeValue),
290*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 3, kTypeValue)));
291*9507f98cSAndroid Build Coastguard Worker
292*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f2);
293*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f3);
294*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f1);
295*9507f98cSAndroid Build Coastguard Worker compaction_files_.push_back(f1);
296*9507f98cSAndroid Build Coastguard Worker
297*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputs(icmp_, level_files_, &compaction_files_);
298*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(3, compaction_files_.size());
299*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f1, compaction_files_[0]);
300*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f3, compaction_files_[1]);
301*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f2, compaction_files_[2]);
302*9507f98cSAndroid Build Coastguard Worker }
303*9507f98cSAndroid Build Coastguard Worker
TEST_F(AddBoundaryInputsTest,TestDisjoinFilePointers)304*9507f98cSAndroid Build Coastguard Worker TEST_F(AddBoundaryInputsTest, TestDisjoinFilePointers) {
305*9507f98cSAndroid Build Coastguard Worker FileMetaData* f1 =
306*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 6, kTypeValue),
307*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 5, kTypeValue)));
308*9507f98cSAndroid Build Coastguard Worker FileMetaData* f2 =
309*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 6, kTypeValue),
310*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 5, kTypeValue)));
311*9507f98cSAndroid Build Coastguard Worker FileMetaData* f3 =
312*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 2, kTypeValue),
313*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("300", 1, kTypeValue)));
314*9507f98cSAndroid Build Coastguard Worker FileMetaData* f4 =
315*9507f98cSAndroid Build Coastguard Worker CreateFileMetaData(1, InternalKey("100", 4, kTypeValue),
316*9507f98cSAndroid Build Coastguard Worker InternalKey(InternalKey("100", 3, kTypeValue)));
317*9507f98cSAndroid Build Coastguard Worker
318*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f2);
319*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f3);
320*9507f98cSAndroid Build Coastguard Worker level_files_.push_back(f4);
321*9507f98cSAndroid Build Coastguard Worker
322*9507f98cSAndroid Build Coastguard Worker compaction_files_.push_back(f1);
323*9507f98cSAndroid Build Coastguard Worker
324*9507f98cSAndroid Build Coastguard Worker AddBoundaryInputs(icmp_, level_files_, &compaction_files_);
325*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(3, compaction_files_.size());
326*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f1, compaction_files_[0]);
327*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f4, compaction_files_[1]);
328*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(f3, compaction_files_[2]);
329*9507f98cSAndroid Build Coastguard Worker }
330*9507f98cSAndroid Build Coastguard Worker
331*9507f98cSAndroid Build Coastguard Worker } // namespace leveldb
332*9507f98cSAndroid Build Coastguard Worker
333