Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(603)

Side by Side Diff: content/browser/indexed_db/leveldb/leveldb_unittest.cc

Issue 15659013: Revert "Migrate the IndexedDB backend from Blink to Chromium" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include <algorithm>
6 #include <cstring>
7 #include <vector>
8
9 #include "base/files/file_path.h"
10 #include "base/files/scoped_temp_dir.h"
11 #include "base/platform_file.h"
12 #include "base/string16.h"
13 #include "content/browser/indexed_db/leveldb/leveldb_comparator.h"
14 #include "content/browser/indexed_db/leveldb/leveldb_database.h"
15 #include "content/browser/indexed_db/leveldb/leveldb_iterator.h"
16 #include "content/browser/indexed_db/leveldb/leveldb_slice.h"
17 #include "content/browser/indexed_db/leveldb/leveldb_transaction.h"
18 #include "testing/gtest/include/gtest/gtest.h"
19
20 namespace content {
21
22 namespace {
23
24 class SimpleComparator : public LevelDBComparator {
25 public:
26 virtual int Compare(const LevelDBSlice& a, const LevelDBSlice& b) const
27 OVERRIDE {
28 size_t len = std::min(a.end() - a.begin(), b.end() - b.begin());
29 return memcmp(a.begin(), b.begin(), len);
30 }
31 virtual const char* Name() const OVERRIDE { return "temp_comparator"; }
32 };
33
34 std::vector<char> EncodeString(const std::string& s) {
35 std::vector<char> ret(s.size());
36 for (size_t i = 0; i < s.size(); ++i)
37 ret[i] = s[i];
38 return ret;
39 }
40
41 TEST(LevelDBDatabaseTest, CorruptionTest) {
42 base::ScopedTempDir temp_directory;
43 ASSERT_TRUE(temp_directory.CreateUniqueTempDir());
44
45 const std::vector<char> key = EncodeString("key");
46 const std::vector<char> put_value = EncodeString("value");
47 std::vector<char> got_value;
48 SimpleComparator comparator;
49
50 scoped_ptr<LevelDBDatabase> leveldb =
51 LevelDBDatabase::Open(temp_directory.path(), &comparator);
52 EXPECT_TRUE(leveldb);
53 bool success = leveldb->Put(LevelDBSlice(key), put_value);
54 EXPECT_TRUE(success);
55 leveldb.Pass();
56 EXPECT_FALSE(leveldb);
57
58 leveldb = LevelDBDatabase::Open(temp_directory.path(), &comparator);
59 EXPECT_TRUE(leveldb);
60 bool found = false;
61 success = leveldb->Get(LevelDBSlice(key), got_value, found);
62 EXPECT_TRUE(success);
63 EXPECT_TRUE(found);
64 EXPECT_EQ(put_value, got_value);
65 leveldb.Pass();
66 EXPECT_FALSE(leveldb);
67
68 base::FilePath file_path = temp_directory.path().AppendASCII("CURRENT");
69 base::PlatformFile handle = base::CreatePlatformFile(
70 file_path,
71 base::PLATFORM_FILE_OPEN | base::PLATFORM_FILE_WRITE,
72 NULL,
73 NULL);
74 base::TruncatePlatformFile(handle, 0);
75 base::ClosePlatformFile(handle);
76
77 leveldb = LevelDBDatabase::Open(temp_directory.path(), &comparator);
78 EXPECT_FALSE(leveldb);
79
80 bool destroyed = LevelDBDatabase::Destroy(temp_directory.path());
81 EXPECT_TRUE(destroyed);
82
83 leveldb = LevelDBDatabase::Open(temp_directory.path(), &comparator);
84 EXPECT_TRUE(leveldb);
85 success = leveldb->Get(LevelDBSlice(key), got_value, found);
86 EXPECT_TRUE(success);
87 EXPECT_FALSE(found);
88 }
89
90 TEST(LevelDBDatabaseTest, Transaction) {
91 base::ScopedTempDir temp_directory;
92 ASSERT_TRUE(temp_directory.CreateUniqueTempDir());
93
94 const std::vector<char> key = EncodeString("key");
95 std::vector<char> got_value;
96 SimpleComparator comparator;
97
98 scoped_ptr<LevelDBDatabase> leveldb =
99 LevelDBDatabase::Open(temp_directory.path(), &comparator);
100 EXPECT_TRUE(leveldb);
101
102 const std::vector<char> old_value = EncodeString("value");
103 bool success = leveldb->Put(LevelDBSlice(key), old_value);
104 EXPECT_TRUE(success);
105
106 scoped_refptr<LevelDBTransaction> transaction =
107 LevelDBTransaction::Create(leveldb.get());
108
109 const std::vector<char> new_value = EncodeString("new value");
110 success = leveldb->Put(LevelDBSlice(key), new_value);
111 EXPECT_TRUE(success);
112
113 bool found = false;
114 success = transaction->Get(LevelDBSlice(key), got_value, found);
115 EXPECT_TRUE(success);
116 EXPECT_TRUE(found);
117 EXPECT_EQ(
118 comparator.Compare(LevelDBSlice(got_value), LevelDBSlice(old_value)), 0);
119
120 found = false;
121 success = leveldb->Get(LevelDBSlice(key), got_value, found);
122 EXPECT_TRUE(success);
123 EXPECT_TRUE(found);
124 EXPECT_EQ(
125 comparator.Compare(LevelDBSlice(got_value), LevelDBSlice(new_value)), 0);
126
127 const std::vector<char> added_key = EncodeString("added key");
128 const std::vector<char> added_value = EncodeString("added value");
129 success = leveldb->Put(LevelDBSlice(added_key), added_value);
130 EXPECT_TRUE(success);
131
132 success = leveldb->Get(LevelDBSlice(added_key), got_value, found);
133 EXPECT_TRUE(success);
134 EXPECT_TRUE(found);
135 EXPECT_EQ(
136 comparator.Compare(LevelDBSlice(got_value), LevelDBSlice(added_value)),
137 0);
138
139 success = transaction->Get(LevelDBSlice(added_key), got_value, found);
140 EXPECT_TRUE(success);
141 EXPECT_FALSE(found);
142 }
143
144 TEST(LevelDBDatabaseTest, TransactionIterator) {
145 base::ScopedTempDir temp_directory;
146 ASSERT_TRUE(temp_directory.CreateUniqueTempDir());
147
148 const std::vector<char> start = EncodeString("");
149 const std::vector<char> key1 = EncodeString("key1");
150 const std::vector<char> value1 = EncodeString("value1");
151 const std::vector<char> key2 = EncodeString("key2");
152 const std::vector<char> value2 = EncodeString("value2");
153
154 SimpleComparator comparator;
155 bool success;
156
157 scoped_ptr<LevelDBDatabase> leveldb =
158 LevelDBDatabase::Open(temp_directory.path(), &comparator);
159 EXPECT_TRUE(leveldb);
160
161 success = leveldb->Put(LevelDBSlice(key1), value1);
162 EXPECT_TRUE(success);
163 success = leveldb->Put(LevelDBSlice(key2), value2);
164 EXPECT_TRUE(success);
165
166 scoped_refptr<LevelDBTransaction> transaction =
167 LevelDBTransaction::Create(leveldb.get());
168
169 success = leveldb->Remove(LevelDBSlice(key2));
170 EXPECT_TRUE(success);
171
172 scoped_ptr<LevelDBIterator> it = transaction->CreateIterator();
173
174 it->Seek(LevelDBSlice(start));
175
176 EXPECT_TRUE(it->IsValid());
177 EXPECT_EQ(comparator.Compare(LevelDBSlice(it->Key()), LevelDBSlice(key1)), 0);
178 EXPECT_EQ(comparator.Compare(it->Value(), LevelDBSlice(value1)), 0);
179
180 it->Next();
181
182 EXPECT_TRUE(it->IsValid());
183 EXPECT_EQ(comparator.Compare(it->Key(), LevelDBSlice(key2)), 0);
184 EXPECT_EQ(comparator.Compare(it->Value(), LevelDBSlice(value2)), 0);
185
186 it->Next();
187
188 EXPECT_FALSE(it->IsValid());
189 }
190
191 } // namespace
192
193 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/indexed_db/leveldb/leveldb_transaction.cc ('k') | content/browser/indexed_db/leveldb/leveldb_write_batch.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698