OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/router.h" | 5 #include "mojo/public/cpp/bindings/lib/router.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
10 #include "base/run_loop.h" | 10 #include "base/run_loop.h" |
(...skipping 21 matching lines...) Expand all Loading... |
32 | 32 |
33 protected: | 33 protected: |
34 ScopedMessagePipeHandle handle0_; | 34 ScopedMessagePipeHandle handle0_; |
35 ScopedMessagePipeHandle handle1_; | 35 ScopedMessagePipeHandle handle1_; |
36 | 36 |
37 private: | 37 private: |
38 base::MessageLoop loop_; | 38 base::MessageLoop loop_; |
39 }; | 39 }; |
40 | 40 |
41 TEST_F(RouterTest, BasicRequestResponse) { | 41 TEST_F(RouterTest, BasicRequestResponse) { |
42 internal::Router router0(std::move(handle0_), internal::FilterChain()); | 42 internal::Router router0(std::move(handle0_), internal::FilterChain(), false); |
43 internal::Router router1(std::move(handle1_), internal::FilterChain()); | 43 internal::Router router1(std::move(handle1_), internal::FilterChain(), false); |
44 | 44 |
45 ResponseGenerator generator; | 45 ResponseGenerator generator; |
46 router1.set_incoming_receiver(&generator); | 46 router1.set_incoming_receiver(&generator); |
47 | 47 |
48 Message request; | 48 Message request; |
49 AllocRequestMessage(1, "hello", &request); | 49 AllocRequestMessage(1, "hello", &request); |
50 | 50 |
51 MessageQueue message_queue; | 51 MessageQueue message_queue; |
52 base::RunLoop run_loop; | 52 base::RunLoop run_loop; |
53 router0.AcceptWithResponder( | 53 router0.AcceptWithResponder( |
(...skipping 22 matching lines...) Expand all Loading... |
76 | 76 |
77 EXPECT_FALSE(message_queue.IsEmpty()); | 77 EXPECT_FALSE(message_queue.IsEmpty()); |
78 | 78 |
79 message_queue.Pop(&response); | 79 message_queue.Pop(&response); |
80 | 80 |
81 EXPECT_EQ(std::string("hello again world!"), | 81 EXPECT_EQ(std::string("hello again world!"), |
82 std::string(reinterpret_cast<const char*>(response.payload()))); | 82 std::string(reinterpret_cast<const char*>(response.payload()))); |
83 } | 83 } |
84 | 84 |
85 TEST_F(RouterTest, BasicRequestResponse_Synchronous) { | 85 TEST_F(RouterTest, BasicRequestResponse_Synchronous) { |
86 internal::Router router0(std::move(handle0_), internal::FilterChain()); | 86 internal::Router router0(std::move(handle0_), internal::FilterChain(), false); |
87 internal::Router router1(std::move(handle1_), internal::FilterChain()); | 87 internal::Router router1(std::move(handle1_), internal::FilterChain(), false); |
88 | 88 |
89 ResponseGenerator generator; | 89 ResponseGenerator generator; |
90 router1.set_incoming_receiver(&generator); | 90 router1.set_incoming_receiver(&generator); |
91 | 91 |
92 Message request; | 92 Message request; |
93 AllocRequestMessage(1, "hello", &request); | 93 AllocRequestMessage(1, "hello", &request); |
94 | 94 |
95 MessageQueue message_queue; | 95 MessageQueue message_queue; |
96 router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue)); | 96 router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue)); |
97 | 97 |
(...skipping 20 matching lines...) Expand all Loading... |
118 | 118 |
119 EXPECT_FALSE(message_queue.IsEmpty()); | 119 EXPECT_FALSE(message_queue.IsEmpty()); |
120 | 120 |
121 message_queue.Pop(&response); | 121 message_queue.Pop(&response); |
122 | 122 |
123 EXPECT_EQ(std::string("hello again world!"), | 123 EXPECT_EQ(std::string("hello again world!"), |
124 std::string(reinterpret_cast<const char*>(response.payload()))); | 124 std::string(reinterpret_cast<const char*>(response.payload()))); |
125 } | 125 } |
126 | 126 |
127 TEST_F(RouterTest, RequestWithNoReceiver) { | 127 TEST_F(RouterTest, RequestWithNoReceiver) { |
128 internal::Router router0(std::move(handle0_), internal::FilterChain()); | 128 internal::Router router0(std::move(handle0_), internal::FilterChain(), false); |
129 internal::Router router1(std::move(handle1_), internal::FilterChain()); | 129 internal::Router router1(std::move(handle1_), internal::FilterChain(), false); |
130 | 130 |
131 // Without an incoming receiver set on router1, we expect router0 to observe | 131 // Without an incoming receiver set on router1, we expect router0 to observe |
132 // an error as a result of sending a message. | 132 // an error as a result of sending a message. |
133 | 133 |
134 Message request; | 134 Message request; |
135 AllocRequestMessage(1, "hello", &request); | 135 AllocRequestMessage(1, "hello", &request); |
136 | 136 |
137 MessageQueue message_queue; | 137 MessageQueue message_queue; |
138 base::RunLoop run_loop, run_loop2; | 138 base::RunLoop run_loop, run_loop2; |
139 router0.set_connection_error_handler(run_loop.QuitClosure()); | 139 router0.set_connection_error_handler(run_loop.QuitClosure()); |
140 router1.set_connection_error_handler(run_loop2.QuitClosure()); | 140 router1.set_connection_error_handler(run_loop2.QuitClosure()); |
141 router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue)); | 141 router0.AcceptWithResponder(&request, new MessageAccumulator(&message_queue)); |
142 | 142 |
143 run_loop.Run(); | 143 run_loop.Run(); |
144 run_loop2.Run(); | 144 run_loop2.Run(); |
145 | 145 |
146 EXPECT_TRUE(router0.encountered_error()); | 146 EXPECT_TRUE(router0.encountered_error()); |
147 EXPECT_TRUE(router1.encountered_error()); | 147 EXPECT_TRUE(router1.encountered_error()); |
148 EXPECT_TRUE(message_queue.IsEmpty()); | 148 EXPECT_TRUE(message_queue.IsEmpty()); |
149 } | 149 } |
150 | 150 |
151 // Tests Router using the LazyResponseGenerator. The responses will not be | 151 // Tests Router using the LazyResponseGenerator. The responses will not be |
152 // sent until after the requests have been accepted. | 152 // sent until after the requests have been accepted. |
153 TEST_F(RouterTest, LazyResponses) { | 153 TEST_F(RouterTest, LazyResponses) { |
154 internal::Router router0(std::move(handle0_), internal::FilterChain()); | 154 internal::Router router0(std::move(handle0_), internal::FilterChain(), false); |
155 internal::Router router1(std::move(handle1_), internal::FilterChain()); | 155 internal::Router router1(std::move(handle1_), internal::FilterChain(), false); |
156 | 156 |
157 base::RunLoop run_loop; | 157 base::RunLoop run_loop; |
158 LazyResponseGenerator generator(run_loop.QuitClosure()); | 158 LazyResponseGenerator generator(run_loop.QuitClosure()); |
159 router1.set_incoming_receiver(&generator); | 159 router1.set_incoming_receiver(&generator); |
160 | 160 |
161 Message request; | 161 Message request; |
162 AllocRequestMessage(1, "hello", &request); | 162 AllocRequestMessage(1, "hello", &request); |
163 | 163 |
164 MessageQueue message_queue; | 164 MessageQueue message_queue; |
165 base::RunLoop run_loop2; | 165 base::RunLoop run_loop2; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
210 message_queue.Pop(&response); | 210 message_queue.Pop(&response); |
211 EXPECT_EQ(std::string("hello again world!"), | 211 EXPECT_EQ(std::string("hello again world!"), |
212 std::string(reinterpret_cast<const char*>(response.payload()))); | 212 std::string(reinterpret_cast<const char*>(response.payload()))); |
213 } | 213 } |
214 | 214 |
215 // Tests that if the receiving application destroys the responder_ without | 215 // Tests that if the receiving application destroys the responder_ without |
216 // sending a response, then we trigger connection error at both sides. Moreover, | 216 // sending a response, then we trigger connection error at both sides. Moreover, |
217 // both sides still appear to have a valid message pipe handle bound. | 217 // both sides still appear to have a valid message pipe handle bound. |
218 TEST_F(RouterTest, MissingResponses) { | 218 TEST_F(RouterTest, MissingResponses) { |
219 base::RunLoop run_loop0, run_loop1; | 219 base::RunLoop run_loop0, run_loop1; |
220 internal::Router router0(std::move(handle0_), internal::FilterChain()); | 220 internal::Router router0(std::move(handle0_), internal::FilterChain(), false); |
221 bool error_handler_called0 = false; | 221 bool error_handler_called0 = false; |
222 router0.set_connection_error_handler( | 222 router0.set_connection_error_handler( |
223 [&error_handler_called0, &run_loop0]() { | 223 [&error_handler_called0, &run_loop0]() { |
224 error_handler_called0 = true; | 224 error_handler_called0 = true; |
225 run_loop0.Quit(); | 225 run_loop0.Quit(); |
226 }); | 226 }); |
227 | 227 |
228 internal::Router router1(std::move(handle1_), internal::FilterChain()); | 228 internal::Router router1(std::move(handle1_), internal::FilterChain(), false); |
229 bool error_handler_called1 = false; | 229 bool error_handler_called1 = false; |
230 router1.set_connection_error_handler( | 230 router1.set_connection_error_handler( |
231 [&error_handler_called1, &run_loop1]() { | 231 [&error_handler_called1, &run_loop1]() { |
232 error_handler_called1 = true; | 232 error_handler_called1 = true; |
233 run_loop1.Quit(); | 233 run_loop1.Quit(); |
234 }); | 234 }); |
235 | 235 |
236 base::RunLoop run_loop3; | 236 base::RunLoop run_loop3; |
237 LazyResponseGenerator generator(run_loop3.QuitClosure()); | 237 LazyResponseGenerator generator(run_loop3.QuitClosure()); |
238 router1.set_incoming_receiver(&generator); | 238 router1.set_incoming_receiver(&generator); |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
270 } | 270 } |
271 | 271 |
272 TEST_F(RouterTest, LateResponse) { | 272 TEST_F(RouterTest, LateResponse) { |
273 // Test that things won't blow up if we try to send a message to a | 273 // Test that things won't blow up if we try to send a message to a |
274 // MessageReceiver, which was given to us via AcceptWithResponder, | 274 // MessageReceiver, which was given to us via AcceptWithResponder, |
275 // after the router has gone away. | 275 // after the router has gone away. |
276 | 276 |
277 base::RunLoop run_loop; | 277 base::RunLoop run_loop; |
278 LazyResponseGenerator generator(run_loop.QuitClosure()); | 278 LazyResponseGenerator generator(run_loop.QuitClosure()); |
279 { | 279 { |
280 internal::Router router0(std::move(handle0_), internal::FilterChain()); | 280 internal::Router router0(std::move(handle0_), internal::FilterChain(), |
281 internal::Router router1(std::move(handle1_), internal::FilterChain()); | 281 false); |
| 282 internal::Router router1(std::move(handle1_), internal::FilterChain(), |
| 283 false); |
282 | 284 |
283 router1.set_incoming_receiver(&generator); | 285 router1.set_incoming_receiver(&generator); |
284 | 286 |
285 Message request; | 287 Message request; |
286 AllocRequestMessage(1, "hello", &request); | 288 AllocRequestMessage(1, "hello", &request); |
287 | 289 |
288 MessageQueue message_queue; | 290 MessageQueue message_queue; |
289 router0.AcceptWithResponder(&request, | 291 router0.AcceptWithResponder(&request, |
290 new MessageAccumulator(&message_queue)); | 292 new MessageAccumulator(&message_queue)); |
291 | 293 |
292 run_loop.Run(); | 294 run_loop.Run(); |
293 | 295 |
294 EXPECT_TRUE(generator.has_responder()); | 296 EXPECT_TRUE(generator.has_responder()); |
295 } | 297 } |
296 | 298 |
297 EXPECT_FALSE(generator.responder_is_valid()); | 299 EXPECT_FALSE(generator.responder_is_valid()); |
298 generator.CompleteWithResponse(); // This should end up doing nothing. | 300 generator.CompleteWithResponse(); // This should end up doing nothing. |
299 } | 301 } |
300 | 302 |
301 } // namespace | 303 } // namespace |
302 } // namespace test | 304 } // namespace test |
303 } // namespace mojo | 305 } // namespace mojo |
OLD | NEW |