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

Side by Side Diff: components/leveldb/remote_iterator_unittest.cc

Issue 1861903002: mojo leveldb: Add an iteration interface. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase + comments Created 4 years, 8 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
« no previous file with comments | « components/leveldb/public/interfaces/leveldb.mojom ('k') | components/leveldb/util.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 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 <map>
6
7 #include "base/macros.h"
8 #include "components/leveldb/public/cpp/remote_iterator.h"
9 #include "components/leveldb/public/interfaces/leveldb.mojom.h"
10 #include "mojo/common/common_type_converters.h"
11 #include "mojo/shell/public/cpp/shell_connection.h"
12 #include "mojo/shell/public/cpp/shell_test.h"
13 #include "mojo/util/capture_util.h"
14
15 using mojo::Capture;
16
17 namespace leveldb {
18 namespace {
19
20 class RemoteIteratorTest : public mojo::test::ShellTest {
21 public:
22 RemoteIteratorTest() : ShellTest("exe:leveldb_service_unittests") {}
23 ~RemoteIteratorTest() override {}
24
25 protected:
26 // Overridden from mojo::test::ApplicationTestBase:
27 void SetUp() override {
28 ShellTest::SetUp();
29 connector()->ConnectToInterface("mojo:leveldb", &leveldb_);
30
31 DatabaseError error;
32 leveldb()->OpenInMemory(GetProxy(&database_), Capture(&error));
33 ASSERT_TRUE(leveldb().WaitForIncomingResponse());
34 EXPECT_EQ(DatabaseError::OK, error);
35
36 std::map<std::string, std::string> data{
37 {"a", "first"}, {"b:suffix", "second"}, {"c", "third"}};
38
39 for (auto p : data) {
40 // Write a key to the database.
41 error = DatabaseError::INVALID_ARGUMENT;
42 database_->Put(mojo::Array<uint8_t>::From(p.first),
43 mojo::Array<uint8_t>::From(p.second), Capture(&error));
44 ASSERT_TRUE(database_.WaitForIncomingResponse());
45 EXPECT_EQ(DatabaseError::OK, error);
46 }
47 }
48
49 void TearDown() override {
50 leveldb_.reset();
51 ShellTest::TearDown();
52 }
53
54 LevelDBServicePtr& leveldb() { return leveldb_; }
55 LevelDBDatabasePtr& database() { return database_; }
56
57 private:
58 LevelDBServicePtr leveldb_;
59 LevelDBDatabasePtr database_;
60
61 DISALLOW_COPY_AND_ASSIGN(RemoteIteratorTest);
62 };
63
64 TEST_F(RemoteIteratorTest, Seeking) {
65 uint64_t iterator_id = 0;
66 database()->NewIterator(Capture(&iterator_id));
67 ASSERT_TRUE(database().WaitForIncomingResponse());
68 EXPECT_NE(0u, iterator_id);
69
70 RemoteIterator it(database().get(), iterator_id);
71 EXPECT_FALSE(it.Valid());
72
73 it.SeekToFirst();
74 EXPECT_TRUE(it.Valid());
75 EXPECT_EQ("a", it.key());
76 EXPECT_EQ("first", it.value());
77
78 it.SeekToLast();
79 EXPECT_TRUE(it.Valid());
80 EXPECT_EQ("c", it.key());
81 EXPECT_EQ("third", it.value());
82
83 it.Seek("b");
84 EXPECT_TRUE(it.Valid());
85 EXPECT_EQ("b:suffix", it.key());
86 EXPECT_EQ("second", it.value());
87 }
88
89 TEST_F(RemoteIteratorTest, Next) {
90 uint64_t iterator_id = 0;
91 database()->NewIterator(Capture(&iterator_id));
92 ASSERT_TRUE(database().WaitForIncomingResponse());
93 EXPECT_NE(0u, iterator_id);
94
95 RemoteIterator it(database().get(), iterator_id);
96 EXPECT_FALSE(it.Valid());
97
98 it.SeekToFirst();
99 EXPECT_TRUE(it.Valid());
100 EXPECT_EQ("a", it.key());
101 EXPECT_EQ("first", it.value());
102
103 it.Next();
104 EXPECT_TRUE(it.Valid());
105 EXPECT_EQ("b:suffix", it.key());
106 EXPECT_EQ("second", it.value());
107
108 it.Next();
109 EXPECT_TRUE(it.Valid());
110 EXPECT_EQ("c", it.key());
111 EXPECT_EQ("third", it.value());
112
113 it.Next();
114 EXPECT_FALSE(it.Valid());
115 }
116
117 TEST_F(RemoteIteratorTest, Prev) {
118 uint64_t iterator_id = 0;
119 database()->NewIterator(Capture(&iterator_id));
120 ASSERT_TRUE(database().WaitForIncomingResponse());
121 EXPECT_NE(0u, iterator_id);
122
123 RemoteIterator it(database().get(), iterator_id);
124 EXPECT_FALSE(it.Valid());
125
126 it.SeekToLast();
127 EXPECT_TRUE(it.Valid());
128 EXPECT_EQ("c", it.key());
129 EXPECT_EQ("third", it.value());
130
131 it.Prev();
132 EXPECT_TRUE(it.Valid());
133 EXPECT_EQ("b:suffix", it.key());
134 EXPECT_EQ("second", it.value());
135
136 it.Prev();
137 EXPECT_TRUE(it.Valid());
138 EXPECT_EQ("a", it.key());
139 EXPECT_EQ("first", it.value());
140
141 it.Prev();
142 EXPECT_FALSE(it.Valid());
143 }
144
145 } // namespace
146 } // namespace leveldb
OLDNEW
« no previous file with comments | « components/leveldb/public/interfaces/leveldb.mojom ('k') | components/leveldb/util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698