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

Side by Side Diff: mojo/public/cpp/bindings/tests/multiplex_router_unittest.cc

Issue 2766523002: mojo: MessageReceiver*::AcceptWithResponder() now take a unique_ptr to the responder (Closed)
Patch Set: comments Created 3 years, 9 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
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "mojo/public/cpp/bindings/lib/multiplex_router.h" 5 #include "mojo/public/cpp/bindings/lib/multiplex_router.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
65 InterfaceEndpointClient client1(std::move(endpoint1_), &generator, 65 InterfaceEndpointClient client1(std::move(endpoint1_), &generator,
66 base::MakeUnique<PassThroughFilter>(), false, 66 base::MakeUnique<PassThroughFilter>(), false,
67 base::ThreadTaskRunnerHandle::Get(), 0u); 67 base::ThreadTaskRunnerHandle::Get(), 0u);
68 68
69 Message request; 69 Message request;
70 AllocRequestMessage(1, "hello", &request); 70 AllocRequestMessage(1, "hello", &request);
71 71
72 MessageQueue message_queue; 72 MessageQueue message_queue;
73 base::RunLoop run_loop; 73 base::RunLoop run_loop;
74 client0.AcceptWithResponder( 74 client0.AcceptWithResponder(
75 &request, 75 &request, base::MakeUnique<MessageAccumulator>(&message_queue,
76 new MessageAccumulator(&message_queue, run_loop.QuitClosure())); 76 run_loop.QuitClosure()));
77 77
78 run_loop.Run(); 78 run_loop.Run();
79 79
80 EXPECT_FALSE(message_queue.IsEmpty()); 80 EXPECT_FALSE(message_queue.IsEmpty());
81 81
82 Message response; 82 Message response;
83 message_queue.Pop(&response); 83 message_queue.Pop(&response);
84 84
85 EXPECT_EQ(std::string("hello world!"), 85 EXPECT_EQ(std::string("hello world!"),
86 std::string(reinterpret_cast<const char*>(response.payload()))); 86 std::string(reinterpret_cast<const char*>(response.payload())));
87 87
88 // Send a second message on the pipe. 88 // Send a second message on the pipe.
89 Message request2; 89 Message request2;
90 AllocRequestMessage(1, "hello again", &request2); 90 AllocRequestMessage(1, "hello again", &request2);
91 91
92 base::RunLoop run_loop2; 92 base::RunLoop run_loop2;
93 client0.AcceptWithResponder( 93 client0.AcceptWithResponder(
94 &request2, 94 &request2, base::MakeUnique<MessageAccumulator>(&message_queue,
95 new MessageAccumulator(&message_queue, run_loop2.QuitClosure())); 95 run_loop2.QuitClosure()));
96 96
97 run_loop2.Run(); 97 run_loop2.Run();
98 98
99 EXPECT_FALSE(message_queue.IsEmpty()); 99 EXPECT_FALSE(message_queue.IsEmpty());
100 100
101 message_queue.Pop(&response); 101 message_queue.Pop(&response);
102 102
103 EXPECT_EQ(std::string("hello again world!"), 103 EXPECT_EQ(std::string("hello again world!"),
104 std::string(reinterpret_cast<const char*>(response.payload()))); 104 std::string(reinterpret_cast<const char*>(response.payload())));
105 } 105 }
106 106
107 TEST_F(MultiplexRouterTest, BasicRequestResponse_Synchronous) { 107 TEST_F(MultiplexRouterTest, BasicRequestResponse_Synchronous) {
108 InterfaceEndpointClient client0(std::move(endpoint0_), nullptr, 108 InterfaceEndpointClient client0(std::move(endpoint0_), nullptr,
109 base::MakeUnique<PassThroughFilter>(), false, 109 base::MakeUnique<PassThroughFilter>(), false,
110 base::ThreadTaskRunnerHandle::Get(), 0u); 110 base::ThreadTaskRunnerHandle::Get(), 0u);
111 ResponseGenerator generator; 111 ResponseGenerator generator;
112 InterfaceEndpointClient client1(std::move(endpoint1_), &generator, 112 InterfaceEndpointClient client1(std::move(endpoint1_), &generator,
113 base::MakeUnique<PassThroughFilter>(), false, 113 base::MakeUnique<PassThroughFilter>(), false,
114 base::ThreadTaskRunnerHandle::Get(), 0u); 114 base::ThreadTaskRunnerHandle::Get(), 0u);
115 115
116 Message request; 116 Message request;
117 AllocRequestMessage(1, "hello", &request); 117 AllocRequestMessage(1, "hello", &request);
118 118
119 MessageQueue message_queue; 119 MessageQueue message_queue;
120 client0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue)); 120 client0.AcceptWithResponder(
121 &request, base::MakeUnique<MessageAccumulator>(&message_queue));
121 122
122 router1_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); 123 router1_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE);
123 router0_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); 124 router0_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE);
124 125
125 EXPECT_FALSE(message_queue.IsEmpty()); 126 EXPECT_FALSE(message_queue.IsEmpty());
126 127
127 Message response; 128 Message response;
128 message_queue.Pop(&response); 129 message_queue.Pop(&response);
129 130
130 EXPECT_EQ(std::string("hello world!"), 131 EXPECT_EQ(std::string("hello world!"),
131 std::string(reinterpret_cast<const char*>(response.payload()))); 132 std::string(reinterpret_cast<const char*>(response.payload())));
132 133
133 // Send a second message on the pipe. 134 // Send a second message on the pipe.
134 Message request2; 135 Message request2;
135 AllocRequestMessage(1, "hello again", &request2); 136 AllocRequestMessage(1, "hello again", &request2);
136 137
137 client0.AcceptWithResponder(&request2, 138 client0.AcceptWithResponder(
138 new MessageAccumulator(&message_queue)); 139 &request2, base::MakeUnique<MessageAccumulator>(&message_queue));
139 140
140 router1_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); 141 router1_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE);
141 router0_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE); 142 router0_->WaitForIncomingMessage(MOJO_DEADLINE_INDEFINITE);
142 143
143 EXPECT_FALSE(message_queue.IsEmpty()); 144 EXPECT_FALSE(message_queue.IsEmpty());
144 145
145 message_queue.Pop(&response); 146 message_queue.Pop(&response);
146 147
147 EXPECT_EQ(std::string("hello again world!"), 148 EXPECT_EQ(std::string("hello again world!"),
148 std::string(reinterpret_cast<const char*>(response.payload()))); 149 std::string(reinterpret_cast<const char*>(response.payload())));
(...skipping 11 matching lines...) Expand all
160 base::WrapUnique(new PassThroughFilter()), 161 base::WrapUnique(new PassThroughFilter()),
161 false, base::ThreadTaskRunnerHandle::Get(), 162 false, base::ThreadTaskRunnerHandle::Get(),
162 0u); 163 0u);
163 164
164 Message request; 165 Message request;
165 AllocRequestMessage(1, "hello", &request); 166 AllocRequestMessage(1, "hello", &request);
166 167
167 MessageQueue message_queue; 168 MessageQueue message_queue;
168 base::RunLoop run_loop2; 169 base::RunLoop run_loop2;
169 client0.AcceptWithResponder( 170 client0.AcceptWithResponder(
170 &request, 171 &request, base::MakeUnique<MessageAccumulator>(&message_queue,
171 new MessageAccumulator(&message_queue, run_loop2.QuitClosure())); 172 run_loop2.QuitClosure()));
172 run_loop.Run(); 173 run_loop.Run();
173 174
174 // The request has been received but the response has not been sent yet. 175 // The request has been received but the response has not been sent yet.
175 EXPECT_TRUE(message_queue.IsEmpty()); 176 EXPECT_TRUE(message_queue.IsEmpty());
176 177
177 // Send the response. 178 // Send the response.
178 EXPECT_TRUE(generator.responder_is_valid()); 179 EXPECT_TRUE(generator.responder_is_valid());
179 generator.CompleteWithResponse(); 180 generator.CompleteWithResponse();
180 run_loop2.Run(); 181 run_loop2.Run();
181 182
182 // Check the response. 183 // Check the response.
183 EXPECT_FALSE(message_queue.IsEmpty()); 184 EXPECT_FALSE(message_queue.IsEmpty());
184 Message response; 185 Message response;
185 message_queue.Pop(&response); 186 message_queue.Pop(&response);
186 EXPECT_EQ(std::string("hello world!"), 187 EXPECT_EQ(std::string("hello world!"),
187 std::string(reinterpret_cast<const char*>(response.payload()))); 188 std::string(reinterpret_cast<const char*>(response.payload())));
188 189
189 // Send a second message on the pipe. 190 // Send a second message on the pipe.
190 base::RunLoop run_loop3; 191 base::RunLoop run_loop3;
191 generator.set_closure(run_loop3.QuitClosure()); 192 generator.set_closure(run_loop3.QuitClosure());
192 Message request2; 193 Message request2;
193 AllocRequestMessage(1, "hello again", &request2); 194 AllocRequestMessage(1, "hello again", &request2);
194 195
195 base::RunLoop run_loop4; 196 base::RunLoop run_loop4;
196 client0.AcceptWithResponder( 197 client0.AcceptWithResponder(
197 &request2, 198 &request2, base::MakeUnique<MessageAccumulator>(&message_queue,
198 new MessageAccumulator(&message_queue, run_loop4.QuitClosure())); 199 run_loop4.QuitClosure()));
199 run_loop3.Run(); 200 run_loop3.Run();
200 201
201 // The request has been received but the response has not been sent yet. 202 // The request has been received but the response has not been sent yet.
202 EXPECT_TRUE(message_queue.IsEmpty()); 203 EXPECT_TRUE(message_queue.IsEmpty());
203 204
204 // Send the second response. 205 // Send the second response.
205 EXPECT_TRUE(generator.responder_is_valid()); 206 EXPECT_TRUE(generator.responder_is_valid());
206 generator.CompleteWithResponse(); 207 generator.CompleteWithResponse();
207 run_loop4.Run(); 208 run_loop4.Run();
208 209
(...skipping 30 matching lines...) Expand all
239 0u); 240 0u);
240 bool error_handler_called1 = false; 241 bool error_handler_called1 = false;
241 client1.set_connection_error_handler( 242 client1.set_connection_error_handler(
242 base::Bind(&ForwardErrorHandler, &error_handler_called1, 243 base::Bind(&ForwardErrorHandler, &error_handler_called1,
243 run_loop1.QuitClosure())); 244 run_loop1.QuitClosure()));
244 245
245 Message request; 246 Message request;
246 AllocRequestMessage(1, "hello", &request); 247 AllocRequestMessage(1, "hello", &request);
247 248
248 MessageQueue message_queue; 249 MessageQueue message_queue;
249 client0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue)); 250 client0.AcceptWithResponder(
251 &request, base::MakeUnique<MessageAccumulator>(&message_queue));
250 run_loop3.Run(); 252 run_loop3.Run();
251 253
252 // The request has been received but no response has been sent. 254 // The request has been received but no response has been sent.
253 EXPECT_TRUE(message_queue.IsEmpty()); 255 EXPECT_TRUE(message_queue.IsEmpty());
254 256
255 // Destroy the responder MessagerReceiver but don't send any response. 257 // Destroy the responder MessagerReceiver but don't send any response.
256 generator.CompleteWithoutResponse(); 258 generator.CompleteWithoutResponse();
257 run_loop0.Run(); 259 run_loop0.Run();
258 run_loop1.Run(); 260 run_loop1.Run();
259 261
(...skipping 26 matching lines...) Expand all
286 false, base::ThreadTaskRunnerHandle::Get(), 0u); 288 false, base::ThreadTaskRunnerHandle::Get(), 0u);
287 InterfaceEndpointClient client1(std::move(endpoint1_), &generator, 289 InterfaceEndpointClient client1(std::move(endpoint1_), &generator,
288 base::MakeUnique<PassThroughFilter>(), 290 base::MakeUnique<PassThroughFilter>(),
289 false, base::ThreadTaskRunnerHandle::Get(), 291 false, base::ThreadTaskRunnerHandle::Get(),
290 0u); 292 0u);
291 293
292 Message request; 294 Message request;
293 AllocRequestMessage(1, "hello", &request); 295 AllocRequestMessage(1, "hello", &request);
294 296
295 MessageQueue message_queue; 297 MessageQueue message_queue;
296 client0.AcceptWithResponder(&request, 298 client0.AcceptWithResponder(
297 new MessageAccumulator(&message_queue)); 299 &request, base::MakeUnique<MessageAccumulator>(&message_queue));
298 300
299 run_loop.Run(); 301 run_loop.Run();
300 302
301 EXPECT_TRUE(generator.has_responder()); 303 EXPECT_TRUE(generator.has_responder());
302 } 304 }
303 305
304 EXPECT_FALSE(generator.responder_is_valid()); 306 EXPECT_FALSE(generator.responder_is_valid());
305 generator.CompleteWithResponse(); // This should end up doing nothing. 307 generator.CompleteWithResponse(); // This should end up doing nothing.
306 } 308 }
307 309
308 // TODO(yzshen): add more tests. 310 // TODO(yzshen): add more tests.
309 311
310 } // namespace 312 } // namespace
311 } // namespace test 313 } // namespace test
312 } // namespace mojo 314 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/public/cpp/bindings/tests/bindings_perftest.cc ('k') | mojo/public/cpp/bindings/tests/router_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698