1a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com// Copyright (c) 2011 The LevelDB Authors. All rights reserved. 2a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com// Use of this source code is governed by a BSD-style license that can be 3a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com// found in the LICENSE file. See the AUTHORS file for names of contributors. 4a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 5a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com#include "helpers/memenv/memenv.h" 6a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 7a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com#include "db/db_impl.h" 8a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com#include "leveldb/db.h" 9a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com#include "leveldb/env.h" 10a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com#include "util/testharness.h" 11a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com#include <string> 12a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com#include <vector> 13a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 14a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comnamespace leveldb { 15a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 16a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comclass MemEnvTest { 17a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com public: 18a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com Env* env_; 19a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 20a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com MemEnvTest() 21a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com : env_(NewMemEnv(Env::Default())) { 22a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 23a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ~MemEnvTest() { 24a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete env_; 25a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 26a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com}; 27a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 28a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comTEST(MemEnvTest, Basics) { 2972c3721b1551324c540447079dfc3ac65c6cb236hans@chromium.org uint64_t file_size; 30a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com WritableFile* writable_file; 31a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com std::vector<std::string> children; 32a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 33a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->CreateDir("/dir")); 34a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 35a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Check that the directory is empty. 36a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->FileExists("/dir/non_existent")); 37a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->GetFileSize("/dir/non_existent", &file_size).ok()); 38a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->GetChildren("/dir", &children)); 39a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, children.size()); 40a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 41a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Create a file. 42a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); 43a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete writable_file; 44a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 45a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Check that the file exists. 46a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(env_->FileExists("/dir/f")); 47a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->GetFileSize("/dir/f", &file_size)); 48a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, file_size); 49a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->GetChildren("/dir", &children)); 50a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(1, children.size()); 51a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ("f", children[0]); 52a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 53a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Write to the file. 54a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); 55a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Append("abc")); 56a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete writable_file; 57a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 58a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Check for expected size. 59a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->GetFileSize("/dir/f", &file_size)); 60a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(3, file_size); 61a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 62a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Check that renaming works. 63a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->RenameFile("/dir/non_existent", "/dir/g").ok()); 64a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->RenameFile("/dir/f", "/dir/g")); 65a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->FileExists("/dir/f")); 66a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(env_->FileExists("/dir/g")); 67a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->GetFileSize("/dir/g", &file_size)); 68a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(3, file_size); 69a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 70a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Check that opening non-existent file fails. 71a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com SequentialFile* seq_file; 72a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com RandomAccessFile* rand_file; 73a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->NewSequentialFile("/dir/non_existent", &seq_file).ok()); 74a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!seq_file); 75a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->NewRandomAccessFile("/dir/non_existent", &rand_file).ok()); 76a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!rand_file); 77a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 78a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Check that deleting works. 79a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->DeleteFile("/dir/non_existent").ok()); 80a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->DeleteFile("/dir/g")); 81a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!env_->FileExists("/dir/g")); 82a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->GetChildren("/dir", &children)); 83a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, children.size()); 84a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->DeleteDir("/dir")); 85a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com} 86a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 87a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comTEST(MemEnvTest, ReadWrite) { 88a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com WritableFile* writable_file; 89a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com SequentialFile* seq_file; 90a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com RandomAccessFile* rand_file; 91a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com Slice result; 92a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com char scratch[100]; 93a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 94a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->CreateDir("/dir")); 95a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 96a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); 97a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Append("hello ")); 98a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Append("world")); 99a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete writable_file; 100a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 101a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Read sequentially. 102a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewSequentialFile("/dir/f", &seq_file)); 103a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Read(5, &result, scratch)); // Read "hello". 104a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.compare("hello")); 105a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Skip(1)); 106a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Read(1000, &result, scratch)); // Read "world". 107a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.compare("world")); 108a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Read(1000, &result, scratch)); // Try reading past EOF. 109a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.size()); 110a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Skip(100)); // Try to skip past end of file. 111a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Read(1000, &result, scratch)); 112a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.size()); 113a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete seq_file; 114a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 115a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Random reads. 116a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewRandomAccessFile("/dir/f", &rand_file)); 117a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(rand_file->Read(6, 5, &result, scratch)); // Read "world". 118a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.compare("world")); 119a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(rand_file->Read(0, 5, &result, scratch)); // Read "hello". 120a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.compare("hello")); 121a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(rand_file->Read(10, 100, &result, scratch)); // Read "d". 122a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.compare("d")); 123a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 124a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // Too high offset. 125a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!rand_file->Read(1000, 5, &result, scratch).ok()); 126a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete rand_file; 127a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com} 128a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 129a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comTEST(MemEnvTest, Locks) { 130a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com FileLock* lock; 131a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 132a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // These are no-ops, but we test they return success. 133a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->LockFile("some file", &lock)); 134a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->UnlockFile(lock)); 135a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com} 136a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 137a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comTEST(MemEnvTest, Misc) { 138a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com std::string test_dir; 139a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->GetTestDirectory(&test_dir)); 140a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!test_dir.empty()); 141a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 142a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com WritableFile* writable_file; 143a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewWritableFile("/a/b", &writable_file)); 144a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 145a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com // These are no-ops, but we test they return success. 146a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Sync()); 147a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Flush()); 148a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Close()); 149a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete writable_file; 150a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com} 151a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 152a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comTEST(MemEnvTest, LargeWrite) { 153a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com const size_t kWriteSize = 300 * 1024; 154a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com char* scratch = new char[kWriteSize * 2]; 155a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 156a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com std::string write_data; 157a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com for (size_t i = 0; i < kWriteSize; ++i) { 158a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com write_data.append(1, static_cast<char>(i)); 159a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 160a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 161a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com WritableFile* writable_file; 162a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewWritableFile("/dir/f", &writable_file)); 163a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Append("foo")); 164a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(writable_file->Append(write_data)); 165a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete writable_file; 166a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 167a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com SequentialFile* seq_file; 168a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com Slice result; 169a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(env_->NewSequentialFile("/dir/f", &seq_file)); 170a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Read(3, &result, scratch)); // Read "foo". 171a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_EQ(0, result.compare("foo")); 172a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 173a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com size_t read = 0; 174a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com std::string read_data; 175a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com while (read < kWriteSize) { 176a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(seq_file->Read(kWriteSize - read, &result, scratch)); 177a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com read_data.append(result.data(), result.size()); 178a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com read += result.size(); 179a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 180a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(write_data == read_data); 181a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete seq_file; 182a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete [] scratch; 183a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com} 184a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 185a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comTEST(MemEnvTest, DBTest) { 186a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com Options options; 187a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com options.create_if_missing = true; 188a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com options.env = env_; 189a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com DB* db; 190a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 191a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com const Slice keys[] = {Slice("aaa"), Slice("bbb"), Slice("ccc")}; 192a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com const Slice vals[] = {Slice("foo"), Slice("bar"), Slice("baz")}; 193a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 194a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(DB::Open(options, "/dir/db", &db)); 195a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com for (size_t i = 0; i < 3; ++i) { 196a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(db->Put(WriteOptions(), keys[i], vals[i])); 197a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 198a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 199a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com for (size_t i = 0; i < 3; ++i) { 200a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com std::string res; 201a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(db->Get(ReadOptions(), keys[i], &res)); 202a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(res == vals[i]); 203a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 204a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 205a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com Iterator* iterator = db->NewIterator(ReadOptions()); 206a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com iterator->SeekToFirst(); 207a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com for (size_t i = 0; i < 3; ++i) { 208a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(iterator->Valid()); 209a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(keys[i] == iterator->key()); 210a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(vals[i] == iterator->value()); 211a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com iterator->Next(); 212a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 213a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(!iterator->Valid()); 214a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete iterator; 215a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 216a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com DBImpl* dbi = reinterpret_cast<DBImpl*>(db); 217a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(dbi->TEST_CompactMemTable()); 218a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 219a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com for (size_t i = 0; i < 3; ++i) { 220a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com std::string res; 221a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_OK(db->Get(ReadOptions(), keys[i], &res)); 222a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com ASSERT_TRUE(res == vals[i]); 223a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com } 224a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 225a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com delete db; 226a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com} 227a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 22845b9940be332834440bd5299419f396e38085ebehans@chromium.org} // namespace leveldb 229a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com 230a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.comint main(int argc, char** argv) { 231a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com return leveldb::test::RunAllTests(); 232a7d6c3178930c1ebb77a45a7378b9251d707912agabor@google.com} 233