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

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

Issue 2096293002: Eliminate usage of InterfacePtr::WaitForIncomingResponse. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix trybots failure Created 4 years, 5 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/leveldb_service_unittest.cc ('k') | mash/catalog_viewer/catalog_viewer.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <map> 5 #include <map>
6 6
7 #include "base/bind.h"
7 #include "base/macros.h" 8 #include "base/macros.h"
9 #include "base/run_loop.h"
8 #include "components/leveldb/public/cpp/remote_iterator.h" 10 #include "components/leveldb/public/cpp/remote_iterator.h"
9 #include "components/leveldb/public/interfaces/leveldb.mojom.h" 11 #include "components/leveldb/public/interfaces/leveldb.mojom.h"
10 #include "mojo/common/common_type_converters.h" 12 #include "mojo/common/common_type_converters.h"
11 #include "services/shell/public/cpp/shell_connection.h" 13 #include "services/shell/public/cpp/shell_connection.h"
12 #include "services/shell/public/cpp/shell_test.h" 14 #include "services/shell/public/cpp/shell_test.h"
13 15
14 namespace leveldb { 16 namespace leveldb {
15 namespace { 17 namespace {
16 18
17 template <typename T> 19 template <typename T>
18 void DoCapture(T* t, T got_t) { *t = std::move(got_t); } 20 void DoCapture(T* t, const base::Closure& quit_closure, T got_t) {
21 *t = std::move(got_t);
22 if (!quit_closure.is_null())
23 quit_closure.Run();
24 }
19 25
20 template <typename T1> 26 template <typename T1>
21 base::Callback<void(T1)> Capture(T1* t1) { 27 base::Callback<void(T1)> Capture(
22 return base::Bind(&DoCapture<T1>, t1); 28 T1* t1,
29 const base::Closure& quit_closure = base::Closure()) {
30 return base::Bind(&DoCapture<T1>, t1, quit_closure);
23 } 31 }
24 32
25 class RemoteIteratorTest : public shell::test::ShellTest { 33 class RemoteIteratorTest : public shell::test::ShellTest {
26 public: 34 public:
27 RemoteIteratorTest() : ShellTest("exe:leveldb_service_unittests") {} 35 RemoteIteratorTest() : ShellTest("exe:leveldb_service_unittests") {}
28 ~RemoteIteratorTest() override {} 36 ~RemoteIteratorTest() override {}
29 37
30 protected: 38 protected:
31 // Overridden from mojo::test::ApplicationTestBase: 39 // Overridden from mojo::test::ApplicationTestBase:
32 void SetUp() override { 40 void SetUp() override {
33 ShellTest::SetUp(); 41 ShellTest::SetUp();
34 connector()->ConnectToInterface("mojo:leveldb", &leveldb_); 42 connector()->ConnectToInterface("mojo:leveldb", &leveldb_);
35 43
36 mojom::DatabaseError error; 44 mojom::DatabaseError error;
37 leveldb()->OpenInMemory(GetProxy(&database_), Capture(&error)); 45 base::RunLoop run_loop;
38 ASSERT_TRUE(leveldb().WaitForIncomingResponse()); 46 leveldb()->OpenInMemory(GetProxy(&database_),
47 Capture(&error, run_loop.QuitClosure()));
48 run_loop.Run();
39 EXPECT_EQ(mojom::DatabaseError::OK, error); 49 EXPECT_EQ(mojom::DatabaseError::OK, error);
40 50
41 std::map<std::string, std::string> data{ 51 std::map<std::string, std::string> data{
42 {"a", "first"}, {"b:suffix", "second"}, {"c", "third"}}; 52 {"a", "first"}, {"b:suffix", "second"}, {"c", "third"}};
43 53
44 for (auto p : data) { 54 for (auto p : data) {
45 // Write a key to the database. 55 // Write a key to the database.
46 error = mojom::DatabaseError::INVALID_ARGUMENT; 56 error = mojom::DatabaseError::INVALID_ARGUMENT;
57 base::RunLoop run_loop;
47 database_->Put(mojo::Array<uint8_t>::From(p.first), 58 database_->Put(mojo::Array<uint8_t>::From(p.first),
48 mojo::Array<uint8_t>::From(p.second), Capture(&error)); 59 mojo::Array<uint8_t>::From(p.second),
49 ASSERT_TRUE(database_.WaitForIncomingResponse()); 60 Capture(&error, run_loop.QuitClosure()));
61 run_loop.Run();
50 EXPECT_EQ(mojom::DatabaseError::OK, error); 62 EXPECT_EQ(mojom::DatabaseError::OK, error);
51 } 63 }
52 } 64 }
53 65
54 void TearDown() override { 66 void TearDown() override {
55 leveldb_.reset(); 67 leveldb_.reset();
56 ShellTest::TearDown(); 68 ShellTest::TearDown();
57 } 69 }
58 70
59 mojom::LevelDBServicePtr& leveldb() { return leveldb_; } 71 mojom::LevelDBServicePtr& leveldb() { return leveldb_; }
60 mojom::LevelDBDatabasePtr& database() { return database_; } 72 mojom::LevelDBDatabasePtr& database() { return database_; }
61 73
62 private: 74 private:
63 mojom::LevelDBServicePtr leveldb_; 75 mojom::LevelDBServicePtr leveldb_;
64 mojom::LevelDBDatabasePtr database_; 76 mojom::LevelDBDatabasePtr database_;
65 77
66 DISALLOW_COPY_AND_ASSIGN(RemoteIteratorTest); 78 DISALLOW_COPY_AND_ASSIGN(RemoteIteratorTest);
67 }; 79 };
68 80
69 TEST_F(RemoteIteratorTest, Seeking) { 81 TEST_F(RemoteIteratorTest, Seeking) {
70 uint64_t iterator_id = 0; 82 uint64_t iterator_id = 0;
71 database()->NewIterator(Capture(&iterator_id)); 83 base::RunLoop run_loop;
72 ASSERT_TRUE(database().WaitForIncomingResponse()); 84 database()->NewIterator(Capture(&iterator_id, run_loop.QuitClosure()));
85 run_loop.Run();
73 EXPECT_NE(0u, iterator_id); 86 EXPECT_NE(0u, iterator_id);
74 87
75 RemoteIterator it(database().get(), iterator_id); 88 RemoteIterator it(database().get(), iterator_id);
76 EXPECT_FALSE(it.Valid()); 89 EXPECT_FALSE(it.Valid());
77 90
78 it.SeekToFirst(); 91 it.SeekToFirst();
79 EXPECT_TRUE(it.Valid()); 92 EXPECT_TRUE(it.Valid());
80 EXPECT_EQ("a", it.key()); 93 EXPECT_EQ("a", it.key());
81 EXPECT_EQ("first", it.value()); 94 EXPECT_EQ("first", it.value());
82 95
83 it.SeekToLast(); 96 it.SeekToLast();
84 EXPECT_TRUE(it.Valid()); 97 EXPECT_TRUE(it.Valid());
85 EXPECT_EQ("c", it.key()); 98 EXPECT_EQ("c", it.key());
86 EXPECT_EQ("third", it.value()); 99 EXPECT_EQ("third", it.value());
87 100
88 it.Seek("b"); 101 it.Seek("b");
89 EXPECT_TRUE(it.Valid()); 102 EXPECT_TRUE(it.Valid());
90 EXPECT_EQ("b:suffix", it.key()); 103 EXPECT_EQ("b:suffix", it.key());
91 EXPECT_EQ("second", it.value()); 104 EXPECT_EQ("second", it.value());
92 } 105 }
93 106
94 TEST_F(RemoteIteratorTest, Next) { 107 TEST_F(RemoteIteratorTest, Next) {
95 uint64_t iterator_id = 0; 108 uint64_t iterator_id = 0;
96 database()->NewIterator(Capture(&iterator_id)); 109 base::RunLoop run_loop;
97 ASSERT_TRUE(database().WaitForIncomingResponse()); 110 database()->NewIterator(Capture(&iterator_id, run_loop.QuitClosure()));
111 run_loop.Run();
98 EXPECT_NE(0u, iterator_id); 112 EXPECT_NE(0u, iterator_id);
99 113
100 RemoteIterator it(database().get(), iterator_id); 114 RemoteIterator it(database().get(), iterator_id);
101 EXPECT_FALSE(it.Valid()); 115 EXPECT_FALSE(it.Valid());
102 116
103 it.SeekToFirst(); 117 it.SeekToFirst();
104 EXPECT_TRUE(it.Valid()); 118 EXPECT_TRUE(it.Valid());
105 EXPECT_EQ("a", it.key()); 119 EXPECT_EQ("a", it.key());
106 EXPECT_EQ("first", it.value()); 120 EXPECT_EQ("first", it.value());
107 121
108 it.Next(); 122 it.Next();
109 EXPECT_TRUE(it.Valid()); 123 EXPECT_TRUE(it.Valid());
110 EXPECT_EQ("b:suffix", it.key()); 124 EXPECT_EQ("b:suffix", it.key());
111 EXPECT_EQ("second", it.value()); 125 EXPECT_EQ("second", it.value());
112 126
113 it.Next(); 127 it.Next();
114 EXPECT_TRUE(it.Valid()); 128 EXPECT_TRUE(it.Valid());
115 EXPECT_EQ("c", it.key()); 129 EXPECT_EQ("c", it.key());
116 EXPECT_EQ("third", it.value()); 130 EXPECT_EQ("third", it.value());
117 131
118 it.Next(); 132 it.Next();
119 EXPECT_FALSE(it.Valid()); 133 EXPECT_FALSE(it.Valid());
120 } 134 }
121 135
122 TEST_F(RemoteIteratorTest, Prev) { 136 TEST_F(RemoteIteratorTest, Prev) {
123 uint64_t iterator_id = 0; 137 uint64_t iterator_id = 0;
124 database()->NewIterator(Capture(&iterator_id)); 138 base::RunLoop run_loop;
125 ASSERT_TRUE(database().WaitForIncomingResponse()); 139 database()->NewIterator(Capture(&iterator_id, run_loop.QuitClosure()));
140 run_loop.Run();
126 EXPECT_NE(0u, iterator_id); 141 EXPECT_NE(0u, iterator_id);
127 142
128 RemoteIterator it(database().get(), iterator_id); 143 RemoteIterator it(database().get(), iterator_id);
129 EXPECT_FALSE(it.Valid()); 144 EXPECT_FALSE(it.Valid());
130 145
131 it.SeekToLast(); 146 it.SeekToLast();
132 EXPECT_TRUE(it.Valid()); 147 EXPECT_TRUE(it.Valid());
133 EXPECT_EQ("c", it.key()); 148 EXPECT_EQ("c", it.key());
134 EXPECT_EQ("third", it.value()); 149 EXPECT_EQ("third", it.value());
135 150
136 it.Prev(); 151 it.Prev();
137 EXPECT_TRUE(it.Valid()); 152 EXPECT_TRUE(it.Valid());
138 EXPECT_EQ("b:suffix", it.key()); 153 EXPECT_EQ("b:suffix", it.key());
139 EXPECT_EQ("second", it.value()); 154 EXPECT_EQ("second", it.value());
140 155
141 it.Prev(); 156 it.Prev();
142 EXPECT_TRUE(it.Valid()); 157 EXPECT_TRUE(it.Valid());
143 EXPECT_EQ("a", it.key()); 158 EXPECT_EQ("a", it.key());
144 EXPECT_EQ("first", it.value()); 159 EXPECT_EQ("first", it.value());
145 160
146 it.Prev(); 161 it.Prev();
147 EXPECT_FALSE(it.Valid()); 162 EXPECT_FALSE(it.Valid());
148 } 163 }
149 164
150 } // namespace 165 } // namespace
151 } // namespace leveldb 166 } // namespace leveldb
OLDNEW
« no previous file with comments | « components/leveldb/leveldb_service_unittest.cc ('k') | mash/catalog_viewer/catalog_viewer.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698