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 "helpers/memenv/memenv.h"
6*9507f98cSAndroid Build Coastguard Worker
7*9507f98cSAndroid Build Coastguard Worker #include <string>
8*9507f98cSAndroid Build Coastguard Worker #include <vector>
9*9507f98cSAndroid Build Coastguard Worker
10*9507f98cSAndroid Build Coastguard Worker #include "gtest/gtest.h"
11*9507f98cSAndroid Build Coastguard Worker #include "db/db_impl.h"
12*9507f98cSAndroid Build Coastguard Worker #include "leveldb/db.h"
13*9507f98cSAndroid Build Coastguard Worker #include "leveldb/env.h"
14*9507f98cSAndroid Build Coastguard Worker #include "util/testutil.h"
15*9507f98cSAndroid Build Coastguard Worker
16*9507f98cSAndroid Build Coastguard Worker namespace leveldb {
17*9507f98cSAndroid Build Coastguard Worker
18*9507f98cSAndroid Build Coastguard Worker class MemEnvTest : public testing::Test {
19*9507f98cSAndroid Build Coastguard Worker public:
MemEnvTest()20*9507f98cSAndroid Build Coastguard Worker MemEnvTest() : env_(NewMemEnv(Env::Default())) {}
~MemEnvTest()21*9507f98cSAndroid Build Coastguard Worker ~MemEnvTest() { delete env_; }
22*9507f98cSAndroid Build Coastguard Worker
23*9507f98cSAndroid Build Coastguard Worker Env* env_;
24*9507f98cSAndroid Build Coastguard Worker };
25*9507f98cSAndroid Build Coastguard Worker
TEST_F(MemEnvTest,Basics)26*9507f98cSAndroid Build Coastguard Worker TEST_F(MemEnvTest, Basics) {
27*9507f98cSAndroid Build Coastguard Worker uint64_t file_size;
28*9507f98cSAndroid Build Coastguard Worker WritableFile* writable_file;
29*9507f98cSAndroid Build Coastguard Worker std::vector<std::string> children;
30*9507f98cSAndroid Build Coastguard Worker
31*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->CreateDir("/dir"));
32*9507f98cSAndroid Build Coastguard Worker
33*9507f98cSAndroid Build Coastguard Worker // Check that the directory is empty.
34*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->FileExists("/dir/non_existent"));
35*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->GetFileSize("/dir/non_existent", &file_size).ok());
36*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetChildren("/dir", &children));
37*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, children.size());
38*9507f98cSAndroid Build Coastguard Worker
39*9507f98cSAndroid Build Coastguard Worker // Create a file.
40*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewWritableFile("/dir/f", &writable_file));
41*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetFileSize("/dir/f", &file_size));
42*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, file_size);
43*9507f98cSAndroid Build Coastguard Worker delete writable_file;
44*9507f98cSAndroid Build Coastguard Worker
45*9507f98cSAndroid Build Coastguard Worker // Check that the file exists.
46*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(env_->FileExists("/dir/f"));
47*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetFileSize("/dir/f", &file_size));
48*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, file_size);
49*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetChildren("/dir", &children));
50*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(1, children.size());
51*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ("f", children[0]);
52*9507f98cSAndroid Build Coastguard Worker
53*9507f98cSAndroid Build Coastguard Worker // Write to the file.
54*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewWritableFile("/dir/f", &writable_file));
55*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Append("abc"));
56*9507f98cSAndroid Build Coastguard Worker delete writable_file;
57*9507f98cSAndroid Build Coastguard Worker
58*9507f98cSAndroid Build Coastguard Worker // Check that append works.
59*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewAppendableFile("/dir/f", &writable_file));
60*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetFileSize("/dir/f", &file_size));
61*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(3, file_size);
62*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Append("hello"));
63*9507f98cSAndroid Build Coastguard Worker delete writable_file;
64*9507f98cSAndroid Build Coastguard Worker
65*9507f98cSAndroid Build Coastguard Worker // Check for expected size.
66*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetFileSize("/dir/f", &file_size));
67*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(8, file_size);
68*9507f98cSAndroid Build Coastguard Worker
69*9507f98cSAndroid Build Coastguard Worker // Check that renaming works.
70*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->RenameFile("/dir/non_existent", "/dir/g").ok());
71*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->RenameFile("/dir/f", "/dir/g"));
72*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->FileExists("/dir/f"));
73*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(env_->FileExists("/dir/g"));
74*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetFileSize("/dir/g", &file_size));
75*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(8, file_size);
76*9507f98cSAndroid Build Coastguard Worker
77*9507f98cSAndroid Build Coastguard Worker // Check that opening non-existent file fails.
78*9507f98cSAndroid Build Coastguard Worker SequentialFile* seq_file;
79*9507f98cSAndroid Build Coastguard Worker RandomAccessFile* rand_file;
80*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->NewSequentialFile("/dir/non_existent", &seq_file).ok());
81*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!seq_file);
82*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->NewRandomAccessFile("/dir/non_existent", &rand_file).ok());
83*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!rand_file);
84*9507f98cSAndroid Build Coastguard Worker
85*9507f98cSAndroid Build Coastguard Worker // Check that deleting works.
86*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->RemoveFile("/dir/non_existent").ok());
87*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->RemoveFile("/dir/g"));
88*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!env_->FileExists("/dir/g"));
89*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetChildren("/dir", &children));
90*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, children.size());
91*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->RemoveDir("/dir"));
92*9507f98cSAndroid Build Coastguard Worker }
93*9507f98cSAndroid Build Coastguard Worker
TEST_F(MemEnvTest,ReadWrite)94*9507f98cSAndroid Build Coastguard Worker TEST_F(MemEnvTest, ReadWrite) {
95*9507f98cSAndroid Build Coastguard Worker WritableFile* writable_file;
96*9507f98cSAndroid Build Coastguard Worker SequentialFile* seq_file;
97*9507f98cSAndroid Build Coastguard Worker RandomAccessFile* rand_file;
98*9507f98cSAndroid Build Coastguard Worker Slice result;
99*9507f98cSAndroid Build Coastguard Worker char scratch[100];
100*9507f98cSAndroid Build Coastguard Worker
101*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->CreateDir("/dir"));
102*9507f98cSAndroid Build Coastguard Worker
103*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewWritableFile("/dir/f", &writable_file));
104*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Append("hello "));
105*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Append("world"));
106*9507f98cSAndroid Build Coastguard Worker delete writable_file;
107*9507f98cSAndroid Build Coastguard Worker
108*9507f98cSAndroid Build Coastguard Worker // Read sequentially.
109*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewSequentialFile("/dir/f", &seq_file));
110*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(seq_file->Read(5, &result, scratch)); // Read "hello".
111*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.compare("hello"));
112*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(seq_file->Skip(1));
113*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(seq_file->Read(1000, &result, scratch)); // Read "world".
114*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.compare("world"));
115*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(
116*9507f98cSAndroid Build Coastguard Worker seq_file->Read(1000, &result, scratch)); // Try reading past EOF.
117*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.size());
118*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(seq_file->Skip(100)); // Try to skip past end of file.
119*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(seq_file->Read(1000, &result, scratch));
120*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.size());
121*9507f98cSAndroid Build Coastguard Worker delete seq_file;
122*9507f98cSAndroid Build Coastguard Worker
123*9507f98cSAndroid Build Coastguard Worker // Random reads.
124*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewRandomAccessFile("/dir/f", &rand_file));
125*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(rand_file->Read(6, 5, &result, scratch)); // Read "world".
126*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.compare("world"));
127*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(rand_file->Read(0, 5, &result, scratch)); // Read "hello".
128*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.compare("hello"));
129*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(rand_file->Read(10, 100, &result, scratch)); // Read "d".
130*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.compare("d"));
131*9507f98cSAndroid Build Coastguard Worker
132*9507f98cSAndroid Build Coastguard Worker // Too high offset.
133*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!rand_file->Read(1000, 5, &result, scratch).ok());
134*9507f98cSAndroid Build Coastguard Worker delete rand_file;
135*9507f98cSAndroid Build Coastguard Worker }
136*9507f98cSAndroid Build Coastguard Worker
TEST_F(MemEnvTest,Locks)137*9507f98cSAndroid Build Coastguard Worker TEST_F(MemEnvTest, Locks) {
138*9507f98cSAndroid Build Coastguard Worker FileLock* lock;
139*9507f98cSAndroid Build Coastguard Worker
140*9507f98cSAndroid Build Coastguard Worker // These are no-ops, but we test they return success.
141*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->LockFile("some file", &lock));
142*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->UnlockFile(lock));
143*9507f98cSAndroid Build Coastguard Worker }
144*9507f98cSAndroid Build Coastguard Worker
TEST_F(MemEnvTest,Misc)145*9507f98cSAndroid Build Coastguard Worker TEST_F(MemEnvTest, Misc) {
146*9507f98cSAndroid Build Coastguard Worker std::string test_dir;
147*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->GetTestDirectory(&test_dir));
148*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!test_dir.empty());
149*9507f98cSAndroid Build Coastguard Worker
150*9507f98cSAndroid Build Coastguard Worker WritableFile* writable_file;
151*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewWritableFile("/a/b", &writable_file));
152*9507f98cSAndroid Build Coastguard Worker
153*9507f98cSAndroid Build Coastguard Worker // These are no-ops, but we test they return success.
154*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Sync());
155*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Flush());
156*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Close());
157*9507f98cSAndroid Build Coastguard Worker delete writable_file;
158*9507f98cSAndroid Build Coastguard Worker }
159*9507f98cSAndroid Build Coastguard Worker
TEST_F(MemEnvTest,LargeWrite)160*9507f98cSAndroid Build Coastguard Worker TEST_F(MemEnvTest, LargeWrite) {
161*9507f98cSAndroid Build Coastguard Worker const size_t kWriteSize = 300 * 1024;
162*9507f98cSAndroid Build Coastguard Worker char* scratch = new char[kWriteSize * 2];
163*9507f98cSAndroid Build Coastguard Worker
164*9507f98cSAndroid Build Coastguard Worker std::string write_data;
165*9507f98cSAndroid Build Coastguard Worker for (size_t i = 0; i < kWriteSize; ++i) {
166*9507f98cSAndroid Build Coastguard Worker write_data.append(1, static_cast<char>(i));
167*9507f98cSAndroid Build Coastguard Worker }
168*9507f98cSAndroid Build Coastguard Worker
169*9507f98cSAndroid Build Coastguard Worker WritableFile* writable_file;
170*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewWritableFile("/dir/f", &writable_file));
171*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Append("foo"));
172*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(writable_file->Append(write_data));
173*9507f98cSAndroid Build Coastguard Worker delete writable_file;
174*9507f98cSAndroid Build Coastguard Worker
175*9507f98cSAndroid Build Coastguard Worker SequentialFile* seq_file;
176*9507f98cSAndroid Build Coastguard Worker Slice result;
177*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewSequentialFile("/dir/f", &seq_file));
178*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(seq_file->Read(3, &result, scratch)); // Read "foo".
179*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.compare("foo"));
180*9507f98cSAndroid Build Coastguard Worker
181*9507f98cSAndroid Build Coastguard Worker size_t read = 0;
182*9507f98cSAndroid Build Coastguard Worker std::string read_data;
183*9507f98cSAndroid Build Coastguard Worker while (read < kWriteSize) {
184*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(seq_file->Read(kWriteSize - read, &result, scratch));
185*9507f98cSAndroid Build Coastguard Worker read_data.append(result.data(), result.size());
186*9507f98cSAndroid Build Coastguard Worker read += result.size();
187*9507f98cSAndroid Build Coastguard Worker }
188*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(write_data == read_data);
189*9507f98cSAndroid Build Coastguard Worker delete seq_file;
190*9507f98cSAndroid Build Coastguard Worker delete[] scratch;
191*9507f98cSAndroid Build Coastguard Worker }
192*9507f98cSAndroid Build Coastguard Worker
TEST_F(MemEnvTest,OverwriteOpenFile)193*9507f98cSAndroid Build Coastguard Worker TEST_F(MemEnvTest, OverwriteOpenFile) {
194*9507f98cSAndroid Build Coastguard Worker const char kWrite1Data[] = "Write #1 data";
195*9507f98cSAndroid Build Coastguard Worker const size_t kFileDataLen = sizeof(kWrite1Data) - 1;
196*9507f98cSAndroid Build Coastguard Worker const std::string kTestFileName = testing::TempDir() + "leveldb-TestFile.dat";
197*9507f98cSAndroid Build Coastguard Worker
198*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(WriteStringToFile(env_, kWrite1Data, kTestFileName));
199*9507f98cSAndroid Build Coastguard Worker
200*9507f98cSAndroid Build Coastguard Worker RandomAccessFile* rand_file;
201*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(env_->NewRandomAccessFile(kTestFileName, &rand_file));
202*9507f98cSAndroid Build Coastguard Worker
203*9507f98cSAndroid Build Coastguard Worker const char kWrite2Data[] = "Write #2 data";
204*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(WriteStringToFile(env_, kWrite2Data, kTestFileName));
205*9507f98cSAndroid Build Coastguard Worker
206*9507f98cSAndroid Build Coastguard Worker // Verify that overwriting an open file will result in the new file data
207*9507f98cSAndroid Build Coastguard Worker // being read from files opened before the write.
208*9507f98cSAndroid Build Coastguard Worker Slice result;
209*9507f98cSAndroid Build Coastguard Worker char scratch[kFileDataLen];
210*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(rand_file->Read(0, kFileDataLen, &result, scratch));
211*9507f98cSAndroid Build Coastguard Worker ASSERT_EQ(0, result.compare(kWrite2Data));
212*9507f98cSAndroid Build Coastguard Worker
213*9507f98cSAndroid Build Coastguard Worker delete rand_file;
214*9507f98cSAndroid Build Coastguard Worker }
215*9507f98cSAndroid Build Coastguard Worker
TEST_F(MemEnvTest,DBTest)216*9507f98cSAndroid Build Coastguard Worker TEST_F(MemEnvTest, DBTest) {
217*9507f98cSAndroid Build Coastguard Worker Options options;
218*9507f98cSAndroid Build Coastguard Worker options.create_if_missing = true;
219*9507f98cSAndroid Build Coastguard Worker options.env = env_;
220*9507f98cSAndroid Build Coastguard Worker DB* db;
221*9507f98cSAndroid Build Coastguard Worker
222*9507f98cSAndroid Build Coastguard Worker const Slice keys[] = {Slice("aaa"), Slice("bbb"), Slice("ccc")};
223*9507f98cSAndroid Build Coastguard Worker const Slice vals[] = {Slice("foo"), Slice("bar"), Slice("baz")};
224*9507f98cSAndroid Build Coastguard Worker
225*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(DB::Open(options, "/dir/db", &db));
226*9507f98cSAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
227*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(db->Put(WriteOptions(), keys[i], vals[i]));
228*9507f98cSAndroid Build Coastguard Worker }
229*9507f98cSAndroid Build Coastguard Worker
230*9507f98cSAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
231*9507f98cSAndroid Build Coastguard Worker std::string res;
232*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(db->Get(ReadOptions(), keys[i], &res));
233*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(res == vals[i]);
234*9507f98cSAndroid Build Coastguard Worker }
235*9507f98cSAndroid Build Coastguard Worker
236*9507f98cSAndroid Build Coastguard Worker Iterator* iterator = db->NewIterator(ReadOptions());
237*9507f98cSAndroid Build Coastguard Worker iterator->SeekToFirst();
238*9507f98cSAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
239*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(iterator->Valid());
240*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(keys[i] == iterator->key());
241*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(vals[i] == iterator->value());
242*9507f98cSAndroid Build Coastguard Worker iterator->Next();
243*9507f98cSAndroid Build Coastguard Worker }
244*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(!iterator->Valid());
245*9507f98cSAndroid Build Coastguard Worker delete iterator;
246*9507f98cSAndroid Build Coastguard Worker
247*9507f98cSAndroid Build Coastguard Worker DBImpl* dbi = reinterpret_cast<DBImpl*>(db);
248*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(dbi->TEST_CompactMemTable());
249*9507f98cSAndroid Build Coastguard Worker
250*9507f98cSAndroid Build Coastguard Worker for (size_t i = 0; i < 3; ++i) {
251*9507f98cSAndroid Build Coastguard Worker std::string res;
252*9507f98cSAndroid Build Coastguard Worker ASSERT_LEVELDB_OK(db->Get(ReadOptions(), keys[i], &res));
253*9507f98cSAndroid Build Coastguard Worker ASSERT_TRUE(res == vals[i]);
254*9507f98cSAndroid Build Coastguard Worker }
255*9507f98cSAndroid Build Coastguard Worker
256*9507f98cSAndroid Build Coastguard Worker delete db;
257*9507f98cSAndroid Build Coastguard Worker }
258*9507f98cSAndroid Build Coastguard Worker
259*9507f98cSAndroid Build Coastguard Worker } // namespace leveldb
260*9507f98cSAndroid Build Coastguard Worker
main(int argc,char ** argv)261*9507f98cSAndroid Build Coastguard Worker int main(int argc, char** argv) {
262*9507f98cSAndroid Build Coastguard Worker testing::InitGoogleTest(&argc, argv);
263*9507f98cSAndroid Build Coastguard Worker return RUN_ALL_TESTS();
264*9507f98cSAndroid Build Coastguard Worker }
265